编译原理陈火旺第三版第六章课后题答案

下面的答案仅供参考!

1.按照表6.1所示的属性文法,构造表达式(4*7+1) *2的附注语法树。

答:

首先考虑最底最左边的内部结点,它对应于产生式F→digit,相应的语义规则为F. val: = digit.lexval,由于这个结点的子结点digit的属性digit . lexval的值为4,所以决定了结点F的属性F.val的值也为4。同样,在F.结点的父结点处,属性T.val的值也算得为4。
再考虑关于产生式T→T1*F的结点。这个结点的属性T.val的值由下面的语义规则确定:

当在这个结点应用语义规则时,根据规则T→T1*F得到左子结点,val的值为4,从右子结点得到F.val值为7。因此,在这个结点中算得T.val的值为28。再由E→T知E.val的值为28。

 再考虑关于产生式E→E1+T的结点。这个结点的属性T.val的值由下面的语义规则确定:

根据规则E→E+T得到左子结点,val的值为28,从右子结点得到T.val值为1。因此,在这个结点中算得E.val的值为29。再由F→(E)知F.val的值为29。再由T→F知T.val的值为29。

 再考虑关于产生式T→T1*F的结点。这个结点的属性T.val的值由下面的语义规则确定:

当在这个结点应用语义规则时,根据规则T→T1*F得到左子结点,val的值为29,从右子结点得到F.val值为2。因此,在这个结点中算得T.val的值为58。再由E→T知E.val的值为58。

最后,包含开始符号L的产生式L→En对应的语义规则打印出通过E得到的表达式的值。

2. 对表达式((a) + (b)):

① 按照表6.4所示的属性文法构造该表达式的抽象语法树;

表6.4是一个为包含运算符号+和-的表达式建立抽象语法树的S-属性文法。它利用文法的基本产生式来安排函数mknode和 mkleaf 的调用以建立语法树。E和T的综合属性nptr是函数调用返回的指针。

按表6.4所列的属性文法,表达式((a) +(b))带注释的语法分析树如图5.7所示。其中,构造出的抽象语法树用实线表示,语法分析树用虚线表示,语法分析树之中的E和T标识的结点中用综合属性nptr来保存指向抽象语法 树中该非终结符号对应的结点的指针(图中用带箭头的虚线表示)。

标识符和一个数的新的叶结点的指针。属性id.entry和 num.val是词法值,假设这些值是由词法分析器提供的。

② 按照图6.17所示的翻译模式,构造该表达式的抽象语法树。

按如图6.17所示的翻译模式,表达式((a)+(b))带注释的语法分析树如图5.8所示。为了使图清晰,省略了部分节点的nptr、s和i属性在图中的表示。

3.设+运算具有左结合性,试画出下列表达式的DAG图:

a+a+(a+a+a+a(a+a+a+a))

不知道是不是多打了一个a? 贴另外一个题的解法。

设+运算具有左结合性,试画出下列表达式的DAG图:

a+a+(a+a+a+(a+a+a+a))

1ida
2+11
3+21
4+31
5+34
6+25

4.设+、-、*、/运算都具有左结合性,试设计一个属性文法,删除算术表达式中冗余的括弧。例如,若已知表达式为((a* (b+c))* (d))应改写成a * (b+c)* d。

5.下列文法对整形常数和实型常数施用加法运算符+生成表达式;当两个整型数相加时,结果仍为整型数,否则 ,结果为实型数:

E →E+T|T

T → num.num |num

① 试给出确定每个子表达式结果类型的属性文法;

答:确定每个子表达式结果类型的属性文法是比较容易定义的。关键是如何扩充此属性文法,使之把表达式翻译成后缀形式。我们将不在name或num.num向T归约的时候输出该运算对象,而是把运算对象的输出放在T或E+T向E归约的时候。这是因为考虑输出类型转换算符inttoreal的动作可能在E+T向E归约的时候进行,如果这时两个运算对象都在前面name或num.num向T归约的时候已输出,需要为第1个运算对象输出类型转换算符时就已经为时太晚。
还要注意的是,在E+T向E归约时,该加法运算的第1个运算对象已经输出。所以E→E+T的语义规则不需要有输出E运算对象的动作。
(1)为文法符号E和T配以综合属性type,用来表示它们的类型。类型值分别用int和real来表示。确定每个子表达式结果类型的属性文法如下:

② 扩充(1)的属性文法,使之把表达式翻译成后缀形式 ,同时也能确定结果的类型。应该注意施用一元运算符inttoreal把整型数转换成实型数,以便使后缀形如加法运算符的两个操作数具有相同的类型。

下面属性文法将表达式的后缀表示打印输出,其中lexeme属性表示单词的拼写。

6.扩充表6.8属性文法,除跟踪方块的高度之外,还要跟踪方块的宽度。假定终结符号text具有综合属性w,给出字形的常规宽度。

答:

7.下列文法由开始符号S产生一个二进制数,令综合属性val给出该数的值:

S→L.L∣L
L→LB∣B
B→0∣1

试设计求S.val的属性文法,其中,已知B的综合属性c, 给出由B产生的二进位的结果值。例如,输入101.101时,S.val=5.625,其中第一个二进位的值是4,最后一个二进位的值是0.125。

8.分别修改习题5之(1)、(2)得到的属性文法,消除其中的左递归。
解题思路:

对文法:
E→E+TIT
T一num. num|num

消除左递归:
E→TE'
E'→+ TE'l e
T→num.num|num

9.由下列文法
S→E
E→E:=EIE+EI(E)l id
产生的表达式,其语义如C语言,包含赋值运算。就是说,b: = c是一个表达式,把c的值赋给b;该表达式的右值为e的右值。进而, a: =(b: = c)先把c的值赋给b,然后再赋给a。
(1)试建立一个属性文法,用非终结符E的继承属性side表示由E生成的表达式出现在赋值运算的左边还是右边,检查表达式的左部是一个左值。
(2)扩充(1)中的属性文法,产生某种形式的中间代码。

 

10.试设计一个翻译模式,检查同一个标识符在标识符表中是否重复出现。

11.设下列文法生成变量的类型说明:

L→ id L
L→, id L∣:T
T→ integer∣real

(1)构造一下翻译模式,把每个标识符的类型存入符号表;参考例6.2。

(2)由(1)得到的翻译模式,构造一个预测翻译器。

解题思路:
这是一个对说明语句进行语义分析的题目,不需要产生代码,但要求把每个标识符的类型填入符号表中。
对给定的适合于自顶向下翻译的翻译模式,书中给出了设计预测翻译器(或称递归下降翻译器)的方法。按照此方法,不难构造所求的预测翻译器。

 

  • 58
    点赞
  • 234
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 编译原理火旺第三版是一本经典的编译原理教材,对于计算机专业学生而言非常重要。课后答案对于学习者来说也是必不可少的,其中csdn网站收录了许多编译原理火旺第三版课后答案。这些答案内容丰富、详细,适合不同层次的学习者查看。下面是我对编译原理火旺第三版课后答案csdn的评价和总结。 首先,编译原理火旺第三版课后答案csdn的质量较高,涵盖了全书的各个章节乃至细节部分。学生们可以通过这些答案来核对自己的作业和学习成果,同时也可以借鉴其中的解思路和方法,以便更好地理解和掌握编译原理的知识。 其次,编译原理火旺第三版课后答案csdn的排版清晰、简洁,易于查看和理解。学生们可以通过该网站轻松找到自己需要的各类目的答案和解析,无需繁琐的查阅或搜索过程,更为方便快捷。 总的来说,编译原理火旺第三版课后答案csdn是一份非常有价值的学习资源,通过其的学习者可以更好地掌握编译原理的相关知识,并且能够有效地巩固和提升自己的学习效果。同时,我也鼓励学习者们可以自己主动解和思考,以便更好地探索和理解编译原理的奥秘。 ### 回答2: 《编译原理》是计算机科学中非常重要的一门课程,而火旺第三版课后答案自然也成为该书学习过程中不可或缺的指南。在CSDN(中国最大的技术社区)上,有很多用户都分享了自己整理的该书答案,其中包括理论课和实验课的答案。 对于理论课的答案,主要涵盖了编译原理的各个章节内容,包括语法分析、语义分析、代码生成等。这些答案的整理和分享,有助于学生更好地理解课程,解决枯燥难懂的理论问,也能够帮助老师提供更加完善的教学资源。 实验课的答案则主要涉及编译器的实现和优化,包括词法分析器、语法分析器、中间代码生成等。这些答案能够给学生提供实时的指导和帮助,帮助他们完成实验任务,同时也能让老师更好地评估学生实验的绩效。 总之,火旺第三版课后答案在学习编译原理过程中起到了至关重要的作用,它们可以帮助学生更好地学习和掌握课程内容,并且提供尽可能完善的教学资源。在CSDN上,可以找到许多优质的课后答案,它们有助于我们更好地掌握编译原理这门重要课程。 ### 回答3: 编译原理火旺第三版是一本经典的编译原理教材,它包含了编译原理的基本概念、前端、中端、后端等方面的内容。其课后答案可以在csdn等网站上得到。 这本书的课后答案是学习该书内容的一个重要补充,它可以帮助学生巩固和加深对该书内容的理解,并且可以帮助学生查漏补缺,提高学习效率。 在csdn等网站上寻找编译原理火旺第三版课后答案时,我们可以根据自己的需要选择相应的章节进行查找。这些答案通常是由编译原理领域的专家编写的,具有一定的权威性和可靠性。 除了csdn等网站,我们还可以在一些在线教育平台上找到编译原理火旺第三版课后答案,这些平台通常会提供相应的视频教程和讲义,让学生更好地理解和掌握该书的内容。 总之,编译原理火旺第三版课后答案是一个重要的学习资源,可以帮助我们更好地学习和掌握编译原理的知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钻仰弥坚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值