语法制导翻译和中间代码.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文档。上传文档
查看更多

8.2.3L-属性文法和自顶向下翻译通过深度优先的方法对语法树进行遍历,计算属性文法的所有属性值LL(1):自上而下分析方法,深度优先建立语法树第30页,共74页,星期日,2025年,2月5日一个属性文法称为L-属性文法,如果对于每个产生式A→X1X2…Xn,其每个语义规则中的每个属性或者是综合属性,或者是Xj(1?j?n)的一个继承属性且这个继承属性仅依赖于:(1)产生式Xj的左边符号X1,X2,…,Xj-1的属性;(2)A的继承属性。S-属性文法一定是L-属性文法第31页,共74页,星期日,2025年,2月5日【思考】非L-属性的语法制导定义【分析】该语法制导定义不是L-属性定义,文法符号Q的继承属性依赖于它右边文法符号R的属性。产生式语义规则A?LMA?QRL.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)第32页,共74页,星期日,2025年,2月5日8.3中间代码的形式中间代码是源程序的一种内部表示复杂性介于源语言和目标机语言之间中间代码的作用使编译程序的逻辑结构更加简单明确利于进行与目标机无关的优化利于在不同目标机上实现同一种语言中间代码的形式逆波兰式、四元式、三元式、树第33页,共74页,星期日,2025年,2月5日1、后缀表示式Lukasiewicz发明的一种表示表达式的方法,又称逆波兰表示法。一个表达式E的后缀形式可以如下定义:1)如果E是一个变量或常量,则E的后缀式是E自身。2)如果E是E1opE2形式的表达式,其中op是任何二元运算符,则E的后缀式为E1?E2?op,其中E1?和E2?分别为E1和E2的后缀式。3)如果E是(E1)形式的表达式,则E1的后缀式就是E的后缀式。第34页,共74页,星期日,2025年,2月5日1、后缀表示式逆波兰表示法不用括号。只要知道每个算符的目数,对于后缀式,不论从哪一端进行扫描,都能对它进行唯一分解。例如:(a+b)*c表示成ab+c*后缀式的计算用一个栈实现。一般的计算过程是:自左至右扫描后缀式,每碰到运算量就把它推进栈。每碰到k目运算符就把它作用于栈顶的k个项,并用运算结果代替这k个项。第35页,共74页,星期日,2025年,2月5日1、后缀表示式把表达式翻译成后缀式的语义规则描述产生式E→E(1)opE(2)E→(E(1))E→id 语义动作E.code:=E(1).code||E(2).code||opE.code:=E(1).codeE.code:=idE.code表示E后缀形式op表示任意二元运算符“||”表示后缀形式的连接。第36页,共74页,星期日,2025年,2月5日数组POST存放后缀式:k为下标,初值为1上述语义动作可实现为: 产生式 程序段 E→E(1)opE(2) {POST[k]:=op;k:=k+1} E→(E(1)) {} E→i {POST[k]:=i;k:=k+1}例:输入串a+b+c的分析和翻译 POST:12345E→E(1)opE(2) E.code:=E(1).code||E(2).code||opE→(E(1)) E.code:=E(1).codeE→id E.code:=idab+c+…第37页,共74页,星期日,2025年,2月5日2、图表示法DAG(无循环有向图)抽象语法树(1)无循环有向图(DirectedAcyclicGraph,简称DAG)对表达式中的每个子表达式,DAG中都有一个结点一个内部结点代表一个操作符,它的孩子代表操作数在一个DAG中代表公共子表达式的结点具有多个父结点第38页,共74页,星期日,2025年,2月5日a:=b*(-c)+b*(-c)的图表示法assigna+*buminuscDAGassigna+*buminusc抽象语法树*buminusc后缀式是抽象语法树的线性表示形式:abc-*bc-*+:=第39页,共74页,星期日,2025年,2月5日抽象语法树对应的代码:T1:=-c T2:=b*T1 T3:=-c T4:=b*T3 T5:=T2+T4 a:=T5assigna+*buminusc

文档评论(0)

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

你好,我好,大家好!

版权声明书
用户编号:7140162041000002

1亿VIP精品文档

相关文档