




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章 语义分析和中间代码的表示,语义分析的概念 语法制导翻译方法 属性文法 几种常见的中间代码表示,第一节 语义分析的概念,语义分析:即审查每个语法成分的静态语义。 在早期的一些编译程序中,是在语法分析的基础上根据源程序中各语法成份的语义,直接产生机器语言或汇编语言形式的目标代码。 现在的编译系统一般都将经过语法分析的源程序先翻译为某种形式的中间语言代码,然后再将其翻译为目标代码。 优点: 使编译程序各组成部分功能更单一; 使得编译程序的逻辑结构更为清晰,从而使编译程序更易于编写与调整;同时为代码优化和程序的可移植性提供了条件,在语义分析时也要进行语义检查,编译时的语 义检查是静态语义检查,包括: 类型检查,如参与运算的操作数的类型应相容。 控制流检查,用以保证控制语句有合法的转向点。如C语言中不允许goto语句转入case语句流。 一致性检查,如case语句的标号不能相同。,第二节 语法制导翻译,对文法中的每个产生式都附加一个语义动作或语义子程序,在语法分析过程中,每当需要使用一个产生式进行推导或归约,语法分析程序除执行相应的语法分析动作外,还要执行相应的语义动作或调用相应的语义子程序。 这种模式实际上是对前后文无关文法的一种扩充。,例如,文法GE: 产生式 语义动作 EE(1)+T E.Val=E(1).val+T.val; ET E.Val=T.Val; Tdigit T.Val=digit; 为了能在语法分析过程中平行地进行语义处理,可在语法分析栈旁边并行地设置一个语义信息栈。,产生式的语义是由组成该产生式的文法符号的语义所决定的。 我们可将这些语义以“属性”的形式附加到各个文法符号上,再根据产生式所蕴含的语义,给出每个文法符号的属性的求值规则,从而形成一种附带有语义属性的前后文无关文法,即属性文法。,第三节 属性文法,属性文法=上下文无关文法+属性+求值规则 属性是用来描述文法符号的语义特征,如 常量的“值”、变量的类型和存储位置等。 求值规则(属性计算规则) 与产生式相关联的反映文法符号属性之间关系的 “规则”。 求值规则还可进一步扩展为语义规则(语义动作)。,1、定义,例:简单表达式的属性文法。,若产生式AX1X2Xn,与之相关的属性计算规则 b := f ( c1, c2, ), 其中f 是函数,b和c1, c2, , ck 是该产生式文法符号的属性, 如果属性b是产生式左部符号A的属性, c1 , c2 , , ck 是产生式右部文法符号的属性或A的其它属性,则称其为A的综合属性; 如果属性b是产生式右部符号Xi的属性, c1 , c2 , , ck 是产生式右部文法符号的属性或A的属性则称其为Xi的继承属性; 终结符仅有综合属性,如digit.lex_val。通常由词法程序提供。而开始符号没有继承属性。,2、属性的分类,继承属性用于“自上而下”传递信息。 继承属性由相应语法树中结点的父结点和/或兄弟结点属性计算得到,它反映了对上下文依赖的特性。 继承属性可以很方便地用来表示程序设计语言上下文的结构关系。,几点说明:,几点说明(续):,综合属性用于“自下而上”传递信息。 综合属性由相应语法树中结点的分枝结点属性计算得到,即沿语法树向上传递,从分枝(子)结点到根结点。,思考:简单表达式文法中的属性各是什么类型的?,A.b,X1.c1,X2.c2,X,综合属性A.b的计算,A,X1.c1,X2.c2,继承属性Xk.b的计算,Xk.b,X,在语法树中,将每个结点均视为由若干个域组成的结构,则可将其中的一些域用来存放相应文法符号诸属性之值,并可用属性来为这些域命名。通常我们将每个结点都标注相应属性值的语法树称为注释分析树(Decorated Syntax Tree)。 属性求值的过程:在注释分析树中,一个文法符号X在相应结点的综合属性之值,由其子结点的属性和(或)X的其它属性,通过相关属性规则经计算而得,故综合属性的求值在语法树中是按自下而上的方式进行的;X的继承属性之值则由X的父结点和(或)其它兄弟结点来定义,故继承属性的求值将按自上而下的方式进行。,注释分析树,例:8+5*2 的注释分析树。(综合属性),分析树各结点属性的计算可以自下而上地完成,digit.lexval = 2,L,E.val = 18,T.val = 10,E.val = 8,T.val = 8,F.val = 8,digit.lexval = 8,T.val = 5,+,*,F.val = 5,F.val = 2,digit.lexval = 5,分析树各结点属性的计算可以自下而上地完成,digit.lexval = 2,L,E.val = 18,T.val = 10,E.val = 8,T.val = 8,F.val = 8,digit.lexval = 8,T.val = 5,+,*,F.val = 5,F.val = 2,digit.lexval = 5,分析树各结点属性的计算可以自下而上地完成,digit.lexval = 2,L,E.val = 18,T.val = 10,E.val = 8,T.val = 8,F.val = 8,digit.lexval = 8,T.val = 5,+,*,F.val = 5,F.val = 2,digit.lexval = 5,分析树各结点属性的计算可以自下而上地完成,digit.lexval = 2,L,E.val = 18,T.val = 10,E.val = 8,T.val = 8,F.val = 8,digit.lexval = 8,T.val = 5,+,*,F.val = 5,F.val = 2,digit.lexval = 5,分析树各结点属性的计算可以自下而上地完成,digit.lexval = 2,L,E.val = 18,T.val = 10,E.val = 8,T.val = 8,F.val = 8,digit.lexval = 8,T.val = 5,+,*,F.val = 5,F.val = 2,digit.lexval = 5,分析树各结点属性的计算可以自下而上地完成,digit.lexval = 2,L,E.val = 18,T.val = 10,E.val = 8,T.val = 8,F.val = 8,digit.lexval = 8,T.val = 5,+,*,F.val = 5,F.val = 2,digit.lexval = 5,分析树各结点属性的计算可以自下而上地完成,digit.lexval = 2,L,E.val = 18,T.val = 10,E.val = 8,T.val = 8,F.val = 8,digit.lexval = 8,T.val = 5,+,*,F.val = 5,F.val = 2,digit.lexval = 5,分析树各结点属性的计算可以自下而上地完成,digit.lexval = 2,L,E.val = 18,T.val = 10,E.val = 8,T.val = 8,F.val = 8,digit.lexval = 8,T.val = 5,+,*,F.val = 5,F.val = 2,digit.lexval = 5,分析树各结点属性的计算可以自下而上地完成,digit.lexval = 2,L,E.val = 18,T.val = 10,E.val = 8,T.val = 8,F.val = 8,digit.lexval = 8,T.val = 5,+,*,F.val = 5,F.val = 2,digit.lexval = 5,分析树各结点属性的计算可以自下而上地完成,digit.lexval = 2,L,E.val = 18,T.val = 10,E.val = 8,T.val = 8,F.val = 8,digit.lexval = 8,T.val = 5,+,*,F.val = 5,F.val = 2,digit.lexval = 5,分析树各结点属性的计算可以自下而上地完成,digit.lexval = 2,L,E.val = 18,T.val = 10,E.val = 8,T.val = 8,F.val = 8,digit.lexval = 8,T.val = 5,+,*,F.val = 5,F.val = 2,digit.lexval = 5,注释分析树:结点的属性值都标注出来的分析树,digit.lexval = 2,L,E.val = 18,T.val = 10,E.val = 8,T.val = 8,F.val = 8,digit.lexval = 8,T.val = 5,+,*,F.val = 5,F.val = 2,digit.lexval = 5,例:语句int id,id,id的语义分析。(继承属性),1、int id1, id2, id3的注释分析树,2、int id1, id2, id3的分析树的属性依赖图,对结点进行拓扑排序,按拓扑排序的次序计算属性。 拓扑排序:结点的一种排序,使得边只会从该次序中先出现的结点到后出现的结点。,3、属性计算次序,属性计算次序为1,2,3,4,5,6,7,8,9,10,在上例中,按照拓扑排序可以得到下面的程序 段(用an来代表依赖图中与序号n的结点有关 的属性): 4) a4:=int 5) a5:=a4 6) addtype(id3.entry,a5) 7) a7:=a5 8) addtype(id2.entry,a7) 9) a9:=a7 10) addtype(id1.entry,a9),思考: 如何通过对注释分析树进行树遍历的方 法计算属性值? 最常用的是深度优先、从左到右的遍历 方法。,小结:语法制导翻译的一般过程,语义规则和产生式联系起来: 对翻译给出高级说明 根据属性和计算规则,进行语义分析 输入单词符号串 构造注释分析树 构造属性依赖图,对结点进行拓扑排序 根据语义规则的进行计算和处理,第四节 中间代码的形式,抽象语法树 逆波兰式 三地址代码 (四元式、三元式),语法树是分析树的浓缩表示:算符和关键字是作为内部结点。 语法制导翻译可以基于分析树,也可以基于语法树。 在抽象语法树表示中,每一个叶结点都表示诸如常量或变量这样的运算对象,而其他内部结点则表示运算符。,1、抽象语法树,语法树的例子:,2、逆波兰表示,波兰逻辑学家J.Lukasiewicz于1929年提出的一种表示表达式的方法。按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。 表达式E的后缀表示递归定义如下: (1)如果E是变量或常数,则E的后缀表示即E自身。 (2)如果E为E1 op E2形式,则它的后缀表示为E1E2op;其中E1、E2分别是E1和E2的后缀表示。若op是一元运算符,则视E1和E1为空。 (3)如果E为(E1)形式,则E1的后缀表示即为E的后缀表示。 特点:操作数出现的顺序与原来一致,而运算符则按运算先后的顺序放到相应的操作数之后,即运算符先后的顺序发生了变化,表达式中各个运算是按运算符出现的顺序进行的,故无须使用括号来指示运算顺序。,例: 中缀表示 后缀表示 A+B AB+ A+B*C ABC*+ (A+B)*(C+D) AB+CD+* x/yz-d*e xyz/de*-,程序语句的逆波兰表示略去。,3、三地址代码(四元式和三元式),四元式是一种更接近目标代码的中间代码形式,由于这种形式的中间代码便于优化处理,因此,在目前的许多编译程序中得到了广泛的应用。 四元式是一种“三地址语句”的等价表示。 它的一般形式为:(op,arg1,arg2,result) 其中,op为一个二元(也可是一元或零元)运算符; arg1,arg2分别为它的两个运算对象,它们可以是变量、常数或系统定义的临时变量名;运算的结果将放入result中。四元式还可写为类似于PASCAL语言的赋值语句的形式:result := arg1 op arg2,每个四元式只能有一个运算符,所以,一个复杂的表达式只能由多个四元式构成的序列表示。 例如,表达式A+B*C可写为序列 T1:=B*C T2:=A+T1 当op为一元、零元运算(如无条件转移)时,arg2甚至arg1应缺省,即result:=op arg1或 op result ;对应的一般形式为: (op,arg1,-,result) 或 (op,-,-,result) 。,例 赋值语句a=b*(c+d)相应的四元式代码为: (1) (+,c,d,t1) (2) (*,b,t1,t2) (3) (=,t2,_,a),为了节省临时变量的开销,有时也可采用一种三 元式结构来作为中间代码,其一般形式为: (i) (op,ar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年 消防安全管理员中级考试练习试题附答案
- 2025年中国暖手鼠标垫行业发展运行现状及投资潜力预测报告
- 2025年 河南全科医生特设岗位计划招聘考试笔试试题附答案
- 2025年 赤峰巴林左旗招聘社区工作者考试试题附答案
- 2021-2026年中国多用途车市场供需现状及投资战略研究报告
- 请求批准的请示报告
- 中国挖机行业市场深度分析及投资规划建议报告
- 2025年河北省石家庄市中考历史试卷(含答案)
- 电动车喷漆培训课件
- 醋酸邻氨基对行业深度研究分析报告(2024-2030版)
- 数据一致性保障的方法探讨
- 十八项核心制度培训课件
- 中医养生秋季篇课件
- 《面部美容穴位》课件
- DB32-T 419-2010海蜜二号厚皮甜瓜栽培技术规程
- 《电磁场的边界条》课件
- 2025年福建泉州水务集团招聘笔试参考题库含答案解析
- 中国电信外呼培训
- 利用新媒体技术加强农村科普教育的传播力度
- 剪映专业版教学课件
- 医学装备科管理人员岗位职责工作职责和任务
评论
0/150
提交评论