欢迎来到天天文库
浏览记录
ID:44996827
大小:511.50 KB
页数:51页
时间:2019-11-07
《语义分析和语法制导翻译》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第六章语义分析和语法制导翻译语义分析的任务:检查语义错误类型检查:运算数类型一致性检查:名字声明与引用控制流检查:转移目标名字检查:作用域翻译的任务:建立等价的目标程序生成中间语言的指令序列名字绑定:变量名、过程名建立运行环境6.1属性文法语义分析与语法制导翻译的描述方法属性文法的定义:A=(G,V,F)G是上下文无关文法V属性的有穷集F关于属性的断言和谓词用法针对语义,为文法符号设置属性终结符使用单词的属性为每个产生式设置语义规则通过描述各属性的关系将语义分析和翻译步骤定义为产生式的断言和谓词例6-1:计算器的算法设计需求:算术表达式的求值设计:编制算术表达式的文法引入属性表示语义信息
2、将值val作为表达式E、项T和因子F的属性用语义规则描述表达式的求值属性文法(语法制导定义)attr是单词digit的属性print(val)是输出函数产生式语义规则L→Eprint(E.val)E→E1+TE.val:=E1.val+T.valE→TE.val:=T.valT→T1*FT.val:=T1.val*F.valT→FT.val:=F.valF→(E)F.val:=E.valF→digitF.val:=digit.attr例6-2:说明语句的类型信息统计说明语句的作用支持语义分析,提供语义检查的依据设计编写说明语句的文法将类型信息作为类型描述T的属性type和变量表L的属性i
3、n。目的分析说明语句D,获取变量的类型信息描述类型信息提取的属性文法entry单词id的属性(符号表入口)addtype在符号表中为变量填加类型信息产生式语义规则D→TLL.in:=T.typeT→intT.type:=‘integer’T→realT.type:=‘real’L→L1,idL1.in:=L.inaddtype(id.entry,L.in)L→idaddtype(id.entry,L.in)属性文法的作用抽象描述语义处理的要求语义信息及其计算关系适用于各种语义处理(分析、翻译、计算)语义处理的步骤属性求值计算、断言检查语义处理算法的描述方法一种通用的语义处理算法设计方法属
4、性分类:综合属性从其子结点的属性值计算出来的;如:E.val、T.type继承属性从其兄弟结点和父结点的属性值计算出来的如:L.in固有属性(单词属性)属性的计算构造语法分析树,填加响应的语义规则综合属性自底向上按照语义规则来计算各结点的综合属性值继承属性需要探讨计算次序例6-3:3*5+4的语法树与属性计算例6-4:realid1,id2,id3的分析树和属性计算addtypeaddtypeaddtype仅包括综合属性对于所有A→X1X2…Xn,A的属性计算仅用X1…Xn的属性如:算术表达式求值的属性文法S-属性定义:L-属性定义:其属性可用深度优先的顺序从左至右计算对于所有A→X1
5、X2…XnXi属性计算仅使用AX1X2…Xi-1的属性如:说明语句的属性文法翻译模式(TranslationSchemes)特征规定在语法分析中使用语义规则进行计算的次序保证当动作使用某属性时,该属性必须是可用的实现方法将语义动作插入到产生式中的某个位置例6-5:建立说明语句的翻译方案产生式语义规则D→TLL.in:=T.typeT→intT.type:=‘integer’T→realT.type:=‘real’L→L1,idL1.in:=L.inaddtype(id.entry,L.in)L→idaddtype(id.entry,L.in)将语义动作中的计算向前移,使继承属性的计算出
6、现在其文法符号之前翻译模式的设计D→T{L.in:=T.type}LT→int{T.type:=integer}T→real{T.type:=real}L→{L1.in:=L.in}L1,id{addtype(id.entry,L.in)}L→id{addtype(id.entry,L.in)}习题1.下列文法是一个二进制数的文法。试根据该文法,编写一个语法制导定义,描述由S生成的二进制数的数值计算。S->L.LL->LB
7、BB->0
8、12.参照下列表达式文法编写语法制导定义,描述表达式的类型计算。要求在不同精度的数的计算中,结果取精度高的类型。E->E+T
9、TT->n.n
10、n6.2中间
11、语言用于编译程序源程序经过语义分析被译成中间代码序列(中间语言的语句)用中间语言过渡的好处:便于编译系统的实现、移植、代码优化常用的中间语言三地址代码(四元式)语法结构树(三元式)后缀式特点形式简单、语义明确、便于翻译独立于目标语言语法制导编译描述方法利用属性文法描述如何将各种语句和表达式翻译成中间代码工作方式分析与综合并行进行每识别出一个语言结构时,完成相应的语义检查与中间代码生成语法结构树例6-5:表达式(A-12)*B+6的语
此文档下载收益归作者所有