资源描述:
《编译原理 第二版 (陈意云 著) 高等教育出版社 课后答案 5》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、课后答案网,用心为你服务!大学答案---中学答案---考研答案---考试答案最全最多的课后习题参考答案,尽在课后答案网(www.khdaw.com)!Khdaw团队一直秉承用心为大家服务的宗旨,以关注学生的学习生活为出发点,旨在为广大学生朋友的自主学习提供一个分享和交流的平台。爱校园(www.aixiaoyuan.com)课后答案网(www.khdaw.com)淘答案(www.taodaan.com)编译原理习题课编译原理习题课(5)(5)栾俊luanj@mail.ustc.edu.cn3/26/20107.17.1•把算术表达式–(a+b)*(c+d
2、)+(a+b-c)翻译成:(a)语法树(b)有向无环图(c)后缀表示(d)三地址代码2010-3-26luanj@mail.ustc.edu.cn27.1(7.1(续续))•(a)语法树•(b)有向无环图++-+-+*+c*++ab++abcdabcd2010-3-26luanj@mail.ustc.edu.cn37.1(7.1(续续))•(c)后缀表示ab+cd+*-ab+c++•(d)三地址代码t1:=a+bt2:=c+dt3:=t1*t2t4:=-t3t5:=t1+ct6:=t4+t52010-3-26luanj@mail.ustc.edu.cn
3、47.27.2•把C程序main(){inti;inta[10];while(i<=10)a[i]=0;}的可执行语句翻译成:(a)语法树(b)后缀表示(c)三地址代码2010-3-26luanj@mail.ustc.edu.cn57.2(7.2(续续))•(a)语法树while•(b)后缀表示<==i10<=aiarray0=whilei10array0ai2010-3-26luanj@mail.ustc.edu.cn67.2(7.2(续续))•(c)三地址代码1:ifi<=10goto32:goto53:a[i]:=0;4:goto15:retur
4、n02010-3-26luanj@mail.ustc.edu.cn77.47.4•修改图7.4中计算声明的类型和相对地址的翻译方案,允许名字表而不是单个名字出现在形式为D->id:T的声明中。P->{offset=0;}DSD->D;DD->id:T{enter(id.name,T.type,offset);offset+=T.width;}T->integer{T.type=integer;T.width=4;}T->real{T.type=real;T.width=8;}T->array[num]ofT{T.type=array(num.val,T
5、.type);11T.width=num.val*T.width;}1T->↑T{T.type=pointer(T.type);11T.width=4;}2010-3-26luanj@mail.ustc.edu.cn87.4(7.4(续续))•D->ID_LIST:TID_LIST->ID_LIST,ID_LIST
6、id•D->{Init(idtable)}ID_LIST:T{foreachnameinidtabledoenter(name,T.type,offset);offset:=offset+T.width;end;}ID_LIST->{Ini
7、t(idtable1);Init(idtable2)}ID_LIST,ID_LIST{merge(idtable1,idtable2,idtable)}12ID_LIST->id{add(idtable,id.name);}2010-3-26luanj@mail.ustc.edu.cn97.57.5•算符θ作用于表达式e,e,...,e的前缀形式12k是θpp...p,其中p是e的前缀形式。12kii(a)写出a*-(b+c)的前缀形式。(c)给出把表达式翻成前缀形式的语法制导定义。2010-3-26luanj@mail.ustc.edu.cn107.
8、5(7.5(续续))•(a)*a-+bc•(c)表达式翻成前缀形式的语法制导定义E->E+T
9、TT->T*F
10、FF->-F
11、(E)
12、idL->En{printf(E.string);}E->E1+T{E.string=“+”+E1.string+T.string;}E->T{E.string=T.string;}T->T1*F{T.string=“*”+T1.string+F.string;}T->F{T.string=F.string;}F->-F1{F.string=“-”+F1.string;}F->(E){F.string=E.string
13、;}F->id{F.string=id.value;}2010-3-26luanj@mail.