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

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 习题 4.2.1 : 考虑上下文无关文法: S-S S +|S S *|a 以及串 aa + a* (1) 给出这个串的一个最左推导 S - S S * - S S + S * - a S + S * - a a + S * - aa + a* (3) 给出这个串的一棵语法分析树 习题 4.3.1 : 下面是一个只包含符号 a 和 b 的正则表达式的文法。它使用 +替代表示并运算的符号 | ,以避免和文法中作为元符号使用的竖线相混淆: rexpr rexpr + rterm | rterm rterm rterm rfactor | rfactor rfactor rfactor * | rprimary rprimary a | b 对这个文法提取公因子 提取公因子的变换使这个文法适用于自顶向下的语法分析技术吗? 提取公因子之后,原文法中消除左递归 得到的文法适用于自顶向下的语法分析吗? 解 提取左公因子之后的文法变为rexpr rexpr + rterm | rterm rterm rterm rfactor | rfactor rfactor rfactor * | rprimary rprimary a | b 不可以,文法中存在左递归,而自顶向下技术不适合左递归文法 消除左递归后的文法 rexpr - rterm rexpr ’ rexpr -’ + rterm rexpr ’| rterm- rfactor rterm ’ rterm -’ rfactor rterm ’| rfactor- rprimay rfactor ’ rfactor -’*rfactor ’| rprimary- a | b 该文法无左递归,适合于自顶向下的语法分析 习题 4.4.1 :为下面的每一个文法设计一个预测分析器,并给出预测分析表。可能要先对文法进行提取左公因子或消除左递归 (3)S-S(S)S| (5)S-(L)|a L-L,S|S 解 (3) ①消除该文法的左递归后得到文法 S-S ’ S ’ -(S)SS ’ | 用类 Pascal语言构造的一个预测分析器: ②计算 FIRST 和 FOLLOW集合 PROCEDURE S FIRST(S)={(, } FOLLOW(S)={),$} BEGIN FIRST(S ’ )={(, } FOLLOW(S’ )={),$} S; ③构建预测分析表 WHILE (lo okahead==’ () 非终结符号 输入符号 THEN BEGIN ( match ((); ) $ (5) S S-S’ S-S’ S-S’ S; ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ match ()); END; ①消除该文法的左递E归L得SE到I文F (法lookahead==a) S-(L)|a L-SL ’ L ’ -,SL ’E|ND; THEN match(a) ELSE error 用类 Pascal语言的一个预测分析器: ②计算 FIRST 和 FOLLOW集合 PROCEDURE S FIRST(S)={(,aB}EGFIONLLOW(S)={ ), , ,$} if (lookahead== ’ () FIRST(L)={(,a} FOLLOW(L)={ ) } THEN BEGIN FIRST(L ’ )={ , , } FOLmLOatWch(L((’);)={ ) } L; ③构建预测分析表 match ()); 非终结符号 输入E符ND号; EL( SE IF (looka)head==a)  , a $ S S-(L) THEN match(a) S-a L L-SL ’ELSE error L-SL ’ L’ END; L’ - L’ -,SL ’ 习题 4.4.4PRO计C算E练DU习RE4L.2; .2 的文法的 FIRST 和 FOLLOW集合 3)S S(S)S| BEGIN S; WHILE (lookahead == , ); BEGIN match ( , ); S; 5)S (L)|a,L L,S|S 解: 3)FIRST(S)={ ,( } FOLLOW(S)={ (,),$ } 5)FIRST(S)={ (,a } FOLLOW(S)={ ), , ,$ } FIRST(L)={ (,a } FOLLOW(L)={ ), , } 习题 4.6.2 为练习 4.2.1 中的增广文法构造 SLR项集,计算这些项集的 GOTO函数, 给出这个文法的语法分析表。这个文法是 SLR文法吗? S SS+|SS*|a 解: ①构造该文法的增广文法如下 S’ -S S-SS+ S-SS* S-a ②构造该文法的 LR(0)

文档评论(0)

文档查询,农业合作 + 关注
官方认证
内容提供者

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

认证主体土默特左旗农特农机经销部
IP属地内蒙古
统一社会信用代码/组织机构代码
92150121MA0R6LAH4P

1亿VIP精品文档

相关文档