语法制导翻译和中间代码.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一个属性文法称为L-属性文法,如果对于每个产生式A→X1X2…Xn,其每个语义规则中的每个属性或者是综合属性,或者是Xj(1?j?n)的一个继承属性且这个继承属性仅依赖于: (1) 产生式Xj的左边符号X1,X2,…,Xj-1的属性; (2) A的继承属性。 S-属性文法一定是L-属性文法 第三十一页,共七十二页,2022年,8月28日 【思考】非L-属性的语法制导定义 【分析】该语法制导定义不是L-属性定义, 文法符号Q的继承属性依赖于它右边文法符 号R的属性。 产生式 语义规则 A?LM A ? QR L.i:=l(A.i) M.i:=m(L.s) A.s:=f(M.s) R.i:=r(A.i) Q.i:=q(R.s) A.s:=f(Q.s) 第三十二页,共七十二页,2022年,8月28日 8.3 中间代码的形式 中间代码 是源程序的一种内部表示 复杂性介于源语言和目标机语言之间 中间代码的作用 使编译程序的逻辑结构更加简单明确 利于进行与目标机无关的优化 利于在不同目标机上实现同一种语言 中间代码的形式 逆波兰式、四元式、三元式、树 第三十三页,共七十二页,2022年,8月28日 1、后缀表示式 Lukasiewicz发明的一种表示表达式的方法,又称逆波兰表示法。 一个表达式E的后缀形式可以如下定义: 1) 如果E是一个变量或常量,则E的后缀式是E自身。 2) 如果E是E1 op E2形式的表达式,其中op是任何二元运算符,则E的后缀式为E1? E2? op,其中E1? 和E2? 分别为E1 和E2的后缀式。 3) 如果E是(E1)形式的表达式,则E1 的后缀式就是E的后缀式。 第三十四页,共七十二页,2022年,8月28日 1、后缀表示式 逆波兰表示法不用括号。只要知道每个算符的目数,对于后缀式,不论从哪一端进行扫描,都能对它进行唯一分解。 例如:(a+b)*c 表示成ab+c* 后缀式的计算 用一个栈实现。 一般的计算过程是:自左至右扫描后缀式,每碰到运算量就把它推进栈。每碰到k目运算符就把它作用于栈顶的k个项,并用运算结果代替这k个项。 第三十五页,共七十二页,2022年,8月28日 1、后缀表示式 把表达式翻译成后缀式的语义规则描述 产生式 E→E(1)op E(2) E→ (E(1)) E→id 语义动作 E.code:= E(1).code || E(2).code ||op E.code:= E(1).code E.code:=id E.code表示E后缀形式 op表示任意二元运算符 “||”表示后缀形式的连接。 第三十六页,共七十二页,2022年,8月28日 数组POST存放后缀式:k为下标,初值为1 上述语义动作可实现为: 产生式 程序段 E→E(1)op E(2) {POST[k]:=op;k:=k+1} E→ (E(1)) { } E→i {POST[k]:=i;k:=k+1} 例:输入串a+b+c的分析和翻译 POST: 1 2 3 4 5 E→E(1)op E(2) E.code:= E(1).code || E(2).code ||op E→ (E(1)) E.code:= E(1).code E→id E.code:=id a b + c + … 第三十七页,共七十二页,2022年,8月28日 2、图表示法 DAG(无循环有向图) 抽象语法树 (1)无循环有向图(Directed Acyclic Graph,简称DAG) 对表达式中的每个子表达式,DAG中都有一个结点 一个内部结点代表一个操作符,它的孩子代表操作数 在一个DAG中代表公共子表达式的结点具有多个父结点 第三十八页,共七十二页,2022年,8月28日 a:=b*(-c)+b*(-c)的图表示法 assign a + * b uminus c DAG assign a + * b uminus c 抽象语法树 * b uminus c 后缀式是抽象语法树的线性表示形式:abc-*bc-*+:= 第三十九页,共七十二页,2022年,8月28日 抽象语法树对应的代码: T1:=-c T2:=b*T1 T3:=-c T4:=b*T3 T5:=T2+T4 a:=T5 assign a + * b uminus c 抽象语法树 * b uminus c 第四十页,共七十二页,2022年,8月28日 DAG对应的代码: T1:=-c T2:=b*T1 T5:=T2+T2 a:=T5 assign a + * b uminus c DAG 抽象语法树对应的代码: T1:=

文档评论(0)

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

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

1亿VIP精品文档

相关文档