第五章-语法制导翻译及中间代码生成-课后答案

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

    课后答案网,用心为你服务!  大学答案---中学答案---考研答案---考试答案 最全最多的课后习题参考答案,尽在课后答案网()!Khdaw团队一直秉承用心为大家服务的宗旨,以关注学生的学习生活为出发点,旨在为广大学生朋友的自主学习提供一个分享和交流的平台。 爱校园()课后答案网()淘答案() 第五章语法制导翻译及中间代码生成5.1说明属性文法与属性翻译文法有何异同?5.2考虑下面的属性文法:Z→sXattribution:Z.a=X.c;X.b=X.a;Z.p=X.b;Z→tXattribution:X.b=X.d;Z.a=X.b;X→uattribution:X.d=1;X.c=X.d;X→Vattribuion:X.c=2;X.d=X.c;(1)上述文法中的属性哪些是继承的?哪些是综合的?(2)上述文法中的属性依赖是否出现了循环?5.3为什么说S属性文法一定是L属性文法?反之结论亦正确吗?5.4将下列中缀式改写为逆波兰式。(1)-A*(B+C)↑(D-E)(2)((a*d+c)/d+e)*f+g(3)a+x≤4∨(C∧d*3)(4)a∨b∧c+d*e↑f(5)s=0;i=1;while(i<=100){s+=i*i;i++;}5.5将下列后缀式改写为中缀式。(1)abc*+(2)abc-*cd+e/-(3)abc+≤a0>∧ab+0≠a0∧∨(4)ab<p1BZxab-c↑=p2BRgh=↑↑p1p25.6设已给文法G[E]:E→E+T|-T|TT→T*F|FF→P↑F|PP→(E)|i试设计一个递归下降分析器,要求此分析器在语法分析过程中,将所分析的符号串翻译成后缀式。5.7设已给布尔表达式文法G[Z]:Z→EE→T{∨T}T→F{∧F}F→ F|(E)|b试设计一个递归下降分析器,它把由G[Z]所描述的布尔表达式翻译为四元式序列。5.8(1)利用5 4节所给的属性翻译文法将赋值语句:X=A*(B+C)+D翻译成四元式序列,给出语法制导的翻译过程。(2)利用5 5节所给的属性翻译文法将布尔表达式:A∧(B∨(C∨D∧ F))翻译成四元式序列,给出语法制导的翻译过程。(3)利用5 6节所给的属性翻译文法将语句:whileA<C∧B>0doifA=1thenC∶=C+1elsewhileA<=DdoA∶=A+2翻译成四元式序列,给出语法制导的翻译过程。5.9写出翻译下列语句的属性翻译文法。(1)foriden∶=E1stepE2untilE3doS其中,E1,E2,E3分别为初值参数、步长参数和终值参数,E2的值可负,且要求E2,E3仅被计算一次。(2)repeatSuntilE5.10根据5 7节所给属性翻译文法对赋值语句:A[I,J]∶=B[J-1,A[I-J,I+J],I+1]给出产生四元式序列的过程(假定数组各维下标的下界均为1;A的下标上界分别为10和20;B的下标上界分别为10,20和30)。5.11设有下面的FORTRAN程序:N=2M=3CALLSUB(N+M,N,N)WRITE(U,10)N10FORMAT(I2)STOPENDSUBROUTINESUB(I,J,K)J=J+2K=K+IRETURNEND若在编译上述程序时,过程调用的形实结合分别采用值调用、引用调用,程序执行后所输出的N值各是什么?5.12对下面的PASCAL程序:programex512;vari:integer;b:array[1··4]ofinteger;procedureq(x:integer;vary:integer);begini∶=1;x∶=x+2;b[i]=15;y∶=y+3;b[i]=20end;beginfori∶=1to4dob[i]∶=i;i∶=1;q(b[i],b[i+1]);fori∶=1to4dowrite(b[i])end.试指出,当执行上述程序时,过程调用的形实结合分别采用值调用、引用调用、结果调用和值结果调用时,程序执行后的输出结果。5.13在PASCAL语言中,标准的标量类型可用形如:VAR〈变量名〉{,〈变量名〉}:〈类型〉的语法结构说明,其中,〈类型〉是integer,real,boolean或char等类型说明符之一。试写出上述类型说明的S属性翻译文法。5.14试用PASCAL语言写出一个实参为形参过程的程序实例。5.15若一语言的数组下标的下界只能是0(如C语言),则数组内情向量应有哪些内容?试给出相应的属性翻译文法。5.16在FORTRAN语言中,数组是按列存放的,且各维的下界为1,试利用上题的结果,给出相应的属性翻译文法。5.17C语言的条件语句的结构为:Stmt→if(Expr)Stmt;[elseStmt;]试给出相应的属性翻译文法。上机实习题对第4章上机实习题(一)所给的微PASCAL语言文法,完成下列工作:(1)试编写用YACC对该文法所定义的语言进行语法制导翻译,生成相应的四元式序列的YSP文件;(2)使用YACC将该YSP文件翻译为C语言程序,再利用C编译器将其编译为EXE文件;(3)自行编写若干个微PASCAL源程序作为测试用例,对所生成的编译器进行测试。要求:(1)自行完成对文法的“拆分”和语义动作的编写。(2)自行完成相应的词法分析程序的设计。(3)该翻译程序应能完成查填变量表工作。(4)程序运行结束前,应将四元式序列和变量表输出到某个指定文件中。第五章习题解答5.1解:属性文法是文法符号带有语义属性的前后文无关文法;属性翻译文法首先是对文法的属性依赖关系作出限制,不允许出现属性的直接或间接的循环定义,即要求属性文法是良定义的;其次还应将属性定义规则改造为计算属性值的语义程序,即将静态的定义规则改写为可动态执行的语义动作;属性文法是静态描述,而属性翻译文法是动态描述,有语义动作。5.2解:综合属性有:Z.aZ.pX.dX.c继承属性有:X.b属性依赖出现了循环;5.3解:S属性文法一定是L属性文法,因为前者是在后者基础上加上限制条件,即非终结符只有综合属性;反之当然不正确。5.4解:A-BC+*DE-^ad*c+d/e+f*g+ax+4=cd3*/\\/de*c+b/\a\/f^s0=;i1=;i100=BZssii*+=;ii1+=;BRS2’5.5解:a+b*ca*(b-c)-(c+d)/e有误if(ab)x=(a-b)^c;elseg=h;5.6略5.7略5.8解:(+,B,C,T1)(*,A,T1,T2)(+,T2,D,T3)(=,T3,0,X)2)如下所示:当前句型(方框括起来部分为句柄)A/\(BV(CVD/\?F))用产生式Expr→iden归约,得(1)Expr.TC→(jnz,A,0,0);(2)Expr.FC→(j,0,0,0);当前句型Expr/\(BV(CVD/\?F))用产生式Expr^→Expr’/\’归约,得(1)(jnz,A,0,3);(2)Expr^.FC→(j,0,0,0);当前句型Expr^(BV(CVD/\?F))用产生式Expr→iden归约,得(1)(jnz,A,0,0);(2)Expr^.FC→(j,0,0,0);(3)Expr.TC→(jnz,B,0,0);(4)Expr.FC→(j,0,0,0);当前句型Expr^(ExprV(CVD/\?F))用产生式Exprv→Expr'V'归约,得(1)(jnz,A,0,3);(2)Expr^.FC→(j,0,0,0);(3)Exprv.TC→(jnz,A,0,0);(4)(j,0,0,5);当前句型Expr^(Exprv(CVD/\?F))用产生式Expr→iden归约,得(1)(jnz,A,0,3);(2)Expr^.FC→(j,0,0,0);(3)Exprv.TC→(jnz,A,0,0);(4)(j,0,0,5);(5)Expr.TC→(jnz,C,0,0);(6)Expr.FC→(j,0,0,0);当前句型Expr^(Exprv(ExprVD/\?F)),用产生式Exprv→Expr’V’归约,得(1)(jnz,A,0,3);(2)Expr^.FC→(j,0,0,0);(3)Exprv.TC→(jnz,A,0,0);(4)(j,0,0,5);(5)Exprv.TC→(jnz,C,0,0);(6)(j,0,0,7);当前句型Expr^(Exprv(ExprvD/\?F)),用产生式Expr4→iden归约,得(1)(jnz,A,0,3);(2)Expr^.FC→(j,0,0,0);(3)Exprv.TC→(jnz,A,0,0);(4)(j,0,0,5);(5)Exprv.TC→(jnz,C,0,0);(6)(j,0,0,7);(7)Expr.TC→(jnz,D,0,0);(8)Expr.FC→(j,0,0,0);当前句型Expr^(Exprv(ExprvExpr/\?F)),用产生式Expr^→exrp’/\’归约,得(1)(jnz,A,0,3);(2)Expr^.FC→(j,0,0,0);(3)Exprv.TC→(jnz,A,0,0);(4)(j,0,0,5);(5)Exprv.TC→(jnz,C,0,0);(6)(j,0,0,7);(7)(jnz,D,0,9);(8)Expr^.FC→(j,0,0,0);当前句型Expr^(Exprv(ExprvExpr^?F)),用产生式Expr→iden归约,得(1)(jnz,A,0,3);(2)Expr^.FC→(j,0,0,0);(3)Exprv.TC→(jnz,A,0,0);(4)(j,0,0,5);(5)Exprv.TC→(jnz,C,0,0);(6)(j,0,0,7);(7)(jnz,D,0,9);(8)Expr^.FC→(j,0,0,0);(9)Expr.TC→(jnz,F,0,0);(10)Expr.FC→(j,0,0,0);当前句型Expr^(Exprv(ExprvExpr^?Expr)),用产生式Expr→?Expr归约,得(1)(jnz,A,0,3);(2)Expr^.FC→(j,0,0,0);(3)Exprv.TC→(jnz,A,0,0);(4)(j,0,0,5);(5)Exprv.TC→(jnz,C,0,0);(6)(j,0,0,7);(7)(jnz,D,0,9);(8)Expr^.FC→(j,0,0,0);(9)Expr.FC→(jnz,F,0,0);(10)Expr.TC→(j,0,0,0);当前句型Expr^(Exprv(ExprvExpr^Expr)),用产生式Expr→Expr^Expr归约,得(1)(jnz,A,0,3);(2)Expr^.FC→(j,0,0,0);(3)Exprv.TC→(jnz,A,0,0);(4)(j,0,0,5);(5)Exprv.TC→(jnz,C,0,0);(6)(j,0,0,7);(7)(jnz,D,0,9);(8)(j,0,0,0);(9)Expr.FC→(jnz,F,0,8);(10)Expr.TC→(j,0,0,0);当前句型Expr^(Exprv(ExprvExpr)),用产生式Expr→ExprvExpr归约,得(1)(jnz,A,0,3);(2)Expr^.FC→(j,0,0,0);(3)Exprv.TC→(jnz,A,0,0);(4)(j,0,0,5);(5)(jnz,C,0,0);(6)(j,0,0,7);(7)(jnz,D,0,9);(8)(j,0,0,0);(9)Expr.FC→(jnz,F,0,8);(10)Expr.TC→(j,0,0,5);当前句型Expr^(Exprv(Expr)),用产生式Expr→(Expr)归约,所得四元式序列不变当前句型Expr^(ExprvExpr),用产生式Expr→ExprvExpr归约,得(1)(jnz,A,

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功