对下面的文法G.ppt

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

对下面的文法G;P91

2、对下面的文法G:

E?TE‘

E’?+E|?

T?FT‘

T’?T|?

F?PF‘

F’?*F‘|?

P?(E)|a|b|^

(1)计算这个文法的每个非终结符的FIRST集和FOLLOW集。

(2)证明这个文法是LL(1)的。

(3)构造它的预测分析表。

(4)构造它的递归下降分析程序。;解:(1)计算FIRST与FOLLOW集

FIRST(P)={(,a,b,^}

FIRST(F’)={*,?}

FIRST(F)=FIRST(P)={(,a,b,^}

FIRST(T’)=FIRST(T)?{?}={(,a,b,^,?}

FIRST(T)=FIRST(F)={(,a,b,^}

FIRST(E’)={+,?}

FIRST(E)=FIRST(T)={(,a,b,^}

FOLLOW(E)={),#}

FOLLOW(E’)=FOLLOW(E)={),#}

FOLLOW(T)=FIRST(E’)\??FOLLOW(E)={+,),#}

FOLLOW(T’)=FOLLOW(T)=={+,),#}

FOLLOW(F)=FIRST(T’)\??FOLLOW(T)={(,a,b,^,+,),#}

FOLLOW(F’)=FOLLOW(F)={(,a,b,^,+,),#}

FOLLOW(P)=FIRST(F’)\??FOLLOW(F)={*,(,a,b,^,+,),#};;(2)证明这个文法是LL(1)的。

对产生式P?(E)|a|b|^,有

FIRST((E))?FISRT(a)?FIRST(b)?FIRST(^)=?

对产生式E’?+E|?

FIRST(+E)?FOLLOW(E’)=

{+}?{),#}=?

对产生式T’?T|?

FIRST(T)?FOLLOW(T’)=

{(,a,b,^}?{+,),#}=?

对产生式F‘?*F’|?

FIRST(*F’)?FOLLOW(F’)=

{*}?{(,a,b,^,+,),#}=?

文法不含左递归。

综上i,ii,iii可知,文法G是LL(1)的。

;(3)构造预测分析表。;(1)设置过程advance为读下一个单词送全程变量

(2)设置过程error为错误处理程序;3.E’过程

ProcedureE’

Begin

ifsym=‘+’then

begin

advance;

E;

end

else

ifsymin[#,)]

return

else

error;4.T过程

ProcedureT

Begin

F;T’;

End

5.T’过程

ProcedureT’

Begin

ifsymin[),+,#]

return

else

T

end;6.F过程

ProcedureF

Begin

P;

F’

end;7.F’过程

ProcedureF

Begin

ifsym=‘*’then

begin

advance;

F’

end

else

ifsymin[a,b,(,),^,+,#]then

return

else

error;

end;8.P过程

ProcedureP

Begin

ifsymin[a,b,^]then

advance

else

ifsym=‘(‘then

begin

advance;E

ifsym=‘)’then

advance;

else

error;

end

else

error;

end

文档评论(0)

xinfeiyang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档