收藏 分享(赏)

第5章 语义分析与中间代码生成.ppt

上传人:hskm5268 文档编号:8611194 上传时间:2019-07-05 格式:PPT 页数:29 大小:225KB
下载 相关 举报
第5章 语义分析与中间代码生成.ppt_第1页
第1页 / 共29页
第5章 语义分析与中间代码生成.ppt_第2页
第2页 / 共29页
第5章 语义分析与中间代码生成.ppt_第3页
第3页 / 共29页
第5章 语义分析与中间代码生成.ppt_第4页
第4页 / 共29页
第5章 语义分析与中间代码生成.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、S.P,O.P,第4章 语义分析与中间代码生成,要求明确语义分析的任务 明确属性文法和语法制导翻译的含义 明确自底向上和自顶向下语法制导翻译的区别和特点 明确生成中间代码的目的,中间代码的几种形式,教学目标,4.1 语义分析的任务 4.2 语法制导翻译 4.3 中间代码,教学内容,词法分析,语法分析:解决单词和语言成分的识别及词法和语法结构的检查。语法结构可形式化地用一组产生式来描述。给定一组产生式,我们能够很容易地将其分析器构造出来。本章要介绍的是语义分析和中间代码生成技术。 程序语言 中间代码 目标代码,翻译,翻译,根据语义规则对识别出的各种语法成分析其含义,进行初步翻译,生成相应的中间代

2、码或直接生成目标代码。,(1)确定数据类型 (2)语义检查 动态语义检查:在运行时刻进行静态语义检查:在编译时完成 (3)识别含义,进行真正的翻译,4.1 语义分析的任务,类型检查。控制流检查,确保控制语句有合法的转向点。例如,C语言中的break语句使控制跳离包括该语句的最小的switch,while或for语句。如果不存在包括它的这样的语句,则应报错。,静态语义检查,静态语义检查,一致性检查。很多情况下要求对象只能被定义一次。例如,语言中规定一个标识符在同一作用域中只能被说明一次,同一case语句的标号不能相同,枚举类型的元素不能重复出现等。相关名字检查。有的语言中有时规定,同一名字必须出

3、现两次或多次。例如,Ada语言中,循环或程序块可以有一个名字,它出现在这些结构的开头和结尾,如同语句括号一般,编译程序必须检查它们的配对情况。,实际应用中比较流行的语义分析方法: 基于属性文法的语法制导翻译方法,4.2 语法制导翻译,附加了一组属性和运算(语义)规则的文法,4.2.1 属性文法,文法符号X的属性t常用X.t来表示,语义规则是根据产生式所蕴涵的语义操作建立起来的,并与语义分析的目标有关 不同的产生式对应不同的语义规则 不同的分析目标也对应不同的语义规则,静态语义检查、符号表操作、代码生成及打印各种错误信息,非终结符E、T及F都有一个综合属性val,符号i有一个综合属性,它的值由词

4、法分析器提供。 某些非终结符加下标是为了区分一个产生式中同一非终结符多次出现,语 义 规 则,E E1+T,E T,T T1 * F,T F,F (E),F i,E.val=E1.val+T.val,E.val=T.val,T.val=T1.val F.val,T.val=F.val,F.val=E.val,F.val=i.lexval,产生式,例4.1,4.2.2 语法制导翻译的过程,语法制导翻译:将语义规则与语法规则相结合,在语法分析的过程中通过执行语义动作,计算语义属性值,从而完成预定的翻译工作。,自底向上语法制导翻译,自顶向下语法制导翻译,语法制导翻译的实现,语法制导翻译分为两种处理方

5、法:(1)语法制导定义(自底向上): 对每个产生式编制一个语义子程序,在进行语法分析的过程中,当一个产生式获得匹配时,就调用相应的语义子程序实现语义检查与翻译。这种实现方案隐藏了其中语义规则的计算次序等实现细节,不必规定翻译顺序。(2)翻译方案(自顶向下): 在产生式右部的适当位置,插入相应的语义动作,按照分析的进程,执行遇到的语义动作。这是一种动作与分析交错的实现方案。,输入符号串 分析树执行语义规则 翻译结果,翻译步骤,()从分析树得到描述结点属性间依赖关系的依赖图,由依赖图得到语义规则的计算次序,(1)分析输入符号串,建立分析语法树,()进行语义规则的计算,得到翻译结果,4.2.3 语法

6、制导定义,对每个产生式编制一个语义子程序 在进行语法分析的过程中,当一个产生式获得匹配时,就调用相应的语义子程序实现语义检查与翻译,自底向上传递信息,自顶向下(自左向右)传递信息,print(E.val)打印由E产生的算术表达式的值,可认为这条规则定义了L的一个虚属性。,L E,E E1+T,E T,T T1 * F,T F,F (E),F i,print(E.val),E.val=E1.val+T.val,E.val=T.val,T.val=T1.val F.val,T.val=F.val,F.val=E.val,F.val=i.lexval,例4. 综合属性,语 义 规 则,产生式,一个结

7、点的综合属性值是其子结点的某些属性来决定的,+3*4的注释分析树,通常使用自底向上的分析方法 在每个结点处使用语义规则来计算综合属性值 当一个产生式获得匹配时,就调用相应的语义子程序 从叶结点到根结点进行计算,只含有综合属性的语法制导定义称为S属性定义,例4.3 继承属性L.in,int id1,id2,id3,一个结点的继承属性值是由其父结点或兄弟结点的某些属性决定的,1、文法非终结符既有综合属性,也可有继承属性; 2、开始符号没有继承属性; 3、终结符只有综合属性,由词法分析器提供。,几点说明:,生成中间代码的目的 (1)便于优化 (2)便于移植,常见的中间代码形式: 后缀式 三地址代码(

8、四元式、三元式和间接三元式 )图形(抽象语法树、有向无环图),中间代码:一种介于源语言和目标语言之间的中间语言形式,4. 中间代码,中缀表示 后缀表示a+b ab+a+b*c abc*+(a+b)*c ab+c* a:=b*c+b*d abc*bd*+:=,特点,1、运算对象出现的顺序和原有顺序(从左到右)相同 2、运算符按实际计算顺序(从左到右)出现 3、运算符紧跟在运算对象的后面出现,且没有括号,优点:简明、便于计值,4.3.1 后缀式,分别给出下列表达式的后缀表示,1. -a+b*(-c+d) 2. X:=-(a+b)/(c-d)-(a+b*c) 3. a=c b=d 4. ab+c a

9、da+be,4.3.2 三地址代码,种类,(1)x = y op z形式的赋值语句,其中op是二元运算符。 (2)x = op y形式的赋值语句,其中op是一元运算符。 (3)x = y形式的赋值语句。 (4)无条件转移语句goto L,表示下一个要执行的语句是标号为L的语句。 (5)条件转移语句if x rop y goto L中,rop为关系运算符,如果x和y满足关系rop,就转而执行标号为L的语句,否则顺序执行下一个语句。,(6)过程调用语句param x 和call p , n。源程序中的过程调用语句p(x1,x2,xn)可以产生如下的三地址代码: param x1 param x2

10、param xn call p, n 其中n为实参个数。过程返回语句形如return y,其中y为过程返回的一个值。,(7)变址赋值: x= yi,把从y开始的第i个存储单元的值赋给x。 xi= y,把y的值赋给x开始的第i个存储单元。 其中,x,y和i都代表数据对象。 (8)地址和指针赋值: x=&y,把y的地址赋给x。 x= y,把y指示的地址单元中的内容赋给x。 x = y,把x指向的存储单元的值置为y。,2具体实现,四元式,结果:通常是由编译引进的临时变量,例: X=(A+B)*(C+D)-E,T1,T2,T3,T4为临时变量,由四元式优化比较方便,表达式的三元式:,第三个三元 式中的操作数(1) (2)表示第(1)和第 (2)条三元式的计 算结果。,三元式,不便于代码优化:删除某些三元式后可能需作一系列的修改,例:x =y +yz + yz,抽象语法树,4.3.3 图形表示,有向无环图,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报