编译原理实用教程 杨德芳 第7章 语法制导翻译和中间代码

编译原理实用教程 杨德芳 第7章 语法制导翻译和中间代码

ID:40336240

大小:919.50 KB

页数:106页

时间:2019-07-31

编译原理实用教程 杨德芳 第7章 语法制导翻译和中间代码_第1页
编译原理实用教程 杨德芳 第7章 语法制导翻译和中间代码_第2页
编译原理实用教程 杨德芳 第7章 语法制导翻译和中间代码_第3页
编译原理实用教程 杨德芳 第7章 语法制导翻译和中间代码_第4页
编译原理实用教程 杨德芳 第7章 语法制导翻译和中间代码_第5页
资源描述:

《编译原理实用教程 杨德芳 第7章 语法制导翻译和中间代码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第7章语法制导翻译和中间代码生成学习目标任何编译程序都可以看作是这样的一个翻译程序:它将用某种源语言写的源程序转换为等价的用某种目标语言写的程序(目标程序),其中的目标程序可以是某种中间的语言程序。语法制导翻译的基本思想是很简单的,就是先给文法中的每个产生式添加一个成分,这个成分称为语义动作或翻译子程序。在执行语法分析的同时,执行相应产生式的语义动作。这些语义动作不仅指明了该产生式所生成的符号串的意义,而且根据这种意义规定了对应的加工动作。本章要点:语法制导翻译中间代码的形式各种语句的翻译例题7.1给出文法及其语义子程序(0)S′→Eprint

2、val[top](1)E→E(1)+E(2)val[top]=val[top]+val[top+2](2)E→E(1)*E(2)val[top]=val[top]*val[top+2](3)E→(E(1))val[top]=val[top+1](4)E→ival[top]=lexval/*LEXVAL为i的整型内部值*/计算算术表达式7+9*5#的语法值及各结点的值。表7-1表达式7+9*5#的语义分析步骤状态栈符号栈语义栈输入串主要动作10#-7+9*5#S3203#7――+9*5#r4301#E—7+9*5#S44014#E+—7—9*5#

3、S350143#E+9—7——*5#r460147#E+E—7—9*5#S5701475#E+E*—7—9-5#S38014753#E+E*5—7—9--#r49014758#E+E*E—7—9—5#r2100147#E+E—7—45#r11101#E—52#acc7.1概述如同在进行词法分析、语法分析的同时也进行着词法检查、语法检查一样,在语义分析时也必然进行语义检查。语义分析包括动态语义分析和静态语义分析两类。动态语义分析就是进行真正的翻译,即生成程序的一种中间表示形式(中间代码)或需要生成相应的目标代码,它是运行时进行的;静态语义分析是在

4、编译时完成的,它涉及到几个方面:7.1.1语义分析的概念(1)类型检查,如参与运算的操作数其类型应相容。(2)控制类检查,以保证控制语句有合法的转向点。如C语言中不允许goto语句转入case语句流。Break语句需要寻找包含它的最小的switch、while或for语句方可找到转向点,否则出错。(3)一致性检查,如在相同作用域中标识符只能说明一次,case语句的标识不能相同等。7.1.2语法制导翻译语法制导翻译的方法就是为每个产生式配上一个翻译子程序(称为语义动作或语义子程序),并在语法分析的同时执行这些子程序。语义动作是为产生式赋予具体意义

5、的手段,它一方面指出了一个产生式所产生的符号串的意义;另一方面又按照这种意义规定了生成某种中间代码应做哪些基本动作。在语法分析过程中,当一个产生式获得匹配或用于归约时,此产生式相应的语义子程序就进入工作,完成即定的翻译任务。语法制导翻译分为自底向上语法制导翻译和自顶向下的语法制导翻译。状态文法符号语义值S0S1SK#X1XKV1.valVk.val—TOP图7-1扩充的LR分析栈E.val=52E.val=7+E.val=457E.val=9*E.,val=595图7-2语法制导翻译计算表达式7+9*5#的语法树7.2属性文法属性是指与文

6、法符号的类型和值等有关的信息。在编译中用属性描述处理对象的特征。随着编译的进展,对语法分析产生的语法树进行语义分析,且分析的结果用中间代码描述出来。对于一棵等待翻译的语法树,它的各个结点都是文法中的一个符号X,该X可以是终结符或非终结符。根据语义处理的需要,在用产生式A→X进行归约或推导时,应能够准确而恰当地表达文法符号X在归约或推导时的不同的特征。例如,判断X的类型是否匹配,要用X的数据类型来描述;因此,在语义分析阶段引入X的属性,如X.type、X.place、X.val等分别描述变量X的类型、存储位置及值的不同特征。文法符号的属性可以

7、分为继承属性与综合属性两大类。继承属性用于“自上而下”传递信息。继承属性由相应语法树中的结点的父结点属性计算得到,即沿语法树向下传递,由根结点到分枝结点,它反映了对上下文依赖的特性。继承属性可以很方便地用来表示程序语言上下文的结构关系。综合属性用于“自下而上”传递信息。综合属性由相应语法分析树中结点的分支结点属性计算得到,其传递方向与继承属性相反,即沿语法分析树向上传递,从分枝结点到根结点。7.2.2属性文法属性文法是一种适应于定义语义的特殊文法,即在语言的文法中增加了属性的文法。它将文法符号的语义以“属性”的形式附加到各个文法的符号上。再根据

8、产生式所包含的含义,给出每个文法符号属性的求值规则,从而形成一种带有语义属性的上下问无关文法,即属性文法。属性文法也是一种翻译文法,属性有助于更详细地

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

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

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