编译原理龙书第二版第56章.doc

编译原理龙书第二版第56章.doc

ID:58831464

大小:102.00 KB

页数:6页

时间:2020-09-24

编译原理龙书第二版第56章.doc_第1页
编译原理龙书第二版第56章.doc_第2页
编译原理龙书第二版第56章.doc_第3页
编译原理龙书第二版第56章.doc_第4页
编译原理龙书第二版第56章.doc_第5页
资源描述:

《编译原理龙书第二版第56章.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第五章练习5.1.1:对于图5-1中的SDD,给出下列表达式对应的注释语法分析树:1)(3+4)*(5+6)n练习5.2.4:这个文法生成了含“小数点”的二进制数:S->L.L

2、LL->LB

3、BB->0

4、1设计一个L属性的SDD来计算S.val,即输入串的十进制数值。比如,串101.101应该被翻译为十进制的5.625。提示:使用一个继承属性L.side来指明一个二进制位在小数点的哪一边。答:元文法消除左递归后可得到文法:S->L.L

5、LL->BL’L’->BL’

6、εB->0

7、1使用继承属性L.side指明一个二进制位数在小数点的哪一边,2表示左边,

8、1表示右边使用继承属性m记录B的幂次非终结符号L和L’具有继承属性inh、side、m和综合属性syn产生式语义规则1)S->LS.val=L.syn;L.side=2;L.m=1;L.inh=02)S->L1.L2L1.side=2;L2.side=1;L1.inh=0;L1.m=1;L2.m=1/2;L2.inh=0S.val=L1.syn+L2.syn;3)L->BL’L’.m=L.m*L.m;L’.side=L.sideL’.inh=L.inh*L.side+B*L.mL.syn=L’.syn4)L’->BL1’L1’.m=L’.m*L’.m

9、;L1’.side=L’.sideL1’.inh=L’.inh*L’.side+B*L1’.mL’.syn=L1’.syn5)L’->εL’.syn=L’.inh6)B->0B.val=07)B->1B.val=1练习5.3.1:下面是涉及运算符+和整数或浮点运算分量的表达式文法。区分浮点数的方法是看它有无小数点。E-〉E+T

10、TT-〉num.num

11、num1)给出一个SDD来确定每个项T和表达式E的类型2)扩展(1)中得到的SDD,使得它可以把表达式转换成为后缀表达式。使用一个单目运算符intToFloat把一个整数转换为相等的浮点数答:(1)产生

12、式语义规则1)E->E1+TIfE1.type==T.typethenE.type=E1.typeelseE.type=float2)E->TE.type=T.type3)T->numT.type=integer4)T->num.numT.type=float(2)产生式语义规则1)E->E1+TIfE1.type==T.typethenE.type=E1.typeElsebeginE.type=floatIf(E1.type==integerandT.type==float)thenE1=intToFloat(E1)Elseif(T.type==i

13、ntegerandE1.type==float)thenT=intToFloat(T)ENDE.val=E1.valT.val+2)E->TE.type=T.type;E.val=T.val3)T->numT.type=integer;T.val=num4)T->num.numT.type=float;T.val=num.num练习5.4.4:为下面的产生式写出一个和例5.10类似的L属性SDD。这里的每个产生式表示一个常见的C语言中的那样的控制流结构。你可能需要生成一个三地址语句来跳转到某个标号L,此时你可以生成语句gotoL1)S->if(C)S

14、1elseS22)S->doS1while(C)3)S->’{’L‘}’;L->LS

15、ε请注意,列表中的任何语句都可以包含一条从它的内部跳转到下一个语句的跳转指令,因此简单地为各个语句按序生成代码是不够的。答:产生式语义规则1)S->if(C)S1elseS2C.false=NewLable();C.true=NewLable()S1.next=S2.next=S.nextS.code=C.code

16、

17、Lable(C.true)

18、

19、S1.code

20、

21、gen(‘goto’S.next)

22、

23、Lable(C.false)

24、

25、S2.code2)S->doS1

26、while(C)Begin=NewLable()C.false=NewLable();C.true=NewLable()S1.next=beginS.code=Lable(begin)

27、

28、S1.code

29、

30、Lable(C.true)

31、

32、gen(‘goto’begin)3)S->’{’L‘}’;L->L1SL->εS.syn=L.syn;S.inh=L1.syn;L.syn=S.synL.inh=L.syn第六章练习6.1.1:为下面的表达式构造DAG((x+y)-((x+y)*(x-y)))+((x+y)*(x-y))答:DAG如下*+--+YX练习

33、6.2.1:将算术表达式a+-(b+c)翻译成1)抽象语法树2)四元式序列3)三元式序列4)间接三元式序列答

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。