语义分析和中间代码产生ppt课件.ppt

语义分析和中间代码产生ppt课件.ppt

ID:59003466

大小:102.00 KB

页数:82页

时间:2020-09-27

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

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

1、第七章 语义分析和中间代码产生7.1中间代码7.1.1逆波兰表示法逆波兰表示法是波兰逻辑家Lukasiewicz发明的一种表示表达式的方法。该方法是将运算量写在前面,算符写在后面,用这种方法表示的表达式称为后缀式,如a+b可写成ab+。一般而言,若θ是K目算符,它对后缀式e1,e2,...,ek作用的结果将被表示为e1e2...ekθ。后缀式的计算:一个后缀式的计算过程是使用一个栈,然后自左向右扫描后缀式,每遇到运算量就将它推进栈中,每遇到K目运算符就把它作用于栈顶部的K个项,并用运算结果来替代这K个项。可以看

2、出表达式的后缀式表示法对进行表达式的计算而言具有很强的方便性。后缀式的推广:后缀式这种表示法可以比较方便的推广到其它的描述地方,例如对条件算术表达式ifethenxelsey(含义为,若e=0,此式为y,否则等于x)而言,可以将if-then-else看成一个三目算符@,则该条件表达式的后缀式可写为exy@,考虑一下该表示法的缺点,和解决该缺点的方法。语法制导生成后缀式:E→E(1)+E(2){E.CODE:=E(1).CODE

3、

4、E(2).CODE}E→(E(1)){E.CODE:=E(1).CODE}E→i

5、{E.CODE:=i}7.1.2三元式和树三元式的形式为:(OP,ARG1,ARG2);OP是运算符,ARG1、ARG2分别为第一运算量和第二运算量。表达式A+B*C可以表示为:(1)(*,B,C)(2)(+,A,(1))其中三元式(2)是表达式A+B*C的最终代表,三元式(2)中的(1)指第一个三元式的结果。为产生中间代码,现定义几个相关的函数,这些函数主要是为使用符号表和保存中间代码而定义的。LOOKUP(NAME):对NAME查找符号表。若此名出现在表中,则将其表项位置(入口)作为LOOKUP的值;否则,

6、LOOKUP取值为null。FILLSYM(NAME):在符号表中开辟一新项,项目名为NAME,把此项的入口作为FILLSYM的值。TRIP(OP,ARG1,ARG2):产生一个新三元式(OP,ARG1,ARG2),该过程将新的三元式放入三元式代码区中,并返回在三元式表中的位置。ERTRY(i):对i所代表的标识符查找符号表以获得它在表中的位置通常的表达式翻译成三元式的语义动作如下:(1)E→E(1)opE(2){E.VAL:=TRIP(op,E(1).VAL,E(2).VAL}(2)E→-E(1){E.VAL

7、:=TRIP(@,E(1).VAL,-)}(3)E→(E(1)){E.VAL:=E(1).VAL}(4)E→i{E.VAL:=ENTRY(i)}试将下面语句序列给出其相应的三元式代码序列:X:=(A+B)*C;Y:=D↑(A+B);三元式序列如下:<1>(+,A,B)<2>(*,①,C)<3>(:=,X,②)<4>(+,A,B)<5>(↑,D,④)<6>(:=,Y,⑤)可以看出,该三元式序列是可以优化的,但是优化过程需要调整运算顺序,例如三元式(4)与(1)是相同的,可去掉(4),此时三元式(5)和(6)都需要

8、修改,为解决三元式优化修改的困难,可辅助以一张间接码表加以解决,这种表示法称为间接三元式。<1>(+,A,B)<2>(*,①,C)<3>(:=,X,②)<4>(↑,D,①)<5>(:=,Y,④)间接码表:①②③①④⑤7.1.3四元式四元式有四个部分:(OP,ARG1,ARG2,RESULT) OP一般代表确定运算符的整数码,ARG1,ARG2,RESULT或者是一个指向符号表的某一个入口的指示器,或者是一个代表临时变量的整数码,临时变量的表达可有两种处理方法:(1)将临时变量与用户自定义的变量同等看待添入符号表

9、中,在四元式的运算量或运算结果位置通过指向符号表该临时变量的入口指示器来使用该临时变量。(2)使用某种整数编码来表示临时变量,这样就不用将其放入符号表中。 请思考一下三元式与四元式在中间代码优化时哪种代码形式便于优化? 以下各节有关翻译的讨论均基于四元式代码的翻译7.2简单算术表达式和赋值语句到四元式的翻译增加几个翻译中需要的几个函数:NEWTEMP:是一个函数过程,每次调用回送一个代表新临时变量名的整数码。以下我们用Ti表示相应产生的临时变量。ENTRY(i):定义同前。GEN(OP,ARG1,ARG2,RE

10、SULT):将四元式(OP,ARG1,ARG2,RESULT)填入四元式表中,并将添入的位置返回。E.PLACE:它是和非终结符E相联系的语义变量,表示存放E值的变量在符号表的入口或整数码(若此变量是一个临时变量)。设只含整型变量的简单赋值语句的文法如下:A→i:=EE→E+E

11、E*E

12、-E

13、(E)

14、i翻译算法由如下的语义动作描述: (1)A→i:=E{GEN(:=,E.PLACE,,

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

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

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