中间代码生成课件.ppt

中间代码生成课件.ppt

ID:57012220

大小:779.50 KB

页数:93页

时间:2020-07-26

中间代码生成课件.ppt_第1页
中间代码生成课件.ppt_第2页
中间代码生成课件.ppt_第3页
中间代码生成课件.ppt_第4页
中间代码生成课件.ppt_第5页
资源描述:

《中间代码生成课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、语义分析的任务:静态语义审查审查每个语法结构的静态语义,即验证语法结构合法的程序,是否真正有意义。第7章语法制导翻译技术和中间代码生成例如:表达式A+B*C对运算对象进行类型检查,对变量进行先定义后使用检查如果静态语义正确,语义处理则要执行真正的翻译,即生成程序的某种中间代码的形式或直接生成目标代码。执行真正的翻译第7章语法制导翻译技术和中间代码生成目前多数编译程序进行语义分析的方法是采用语法制导翻译法。它不是一种形式系统,但它比较接近形式化。语法制导翻译法使用属性文法为工具来描述程序设计语言的语义。第7章语法制导翻译技术和中间代码生成(1)属性对文法的每一个符号,引进一

2、些属性,这些属性代表与文法符号相关的信息,如类型、值、存储位置等。与属性相关的信息,即属性值,可以在语法分析过程中计算和传递。1.属性文法第7章语法制导翻译技术和中间代码生成属性分为两类:综合属性其计算规则按“自下而上”方式进行,即规则左部符号的某些属性根据其右部符号的属性和(或)自己的其他属性计算得到。属性加工的过程即是语义的处理过程。综合属性和继承属性。第7章语法制导翻译技术和中间代码生成继承属性其计算规则按“自上而下”方式进行,即规则右部符号的某些属性根据其左部符号的属性和(或)右部其他符号的某些属性计算得到。第7章语法制导翻译技术和中间代码生成(2)属性文法为文法

3、的每一个规则配备的计算属性的计算规则,称为语义规则(描述语义处理的加工动作)。属性文法包含一个上下文无关文法和一系列语义规则。语义规则:第7章语法制导翻译技术和中间代码生成这些语义规则附在文法的每个产生式上,在语法分析过程中,执行语义规则描述的动作,从而实现语义处理。也就是说,附在文法的每个产生式上语义规则描述了语义处理的加工动作。目前流行的语义描述和语义处理的方法主要是属性文法和语法制导翻译方法。第7章语法制导翻译技术和中间代码生成2.语法制导翻译法为文法的每个产生式都配备一个语义动作或语义子程序。在语法分析的过程中,每当使用一条产生式进行推导或归约时,就执行相应产生式

4、的语义动作,从而实现语义处理。第7章语法制导翻译技术和中间代码生成(1)语法制导翻译法的基本思想S→……{……}………A→xy{……}………a1a2a3…aiai+1…an语义处理的加工动作语法制导翻译法使用属性文法为工具来说明程序设计语言的语义。第7章语法制导翻译技术和中间代码生成(2)语法制导翻译法在语法分析过程中,依随分析的过程,根据每个产生式所对应的语义子程序(或语义规则描述的语义处理的加工动作)进行翻译的方法。第7章语法制导翻译技术和中间代码生成为文法每一产生式设计相应的求值的语义描述(语义动作):例如,设有简单算术表达式的文法:E→E+E

5、E*E

6、(E)

7、di

8、git1.E→E(1)+E(2){E.val=E(1).val+E(2).val}2.E→E(1)*E(2){E.val=E(1).val*E(2).val}3.E→(E(1)){E.val=E(1).val}4.E→digit{E.val=Lex.digit}第7章语法制导翻译技术和中间代码生成E.val=47E.val=8E.val=40E.val=7E.val=5+5*871.E→E(1)+E(2){E.val=E(1).val+E(2).val}2.E→E(1)*E(2){E.val=E(1).val*E(2).val}3.E→(E(1)){E.val=E(1).

9、val}4.E→digit{E.val=Lex.digit}句子7+8*5EEEEE3.编译中常用的中间代码:逆波兰式四元式三元式树形表示第7章语法制导翻译技术和中间代码生成逆波兰式逆波兰式除去了原表达式中的括号,并将运算对象写在前面,运算符写在后面,因而又称为后缀式。例如:逆波兰式a*bab*(a+b)*(c+d)ab+cd+*中缀表达式第7章语法制导翻译技术和中间代码生成逆波兰式表示法同中缀表示法相比其优点是:不再有括号,且运算符出现的顺序体现了中缀表达式的运算顺序2.易于计算机处理第7章语法制导翻译技术和中间代码生成一般表达式计值时,要处理两类符号,一类是运算对象,

10、另一类是运算符,通常用两个工作栈分别处理。但处理用逆波兰式表示的表达式却只用一个工作栈。第7章语法制导翻译技术和中间代码生成当计算机自左到右顺序扫描逆兰波式时,若当前符号是运算对象则进栈,若当前符号是运算符,设为K元运算符,则将栈顶的K个元素依次取出,同时进行K元运算,并将运算结果置于栈顶,表达式处理完毕时,其计算结果自然呈现在栈顶。第7章语法制导翻译技术和中间代码生成逆波兰式ab+c*的处理过程如下图:baT1第7章语法制导翻译技术和中间代码生成cT1T2逆波兰形式可以推广到其他语法结构:赋值语句V=E逆波兰式VE=条件语句

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。