编译原理第7章

编译原理第7章

ID:20382960

大小:531.50 KB

页数:85页

时间:2018-10-13

编译原理第7章_第1页
编译原理第7章_第2页
编译原理第7章_第3页
编译原理第7章_第4页
编译原理第7章_第5页
资源描述:

《编译原理第7章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第七章语义分析和中间代码生成紧接在词法分析和语法分析之后,编译程序要做的工作就是进行静态语义检查和翻译。静态语义检查(1)类型检查。如果操作符作用于不相容的操作数,编译程序必须报告出错信息。(2)控制流检查。控制流语句必须使控制转移到合法的地方。(3)一致性检查。在很多场合要求对象只能被定义一次。(4)相关名字检查。其它如名字的作用域分析等。使用中间语言的好处(1)便于进行与机器无关的代码优化工作;(2)使编译程序改变目标机更容易;(3)使编译程序的结构在逻辑上更为简单明确。以中间语言为界面,编译前端和后端的接口更清晰

2、。本章内容目录中间语言后缀式图表示法三地址代码说明语句过程中的说明谙旬保留作用域信息记录中的域名赋值语句的翻译简单算术表达式及赋值语句数组元素的引用布尔表达式的翻译数值表示法作为条件控制的布尔式翻译控制语句的翻译中间语言几种常见的中间语言形式后缀式三地址代码(包括三元式、四元式、间接三元式)DAG图表示后缀式后缀式表示法又称逆波兰表示法。这种表示法是把运算量(操作数)写在前面,把算符写在后面(后缀)。例如,把a十b写成ab+,把a*b写成ab*。一个表达式E的后缀形式(1)如果E是一个变量或常量,则E的后缀式是E自身。

3、(2)如果E是E1opE2形式的表达式,这里op是任何二元操作符,则E的后缀式为E1′E2′op,这里E1′和E2′分别为E1和E2的后缀式。(3)如果E是(E1)形式的表达式,则E1的后缀式就是E的后缀式。后缀式表示法用不着使用括号。根据运算量和算符出现的先后位置,以及每个算符的目数,就完全决定了一个表达式的分解。只要知道每个算符的目数,对于后缀式,不论从哪一端进行扫描,都能对它正确进行唯一分解。图表示法包括DAG与抽象语法树无循环有向图(DirectedAcycliGraph简称DAG)。与抽象语法树一样,对表达式

4、中的每个子表达式,DAG中都有一个结点。一个内部结点代表一个操作符,它的孩子代表操作数。与抽象语法树不同的是,在一个DAG中代公共子表达式的结点具有多个父结点,而在一棵抽象语法树中公共子表达式被表示为重复的子树。例如,表达式a+a*(b-c)+(b-c)*d例如,表达式a+a*(b-c)+(b-c)*d后缀式即是对抽象语法树的后续遍历序列例:上图中的抽象语法树的后缀式是:abcuminus*bcuminu*+assign抽象语法树的边没有显式地出现在后缀式中,这些边可以根据结点出现的次序及表示操作符的结点要求操作数的个

5、数还原出来。三地址代码三地址代码是由下面一般形式的语句构成的序列:x:=yopz其中,x,y,z为名字、常数或编译时产生的临时变量;op代表运算符号如定点运算符、浮点运算符、逻辑运算符等等。每个语句的右边只能有一个运算符。例如,源语言表达式x+y*z可以被翻译为如下语句序列:T1:=y*zT2:=x+T1其中,Tl,T2为编译时产生的临时变量。三地址代码可以看成是抽象语法树或DAG的一种线性表示。三地址语句类似于汇编语言代码。语句可以带有符号标号,而且存在各种控制流语句。符号标号代表存放中间代码的数组中三地址代码语句的

6、下标。下面列出所使用的三地址语句的种类。(1)形如x:=yopz的赋值语句,其中op为二元算术算符或逻辑算符。(2)形如x:=opy的赎值语句,其中op为一元算符,如一元减ununus,逻辑非not,移位算符及转换算符(如将定点数转换成浮点数)。(3)形如x:=y的复制语句,它将y的值赋给x。(4)形如gotoL的无条件转移语句,即下一条将被执行的语句是带标号L的三地址语句。(5)形如ifxrelopygotoL或ifagotoL的条件转移语句。第一种形式语句施用关系运算符号relop(如<,=,>,=等等)于x和y,

7、若x与y满足关系relop,那么下面就执行带标号L的语句,否则下面就继续执行if语句之后的语句。第二种形式的语句中,a为布尔变量或常量,若a为真,则执行带标号L的语句,否则执行后一条语句。(6)用于过程调用的语句paramx和callp,n,以及返回语句returny.源程序中的过程调用语句P(xl,x2,…,xn)通常产生如下的三地址代码:paramx1paramx2……paramxncallp,n其中n表示实参个数。过程返回语句retumy中y为过程返回的一个值。(7)形如x:=y[i]及x[i]:=y的索引赋值。

8、前者把相对于地址y的后面第i个单元里的值赋给x。后者把y的值赋给相对于地址x后面的第i个单元。(8)形如x:=&y,x:=*y和*x:=y的地址和指针赋值。其中第一个赋值语句把y的地址赋给x。假定y是个名字,或者是一个临时变量,代表一个具有左值的表达式,例如A[i,j];并且x是一个指针名字或临时变量。也就是说,x的右值将被赋予对

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

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

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