编译原理第4章作业答案.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

第四章习题4.2.1:考虑上下文无关文法:S-〉SS+|SS*|a以及串aa+a*

(1)给出这个串的一个最左推导

S-

S

S

*

-

S

S

+

S

*

-

a

S

+

S

*

-

a

a

+

S

*

-

aa

+;

a*

(3)给出这个串的一棵语法分析树

习题4.3.1:下面是一个只包含符号a和b的正则表达式的文法。它使用+替代表示并运算的符号|,以避免和文法中作为元符号使用的竖线相混淆:

rexprTrexpr+rterm|rtermrterm—rtermrfactor|rfactorrfactor—rfactor*|rprimaryrprimary—a|b

1)对这个文法提取公因子

2)提取公因子的变换使这个文法适用于自顶向下的语法分析技术吗?

3)提取公因子之后,原文法中消除左递归

4)得到的文法适用于自顶向下的语法分析吗?

1)提取左公因子之后的文法变为rexpr—rexpr+rterm|rtermrterm—rtermrfactor|rfactorrfactor—rfactor*|rprimaryrprimary—a|b

2)不可以,文法中存在左递归,而自顶向下技术不适合左递归文法

3)消除左递归后的文法

rexpr-rtermrexpr

rexpr-+rtermrexprlerterm-rfactorrtermrterm-factorrterm|erfactor-rprimayrfactorfactor-〉*rfactor|erprimary-a|b

该文法无左递归,适合于自顶向下的语法分析

习题4.4.1:为下面的每一个文法设计一个预测分析器,并给出预测分析表。可能要先对文法进行提取左公因子或消除左递归

(3)S-〉S(S)S|*

(5)S-(L)|aL-L,S|S

(3)

①消除该文法的左递归后得到文法

S-〉S

S-〉(S)SS|*

用类Pascal语言构造的一个预测分析器:

PROCEDURES

BEGIN

S;

WHILE(lookahead二二()

THENBEGIN

match(();

S;

match());

END;

ELSEIF(lookahead==a‘)

THENmatch(a)

ELSEerror

END;

②计算FIRST和FOLLOW集合

FIRST(S)={(,*}FOLLOW(S)={),$}

FIRST(S)={(,*}FOLLOW(S)={),$}

③构建预测分析表

非终结符号

输入符号

(

)

$

S

S-S

S-S

S-S

S

S-(S)SS

S-*

S-*

(5)

①消除该文法的左递归得到文法

S-〉(L)|a

L-SL

L-〉,SL|£

用类Pascal语言的一个预测分析器:

PROCEDURES

BEGIN

if(lookahead二二()

THENBEGIN

match(();L;

match());

END;

ELSEIF(lookahead==a‘)

THENmatch(a)

ELSEerror

END;

PROCEDUREL;

BEGIN

S;

WHILE(lookahead==,);

BEGIN

match(,);S;

END;

END;

②计算FIRST与FOLLOW集合FIRST(S)={(,a}FOLLOW(S)={),,,$}

FIRST(L)={(,a}FOLLOW(L)={)}

FIRST(L)={,,£}FOLLOW(L)={)}

③构建预测分析表

非终结符号

输入符号

(

)

a

$

S

S-(L)

S-a

L

L-SL

L-SL

L

L-£

L-〉,SL

习题4.4.4计算练习4.2.2的文法的FIRST和FOLLOW集合3)STS(S)S|£

ST(L)|a,LTL,S|S解:

3)FIRST(S)={£,(}FOLLOW(S)={(,),$}

FIRST(S)={(,a}FOLLOW(S)={),,,$}

FIRST(L)={(,a}FOLLOW(L)={),,}

习题4.6.2为练习4.2.1中的增广文法构造SLR项集,计算这些项集的GOTO函数,给出这个文法的语法分析表。这个文法是SLR文法吗?

STSS+|SS*|a

解:①构造该文法的增广文法如下

S-S

S-SS+

S-SS*

S-a

②构造该文法的LR(0)项集如下

10

11

12

13

14

15

S-.S

S-s.

S-〉a.

s-ss.+

s-ss+.

s-ss*.

s-〉.ss+

s-〉s.s+

s-ss.*

s-〉.ss*

s-〉s.s*

s-s.s+

S-〉.a

s-〉.ss+

s-s.s*

s-.ss*

s-.ss+

S-〉.a

s-.ss*

S-〉.a

GOTO函数如下

GOTO(I0,S)=I1GOTO(I0,a)=I2

GOTO(I1,S)

文档评论(0)

A~下一站守候 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档