欢迎来到天天文库
浏览记录
ID:23293661
大小:388.00 KB
页数:56页
时间:2018-11-06
《[高等教育]第七章语义分析和中间代码生成》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、编译原理第七章语义分析和中间代码生成第七章语义分析和中间代码生成知识结构:语义分析语法分析概述语法制导翻译逆波兰式表示三元式表示语义分析和中中间语言图型表示间代码生成四元式表示三地址语句表示赋值语句的翻译布尔表达式的翻译中间代码生成控制语句的翻译说明语句的翻译过程语句的翻译第一节语法制导翻译概述一、语义分析的任务在词法分析和语法分析的基础上进一步分析其含义,主要的工作是进行静态语义检查和翻译。二、语义分析的功能1、类型检查检查运算的合法性(运算对象的一致性)。制作人:李明新共56页第56页21-7-5编译原理第七章语义分析和中间代码生成2、一致性检查一个对象(标识符等)
2、在一个分程序中只能被定义一次。3、相关名字检查如果一个名字必须出现多次,检查使用的名字是否相同的。4、控制流检查控制流语句必须使控制转移到合法的地方。5、确定类型确定标识符所关联得数据类型。6、识别含义确认程序中各种成分组合到一起的含义,并作相应的语义处理,对可执行的语句生成中间语言或目标语言。三、生成的语言1、直接生成目标语言根据源程序中各语法成分的语义,直接生成机器语言或汇编语言。其特点:⑴编译时间较短;⑵存储空间较大;⑶目标语言的质量较差。2、生成中间语言介于源程序语言和机器语言之间的机内表示形式。其特点:⑴编译程序的逻辑结构简单;⑵有利于编译程序的移植;制作人:
3、李明新共56页第56页21-7-5编译原理第七章语义分析和中间代码生成⑶便于目标语言的优化。四、语义分析方法1、语法制导翻译方法在语法分析过程中,使用语法规则进行归约的同时,根据每个产生式的语义动作进行翻译(在语法规则的制导下,通过对语义规则的计算,完成对输入字符串的翻译)的方法。2、属性翻译方法指明语义规则的计算次序,陈述一些实现细节,以表达语义动作在语法分析过程中的执行时刻。五、语义规则为文法中的每一条产生式配置计算属性的计算规则。六、语法制导翻译为文法中每个产生式配备一组语义规则。1、语义规则语义规则计算包括:产生代码、在符号表中存放信息、在分析工作栈中填写语义值
4、(属性值),并生成相应的中间代码。2、自上而下分析用一条产生式与输入符号匹配成功时,执行相应语义子程序生成中间代码。3、自下而上分析用一条产生式进行的归约时,执行相应语义子程序生成中间代码。制作人:李明新共56页第56页21-7-5编译原理第七章语义分析和中间代码生成七、翻译简例表达式文法和相应的翻译模式:(P179)S→id:=E{p:=Lookup(id.name);ifpnilthenemit(p‘:=’E.place)elseerror}E.place为属性值(语义变量),代表存放E值的变量名在符号表的入口地址或指向代表E值的临时变量的整数值。E→E1+E2{E
5、.place:=newtemp;emit(E.place‘:=’E1.place‘+’E2.place)}语法分析工作栈进行扩充,增加相应的语义值,语法分析同时(如归约时),执行语义规则(语义子程序)。例:x:=y+z的语法制导翻译⑴用E→E1+E2归约执行语义规则E2E2.place{E.place:=T1;+-归约后EE.placeemit(T1:=’y‘+’z)}E1E1.place符号语义值生成一条中间代码符号语义值⑵用S→id:=E归约执行语义规则EE.place{p:=Lookup(x);:=-归约后sE.placeemit(x‘:=’T1)}idid.pl
6、ace符号语义值生成一条中间代码。制作人:李明新共56页第56页21-7-5编译原理第七章语义分析和中间代码生成符号语义值这样语法分析结束时也就生成了中间代码:(0)T1:=y+z(1)x:=T1注意:语义工作栈中的值与状态工作栈中的值一一对应,某些符号可能无相应的语义值,如上例“+”,保留语义栈位是用“—”表示。归约时符号和语义值同时退出工作栈,同时进入工作栈。例A→XYZZZ.zYY.y归约后AA.aXX.x符号语义值符号语义值八、语义值(属性)和语义规则(语义子程序)1、语义值代表文法符号的类型、值、符号表地址等语义子程序需要的信息。如E.place(符号表指针)
7、。2、语义规则对语义值(属性)进行计算,或其它加工处理过程。⑴属性文法翻译使用语义规则进行属性值的计算。⑵语法制导翻译给出使用语义规则进行计算的顺序(用{}括号起来)。九、理解语法制导翻译的若干关键问题制作人:李明新共56页第56页21-7-5编译原理第七章语义分析和中间代码生成1、语义值(属性)代表的含义2、语义子程序(语义规则)3、语法制导翻译过程⑴翻译的顺序与语义子程序执行的顺序相关;⑵子程序执行的顺序与应用产生式进行归约的顺序相关;⑶归约的顺序与中间代码的顺序相关;第二节中间语言一、中间语言的表示形式1、后缀式(逆波兰表示)(P1
此文档下载收益归作者所有