网站大量收购独家精品文档,联系QQ:2885784924

5编译原理-陈意云--课后答案5.pptVIP

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
5编译原理-陈意云--课后答案5

luanj@mail.ustc.edu.cn 编译原理习题课(5) 栾 俊 luanj@mail.ustc.edu.cn * 7.1 把算术表达式 –(a+b)*(c+d)+(a+b-c) 翻译成: (a) 语法树 (b) 有向无环图 (c) 后缀表示 (d) 三地址代码 7.1 (续) (a) 语法树 (b) 有向无环图 7.1 (续) (c) 后缀表示 ab+cd+*-ab+c++ (d) 三地址代码 t1 := a + b t2 := c + d t3 := t1 * t2 t4 := -t3 t5 := t1 + c t6 := t4 + t5 7.2 把C程序 main(){ int i; int a[10]; while(i = 10) a[i] = 0; } 的可执行语句翻译成: (a) 语法树 (b) 后缀表示 (c) 三地址代码 7.2 (续) (a) 语法树 (b) 后缀表示 i 10 = a i array 0 = while 7.2 (续) (c) 三地址代码 1: if i = 10 goto 3 2: goto 5 3: a[i] := 0; 4: goto 1 5: return 0 7.4 修改图7.4中计算声明的类型和相对地址的翻译方案,允许名字表而不是单个名字出现在形式为D-id: T的声明中。 P - { offset = 0; } DS D - D;D D - 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]of T1 { T.type = array(num.val, T1.type); T.width = num.val * T1.width; } T - ↑T1 { T.type = pointer(T1.type); T.width = 4; } 7.4 (续) D - ID_LIST:T ID_LIST - ID_LIST,ID_LIST|id D - { Init(idtable) } ID_LIST:T { for each name in idtable do enter(name, T.type, offset); offset := offset + T.width; end; } ID_LIST - { Init(idtable1); Init(idtable2) } ID_LIST1,ID_LIST2 { merge(idtable1, idtable2, idtable) } ID_LIST - id { add(idtable, id.name); } 7.5 算符θ作用于表达式e1,e2,...,ek的前缀形式是θp1p2...pk,其中pi是ei的前缀形式。 (a) 写出a*-(b+c)的前缀形式。 (c) 给出把表达式翻成前缀形式的语法制导定义。 7.5 (续) (a) *a-+bc (c) 表达式翻成前缀形式的语法制导定义 E - E+T | T T - T*F | F F - -F | (E) | id L - 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; } F - id { F.string = id.value; } 7.7 修改图7.11的语法制导定义,为栈机器产生代码。 E ? E1 or E2 { E.place := newtemp; emit (E.place, ‘:=’, E1.place, ‘or’, E2.place) } E ? E1 and E2 { E.place := newtemp; emit (E.place, ‘:=’,

文档评论(0)

zijingling + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档