编译原理 龙书 第二版 第5、6章

上传人:s****a 文档编号:167963724 上传时间:2022-11-06 格式:DOCX 页数:6 大小:109.65KB
收藏 版权申诉 举报 下载
编译原理 龙书 第二版 第5、6章_第1页
第1页 / 共6页
编译原理 龙书 第二版 第5、6章_第2页
第2页 / 共6页
编译原理 龙书 第二版 第5、6章_第3页
第3页 / 共6页
资源描述:

《编译原理 龙书 第二版 第5、6章》由会员分享,可在线阅读,更多相关《编译原理 龙书 第二版 第5、6章(6页珍藏版)》请在装配图网上搜索。

1、第五章练习5.1. 1:对于图5-1中的SDD,给出下列表达式对应的注释语法分析树:练习5. 2. 4:这个文法生成了含“小数点”的二进制数:s-l.l|l l-lb|b b-o|i设计一个L属性的SDD来计算S.val,即输入串的十进制数值。比如,串101.101应该被翻 译为十进制的5.625。提示:使用一个继承属性L. side来指明一个二进制位在小数点的哪 一边。答:元文法消除左递归后可得到文法:S-L. L|L L-BL L -BL I E B-0 1使用继承属性L. side指明一个二进制位数在小数点的哪一边,2表示左边,1表示右边 使用继承属性m记录B的幕次非终结符号L和L具有继

2、承属性inh、side、m和综合属性syn产生式语义规则1)S-LS.val=L.syn;L.side=2;Lm=l;L.inh=02)S-L1 丄 2Ll.side=2;L2.side=l; Ll.inh=O;Ll.m=l;L2.m=V2;L2.inh=0S.val=Ll.s yn+L2.sy n;3)L-BLZL,.m=L.m*L.m;L,.side=LsideL/.inh=Linh*Lside+B*L.mL.syn=L:syn4)L,-BL1/Ll,.m=L,.m*L,.m;Ll/.side=L,.sideLl/.inh=rinh*Lside+B*Ll/.mL.syn 二 LT.sy n

3、5)L- L.syn 二 Lii nh6)B-0B.val=07)B-1B.val=l练习5.3.1:下面是涉及运算符+和整数或浮点运算分量的表达式文法。区分浮点数的方法 是看它有无小数点。E-E+T | TT-nuim num I num1)给出一个SDD来确定每个项T和表达式E的类型2)扩展(1)中得到的SDD,使得它可以把表达式转换成为后缀表达式。使用一个单目运算 符intToFloat把一个整数转换为相等的浮点数答:产生式语义规则1)E-E1+TIf El.type =T.typethe n E.type=El.typeelse E.type=float2)E-TE.type=T.ty

4、pe3)TnumT.type=i nteger4)Tnum. numT.type=float产生式语义规则1)E-E1+TIf El.type =T.typethe n E.type=El.typeElse beginE.type=floatlf(El.type=integer and T.type=float) then El=intToFloat (El)Else if(T.type二二integer and El.type=float) then T=intToFloat (T) ENDE.val = El.val T.val +2)E-TE.type=T.type; E.val=T.v

5、al3)TnumT.type=integer; T.val二num4)Tnum. numT.type=float ; T.val=num.num练习5. 4. 4:为下面的产生式写出一个和例5.10类似的L属性SDDo这里的每个产生式表示一个常见的C语言中的那样的控制流结构。你可能需要生成一个三地址语句来跳转到某 个标号L,此时你可以生成语句got。L1) s-if (C) SI else S22) S-do SI while (03) S- V L , ; L - LS| e请注意,列表中的任何语句都可以包含一条从它的内部跳转到下一个语句的跳转指令,因 此简单地为各个语句按序生成代码是不够的

6、。答:产生式语义规则1) Sif (C) SI else S2C.false=NewLable();C.true=NewLable()Sl.next=S2. next=S.nextS.code=C.code11 Lable(C.true) 11 SI.code11 gen(zgotoz S.next)11 Lable(C.false)| | S2.code2) S-do SI while (C)Begin=NewLable()C.false=NewLable(); C.true=NewLable()Sl.next=beginS.code=Lable(begin)| | SI.code11 La

7、ble(C.true)11 genfgo tobegin)3)S- L 了;S.syn=L.s yn;L - LISS.inh=Ll.syn; L.syn二S.synL- eL.in h=L.s yn第六章练习6. 1. 1:为下面的表达式构造DAG(x+y) - (x+y) * (x-y) + (x+y) * (x-y)1)抽象语法树2)四元式序列3)三元式序列4)间接三元式序列答:(1)抽象语法树*C*L.array=b E.addr= j L.type=array(3,i nteger)a.type =array(2zarray( 3Jnteger)E.addr=iE.addr= ib.

8、type =array(2,array( 3Jnteger)练习6. 6. 4:使用图6. 6. 5节中介绍的避免goto语句的翻译方案,来翻译下列表达式: If (a=b & c=d | | e=f) x=l;答:If e=f goto L2 讦 F alse a=b goto LI 讦 F alse c=d goto LI L2:x=lLI:练习6. 7.1:使用图6-43中的翻译方案翻译下列表达式。给出每个子表达式的truelist和falselisto你可以假设第一条被生成的指令地址是100. a=b & (c=d | | e=f)答:各产生式进行归约时产生的语义动作的相应指令如卞1)

9、按B-E1 rel E2将a=b归约为B时语义动作相应的指令如下100: if a=b goto 一101: goto 一2)产生式B-B1 & M B2中的标记非终结符号M记录了 nextinstr的值,该值为1023)按B-E1 rel E2将c=d归约为B时语义动作相应的指令如下102: if c=d goto-103: goto 一4)产生式B-B1 | MB2中的标记非终结符号M记录了 nextinstr的值,该值为1045)按B-E1 rel E2将e=f归约为B时语义动作相应的指令如下104:讦 e=f goto 一105: goto 一6)按照产生式B-B1 | MB2进行归约刀按照产生式B- (Bl)进行归约8)按照产生式B-B1&MB2进行归约9)各子表达式的truelist和falselist在上图中己标出

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!