ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:80.18KB ,
资源ID:23348844      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23348844.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(xt05答案.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

xt05答案.docx

1、xt05答案练习5.1 解答:输入(4*7+1)*2n,带注释的分析树如下:练习5.2 解答:(a)根据表5.3中的语法制导定义建立表达式(a)+(b)的分析树和语法树 (b)根据图5.17的翻译模式构造(a)+(b)的分析树和语法树练习5.3 解答:设置下面的函数和属性:expr1|expr2:把表达式expr2拼写在表达式expr1后面。deletp(expr):去掉表达式expr左端的(和右端的)。E.expr,T.expr,F.expr:属性变量,分别表示E,T,F的表达式。E.add,T.add,F.add,属性变量,若为true,则表示其表达式中外层有号,否则无号。E.pmark,

2、T.pmark,F.pmark,属性变量,若为true,表示E,T,F的表达式中左端为(,右端是)。语法制导定义如下:产生式语义规则E - E1 +T if(T.pmark=true) THEN E.expr=E1.expr|+|deletep(T.expr) ELSE E.expr:=E1.expr|+|T.expr;E.add:=true;E.pmark:=false;E - T if(T.pmark=true) THEN E.expr:=deletep(T.expr) ELSE E.expr:=T.expr;E.add:=T.add;E.pmark:=false; T - T1*F T.

3、expr:=T1.expr|*|F.expr; T.add:=false;T.pmark:=false;T - F T.expr:=F.expr; T.add:=F.add;T.pmark:=F.pmark; F - (E) if(E.add=false) THEN BEGIN F.expr:=E.expr; F.add:=false; F.pmark:=false; END ELSE BEGIN F.expr:=(|E.expr|); F.add:=true; F.pmark:=true; END; F - id F.expr:=id.lexval; F.add:=false;F.pmark

4、:=false; 练习5.4 解答: (a)语法制导定义如下:产生式语义规则E - E1+T if(E1.type=int) AND (T.type=int) THEN E.type:=int ELSE E.type:=real; E - T E.type:=T.type; T - num T.type:=int; T - num.num T.type:=real; (b)语法制导定义如下:产生式语义规则E - E1+T if(E1.type=int) AND (T.type=int) THEN E.type:=int ELSE BEGIN E.type:=real; if(E1.type=i

5、nt) AND (T.type=real) THEN E1.pf:=inttoreal|E1.pf ELSE if(E1.type=real)AND(T.type=int) THEN T.pf:=inttoreal|T.pf END; E.pf:=+|E1.pf|T.pf; E - T E.type:=T.type; E.pf:=T.pf; T - num T.type:=int; T.pf:=int.lexval; T - num.num T.type:=real; T.pf:=real.lexval; 练习5.5解答: (a)用综合属性决定s.val的语法制导定义:产生式语义规则 S -

6、L S.val:=L.val; S - L1.L2 S.val:=L1.val+L2.val*L2.p; L - B L.val:=B.val; L.p:=2-1; L - L1B L.val:=L1.val*2+B.val; L.p:=L.p*2-1; B - 0 B.val:=0; B - 1 B.val:=1; 注:L.p表示恢复L.val的因子。 (b)分析:设B.c是B的综合属性,是B产生的位对最终值的贡献。要求出B.c,必须求出B产生位的 权,设B.i。B.i的求法请参看下面的图示: 另外,设L.fi为继承因子,L.fs为综合因子,语法制导定义如下:产生式语义规则 S - L L.

7、i:=1; L.fi:=2; L.fs:=1; S.val:=L.val; S - L1.L2 L1.i=1; L1.fi=2; L1.fs:=1; L2.i=2-1; L2.fi=1; L2.fs:=2-1;S.val:=L1.val+L2.val; L - B L.s:=L.i; B.i:=L.s; L.val:=B.c; L - L1B L1.i:=L.i*L1.fi; L.s:=L1.s*L1.fs;B.i:=L.s;L.val:=L1.val+B.c; B - 0 B.c:=0; B - 1 B.c:=B.i; 若把文法改写成如下形式,则语法制导定义会更清楚: S - L.R | L

8、 L - LB | B R - Rb | B B - 0 | 1产生式语义规则 S - L L.i:=1; S.val:=L.val; S - L.R L.i=1; R.i=2-1; S.val:=L.val+R.val; L - L1B B.i:=L.i; L1.i:=L.i*2; L.val:=L1.val+B.c; L - B B.i:=L.i; L.val:=B.c; R - R1B R1.i:=R.i; R.s:=R1.s*2-1; B.i:=R.s; R - B R.s:=R.i; B.i:=R.s; R.val:=B.c; B - 0 B.c:=0; B - 1 B.c:=B.i

9、; 练习5.6 解答:产生式语义规则 D - D1,id D.type:=D1.type; addtype(id.entry,D1.type); D - T id D.type:=T.type; addtype(id.entry,T.type); T - int T.type:=int; T - real T.type:=real; 练习5.7 解答: (a)产生式语义规则 E - TR R.i:=T.type; E.type:=R.s; R - +TR1 if(R.i=int) AND (T.type=int) THEN R1.i:=int ELSE R1.i:=real;R.s:=R1.s

10、; R - R.s:=R.i; T - num.num T.type:=real; T - num T.type:=int; (b)产生式语义规则 E - TR R.itype:=T.type; R.ipf:=T.pf; E.pf:=R.spf; E.type:=R.stype; R - +TR1 if(R.itype=int) AND (T.type=int) THEN R1.itype:=int ELSE BEGIN R1.itype:=real; if(R.itype=real) AND (T.type=int) THEN T.pf:=inttoreal|T.pf ELSE if(R.i

11、type=int)AND(T.type=real) THEN R.ipf:=inttoreal|R.if END;R1.ipf:=+|R.ipf|T.pf;R.stype:=R1.stype; R.spf:=R1.spf; R - R.stype:=R.itype; R.spf:=R.ipf; T - num T.type:=int; T.pf:=int.lexval; T - num.num T.type:=real; T.pf:=real.lexval; 注: R.ipf是R的继承属性,是它的前缀表示。 R.spf是R的综合属性,是它的前缀表示。练习5.8 解答:设计两个函数lookup(

12、name)和enter(name,type),lookup(name)查找符号表,若查到,则返回name在符号表中的地址;否则返回NULL。enter(name,type)在符号表中建立name的符号表项,并填写上name的类型type。翻译模式如下: D - T L.in:=T.type L L - L1.in:=L.in L1,id if(lookup(id.name) then error else enter(id.name,L.in) L - id if(lookup(id.name) then error else enter(id.name,L.in) T - int T.typ

13、e:=int T - real T.type:=real练习5.9 解答:(a) 翻译模式如下: D - id L addtype(id.entry,L.type) L - , id L1 L.type:=L1.type; addtype(id.entry,L.type) L - : T L.type:=T.type T - integer T.type:=integer T - real T.type:=real(b) 预测翻译程序由如下过程组成: PROCEDURE D; VAR L.type:(integer,real); id.entry:id-entry; BEGIN id.entr

14、y:=id.lexval; match(id); L.type:=L; addtype(id.entry,L.type) END; FUNCTION L:(integer,real); VAR L.type,L1.type:(integer,real); id.entry:id-entry; BEGIN if(lookahead=,) THEN BEGIN match(,); match(id); id.entry:=id.lexval; L1.type:=L; L.type:=L1.type; addtype(id.entry,L.type); END ELSE BEGIN match(:)

15、; L.type:=T; END; return(L.type); END; FUNCTION T:(integer,real); VAR T.type:(integer,real); BEGIN if(lookahead=integer) THEN BEGIN match(integer); T.type:=id.lexval END ELSE if(lookahead=real) THEN BEGIN match(real); T.type:=id.lexval; END; ELSE ERROR; return (T.type); END; 练习5.10 解答:(a) 对于F1 sub F

16、2 sub F3,其最左推导和分析树如下: S = L = B = B sub F3 = B sub F2 sub F3 = F1 sub F2 Sub F3 显然,F3.ps:=shrink(F2.ps); F2.ps:=shrink(F1.ps); 为此,为B设一个综合属性B.pt,其值等于其下标F的继承属性F.ps。语法制导定义如下:产生式语义规则 S - L L.ps:=10; S.ht:=L.ht; L - B B.ps:=L.ps; L.ht:=B.ht; L - L1B L1.ps:=L.ps; B.ps:=L.ps; L.ht:=max(L1.ht,B.ht); B - B1

17、sub F B1.ps:=B.ps; F.ps:=shrink(B1.pt); B.ht:=disp(B1.ht,F.ht);B.pt:=F.ps; B - F F.ps:=B.ps; B.ht:=F.ht; B.pt:=B.ps; F - L L.ps:=F.ps; F.ht:=L.ht; F - text F.ht:=text.h*F.ps (b) 翻译模式如下: S - L.ps:=10 L S.ht:=L.ht L - B.ps:=L.ps B L.ht:=B.ht L - L1.ps:=L.ps L1 B.ps:=L.ps B L.ht:=max(L1.ht,B.ht) B - B1

18、.ps:=B.ps B1 sub F.ps:=shrink(B1.pt) F B.ht:=disp(B1.ht,F.ht); B.pt:=F.ps B - F.ps:=B.ps F B.ht:=F.ht; B.pt:=B.ps F - L.ps:=F.ps LF.ht:=L.ht F - text F.ht:=text.h*F.ps 练习5.11 解答:(a) 假设基础文法含左递归的翻译模式如下: A - A1.i:=A.i A1 Y.i:=A.i Y A.a:=g(A1.a,Y.y) A - X.i:=A.i X A.a:=f(X.x) 消除基础文法左递归后的翻译模式如下: A - X.i:

19、=A.i X R.i:=f(X.x); R.yi:=A.i R A.a:=R.s R - Y.i:=R.yi Y R1.i:=g(R.i,Y.y); R1.yi:=R.yi R1 R.s:=R1.s R - R.s:=R.i 属性R.yi用于传递A.i给Y。(b) 设基础文法含左递归的翻译模式如下: A A1.i:=h1(A.i) A1 y.i:=h2(A.i) Y A.a:=g(A1.a,Y.y) A - X.i:=h3(A.i) X A.a:=f(X.x) 考虑XY1Y2Y1,其继承属性的计算如下: 消除基础文法中的左递归后,基础文法为: A - XR R - YR | 继承属性的计算如下

20、图所示:当识别出X后,并不能计算出X的继承属性,因而,也就无法计算有关X的其他属性。只好把X的源表示或中间表示作为继承传给R,继续沿R传下去,然后再作为综合属性传回来。直到能计算出X.i,再对X的成分进行翻译。Y1,Y2,Y3的翻译思想和X类似,具体的翻译模式省略。练习5.12 解答: S - L.ps:=10; L.iht:=0 L S.ht:=L.ht L - B.ps:=L.ps B L.ht:=max(L.iht,B.ht) L - B.ps:=L.ps B L1.iht:=max(L.iht,B.ht); L1.ps:=L.ps L1 L.ht:=L1.ht B - F.ps:=B.ps F sub B1.ps:=shrink(B.ps) B1 B.ht:=disp(F.ht,B1.ht)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1