语义分析和中间代码产生.doc

语义分析和中间代码产生.doc

ID:50848251

大小:86.00 KB

页数:20页

时间:2020-03-15

语义分析和中间代码产生.doc_第1页
语义分析和中间代码产生.doc_第2页
语义分析和中间代码产生.doc_第3页
语义分析和中间代码产生.doc_第4页
语义分析和中间代码产生.doc_第5页
资源描述:

《语义分析和中间代码产生.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、第七章语义分析和中间代码产生本章概述上一章我们介绍了属性文法和语法制导翻译,本章我们将把上章所介绍的方法和技术应用于语义分析和中间代码产生中。主要学习内容:中间语言的形式——后缀式、图表示法、三地址代码,说明语句的语义分析,赋值语句的翻译,布尔表达式的翻译,控制语句的翻译,过程调用的处理,类型检查。学习目标:熟悉几种中间语言的描述,掌握各种语句的翻译方法,会给出各种语句的语义规则和语义子程序。学习重点和难点:如何把属性文法和语法制导翻译的方法和技术应用于语义分析和中间代码产生中,特别是表达式和控制语句的翻译。7.1中间语言7.1.1中间语言虽然源程序可以直接翻译为目标语言代码。但是许多编译程序

2、都采用了独立于机器的、复杂性介于源语言和机器语言之间的中间语言。常见的中间语言形式包括:后缀式,三地址代码(包括三元式,四元式,间接三元式),DAG图表示和抽象语法树等。1.后缀式后缀式表示法是波兰逻辑学家卢卡西维奇(Lukasiewicz)发明的一种表示表达式的方法,因此又称逆波兰表示法。这种表示法是,把运算量(操作数)写在前面,把算符写在后面(后缀)。例如,把a+b写成ab+,把a*b写成ab*。2.抽象语法树在语法树中去掉那些对翻译不必要的信息,从而获得更有效的源程序中间表示。这种经变换后的语法树称之为抽象语法树(AbstractSyntaxTree)。3.DAG与抽象语法树一样,对表达

3、式中的每个子表达式,DAG(DirectedAcyclicGraph)中都有一个结点。一个内部结点代表一个操作符,它的孩子代表操作数。两者不同的是,在一个DAG中代表公共子表达式的结点具有多个父结点,而在一棵抽象语法树中公共子表达式被表示为重复的子树。    4.三地址代码 三地址代码是由下面一般形式的语句构成的序列:                         x:=yopz其中x,y,z为名字、常数或编译时产生的临时变量,op代表运算符号如定点运算符、浮点运算符、逻辑运算符等等。每个语句的右边只能有一个运算符。例如,源语言表达式x+y*z可以被翻译为如下语句序列:           

4、     T1:=y*z                T2:=x+T1其中T1,T2为编译时产生的临时变量。之所以称为三地址代码是因为每条语句通常包含三个地址,两个用来表示操作数,一个用来存放结果。三地址语句类似于汇编语言代码。语句可以带有符号标号,而且存在各种控制流语句。符号标号代表存放中间代码的数组中三地址代码语句的下标。下面是常用的三地址语句的种类:(1)形如x:=yopz的赋值语句,其中op为二元算术算符或逻辑算符。(2)形如x:=opy的赋值语句,其中op为一元算符,如一元减uminus、逻辑非not、移位算符及转换算符(如将定点数转换成浮点数)。(3)形如x:=y的复制语句,它将

5、y的值赋给x。(4)形如gotoL的无条件转移语句,即下一条将被执行的语句是带标号L的三地址语句。(5)形如ifxrelopygotoL或ifagotoL的条件转移语句。第一种形式语句施用关系运算符号relop(如<,=,>,=等等)于x和y,若x与y满足关系relop,那么下面就执行带标号L的语句,否则下面就继续执行if语句之后的语句。第二种形式的语句中,a为布尔变量或常量,若a为真,则执行带标号L的语句,否则执行后一条语句。(6)用于过程调用的语句paramx和callp,n,以及返回语句returny。源程序中的过程调用语句p(x1,x2,…,xn)通常产生如下的三地址代码:      

6、           paramx1                 paramx2                  ……                 paramxn                 callp,n其中n表示实参个数。过程返回语句returny中y为过程返回的一个值。(7)形如x:=y[i]及x[i]:=y的索引赋值。前者把相对于地址y的后面第i个单元里的值赋给x。后者把y的值赋给相对于地址x后面的第i个单元。(8)形如x:=&y,x:=*y和*x:=y的地址和指针赋值。其中第一个赋值语句把y的地址赋给x。第二个赋值语句x:=*y执行的结果是把y所指示的地址单元里存放的内

7、容赋给x。第三个赋值语句*x:=y,将把x所指向的对象的右值赋为y的右值。三地址语句可看成中间代码的一种抽象形式。编译程序中,三地址代码语句的具体实现可以用记录表示,记录中包含表示运算符和操作数的域。通常有三种表示方法:四元式、三元式、间接三元式。1.四元式一个四元式是一个带有四个域的记录结构,这四个域分别称为op,arg1,arg2及result。域op包含一个代表运算符的内部码。三地址语句x:

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

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

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