[理学]07 语义分析和中间代码产生ppt课件.ppt

[理学]07 语义分析和中间代码产生ppt课件.ppt

ID:59413000

大小:512.00 KB

页数:97页

时间:2020-09-19

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

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

1、第七章语义分析和中间代码产生中间语言的各种形式各种语句的翻译本章内容:中间语言的基本结构简单赋值语句的翻译布尔表达式的翻译等本章重点:7.1中间语言什么是中间语言源程序的一种内部表示,不依赖目标机的结构,易于机械生成目标代码的中间表示。中间语言的形式:后缀式三地址代码图表示法后缀(postfix)式表达式的一种表示形式运算符直接跟在运算量后面设E是表达式,那么如果E是变量或者常量,E的后缀式为E。E1OPE2==>E1’E2’OP,其中E1’,E2’为E1,E2的后缀式。(E)==>E’,其中E’为E的后缀式。又称为逆波兰表示法

2、A+B*(C-D)+E/(C-D)^N==>ABCD-*+ECD–N^/+E→E1opE2E.code:=E1.code

3、

4、E2.code

5、

6、opE→(E1)E.code:=E1.codeE→idE.code:=id把表达式翻译成后缀式的语义规则E.code:E的后缀形式op:二元操作符

7、

8、:后缀形式的连接图表示法:DAG图表示法包括DAG与抽象语法树。DAG(DirectedAcyclicGraph简称),无循环有向图。与抽象语法树一样,对于表达式中的每个子表达式,DAG图中都有一个结点。一个内部结点代表一个操作符,它的孩子代

9、表操作数。与抽象语法树不同的是,在DAG图中代表公共子表达式的结点具有多个父结点,而在一棵抽象语法树中公共子表达式被表示为重复的子树。+*d+*a–cb表达式a+a*(b-c)+(b-c)*d的DAG++*a–cba*d–cb比较:表达式a+a*(b-c)+(b-c)*d的AST三地址代码一般形式X:=yopz其中,x、y、z为名字、常数或编译时产生的临时变量;op代表运算符号如定点运算符、浮点运算符、逻辑运算符等。每个语句的右边只能有一个运算符。例如x+y*zT1:=y*zT2:=x+T1三地址语句的种类x:=yopzx:=o

10、pyx:=ygotoLifxrelopygotoL或ifagotoLparamx和callp,nx:=y[i]x:=&y,x:=*y和*x:=yE.place:=newtemp;E.code:=E1.code

11、

12、gen(E.place’:=’’unimus’E1.place)E→-E1E.place:=E1.place:E.code:=E1.codeE→(E1)E.place:=id.place:E.code:=‘’E→idS.code:=E.code

13、

14、gen(id.place’:=’E.place)S→id:=EE.plac

15、e:=newtemp;E.code:=E1.code

16、

17、E2.code

18、

19、gen(E.place’:=’E1.place’+’E2.place)E→E1+E2E→E1*E2E.place:=newtemp;E.code:=E1.code

20、

21、E2.code

22、

23、gen(E.place’:=’E1.place’*’E2.place)为赋值语句生成三地址代码的S—属性文法综合属性.code,代表三地址代码。E.place表示存放E值的名字函数newtemp函数gen(x’:=’y’+’z)三地址代码的具体形式四元式三元式间接三元式四元式

24、一般形式:单目运算符的处理:为空。一般来讲,四元式的运算符都有对应的机器指令,或者对应的子程序,因此从四元式生成指令代码是容易的。四元式之间的联系是通过临时变量实现的,便于进行代码优化。A+B*(C-D)+E/(C-D)^N==>(1)(-CDT1)(2)(*BT1T2)(3)(+AT2T3)(4)(-CDT4)(5)(^T4NT5)(6)(/ET5T6)(7)(+T3T6T7)三元式形式:出现顺序与表达式的计值顺序一致。和四元式比较:

25、无须临时变量;占用存储空间少;相互引用太多,难以进行代码优化。A+B*(C-D)+E/(C-D)^N==>(1)(-CD)(2)(*B(1))(3)(+A(2))(4)(-CD)(5)(^(4)N)(6)(/E(5))(7)(+(3)(6))间接三元式为了便于代码优化处理,用一张间接码表辅以三元式表的办法来表示中间代码。间接码表是一张指示器表,它将按运算的先后顺序列出有关三元式在三元式表中的位置。当在代码优化过程中需要调整运算顺序时,只需重新安排间接码表即可。A+B*(C-D)+E/(C-D)^N间接三元式序列(-CD)(*B(

26、1))(+A(2))(^(1)N)(/E(4))(+(3)(5))间接码表(1)(2)(3)(1)(4)(5)(6)中间代码形式小结后缀式:操作数在前,算符在后优点:不用使用括号,便于计算机处理缺点:不符合人的习惯(序号)算符op,运算量一,运算量二优点:非常接

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

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

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