第七章语义分析和中间代码生成.doc

第七章语义分析和中间代码生成.doc

ID:58836790

大小:325.00 KB

页数:56页

时间:2020-09-24

第七章语义分析和中间代码生成.doc_第1页
第七章语义分析和中间代码生成.doc_第2页
第七章语义分析和中间代码生成.doc_第3页
第七章语义分析和中间代码生成.doc_第4页
第七章语义分析和中间代码生成.doc_第5页
资源描述:

《第七章语义分析和中间代码生成.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第七章语义分析和中间代码生成知识结构:语义分析语法分析概述语法制导翻译逆波兰式表示三元式表示语义分析和中中间语言图型表示间代码生成四元式表示三地址语句表示赋值语句的翻译布尔表达式的翻译中间代码生成控制语句的翻译说明语句的翻译过程语句的翻译第一节语法制导翻译概述一、语义分析的任务在词法分析和语法分析的基础上进一步分析其含义,主要的工作是进行静态语义检查和翻译。二、语义分析的功能1、类型检查检查运算的合法性(运算对象的一致性)。2、一致性检查一个对象(标识符等)在一个分程序中只能被定义一次。3、相关名字检查如果一个名字必须出现多次,检查使用的名字是否相同的。4、控制流检查控制流语句必须使控制

2、转移到合法的地方。5、确定类型确定标识符所关联得数据类型。6、识别含义确认程序中各种成分组合到一起的含义,并作相应的语义处理,对可执行的语句生成中间语言或目标语言。三、生成的语言1、直接生成目标语言根据源程序中各语法成分的语义,直接生成机器语言或汇编语言。其特点:⑴编译时间较短;⑵存储空间较大;⑶目标语言的质量较差。2、生成中间语言介于源程序语言和机器语言之间的机内表示形式。其特点:⑴编译程序的逻辑结构简单;⑵有利于编译程序的移植;⑶便于目标语言的优化。四、语义分析方法1、语法制导翻译方法在语法分析过程中,使用语法规则进行归约的同时,根据每个产生式的语义动作进行翻译(在语法规则的制导下,

3、通过对语义规则的计算,完成对输入字符串的翻译)的方法。2、属性翻译方法指明语义规则的计算次序,陈述一些实现细节,以表达语义动作在语法分析过程中的执行时刻。五、语义规则为文法中的每一条产生式配置计算属性的计算规则。六、语法制导翻译为文法中每个产生式配备一组语义规则。1、语义规则语义规则计算包括:产生代码、在符号表中存放信息、在分析工作栈中填写语义值(属性值),并生成相应的中间代码。2、自上而下分析用一条产生式与输入符号匹配成功时,执行相应语义子程序生成中间代码。3、自下而上分析用一条产生式进行的归约时,执行相应语义子程序生成中间代码。七、翻译简例表达式文法和相应的翻译模式:(P179)S→

4、id:=E{p:=Lookup(id.name);ifpnilthenemit(p‘:=’E.place)elseerror}E.place为属性值(语义变量),代表存放E值的变量名在符号表的入口地址或指向代表E值的临时变量的整数值。E→E1+E2{E.place:=newtemp;emit(E.place‘:=’E1.place‘+’E2.place)}语法分析工作栈进行扩充,增加相应的语义值,语法分析同时(如归约时),执行语义规则(语义子程序)。例:x:=y+z的语法制导翻译⑴用E→E1+E2归约执行语义规则E2E2.place{E.place:=T1;+-归约后EE.placeem

5、it(T1:=’y‘+’z)}E1E1.place符号语义值生成一条中间代码符号语义值⑵用S→id:=E归约执行语义规则EE.place{p:=Lookup(x);:=-归约后sE.placeemit(x‘:=’T1)}idid.place符号语义值生成一条中间代码。符号语义值这样语法分析结束时也就生成了中间代码:(0)T1:=y+z(1)x:=T1注意:语义工作栈中的值与状态工作栈中的值一一对应,某些符号可能无相应的语义值,如上例“+”,保留语义栈位是用“—”表示。归约时符号和语义值同时退出工作栈,同时进入工作栈。例A→XYZZZ.zYY.y归约后AA.aXX.x符号语义值符号语义值八

6、、语义值(属性)和语义规则(语义子程序)1、语义值代表文法符号的类型、值、符号表地址等语义子程序需要的信息。如E.place(符号表指针)。2、语义规则对语义值(属性)进行计算,或其它加工处理过程。⑴属性文法翻译使用语义规则进行属性值的计算。⑵语法制导翻译给出使用语义规则进行计算的顺序(用{}括号起来)。九、理解语法制导翻译的若干关键问题1、语义值(属性)代表的含义2、语义子程序(语义规则)3、语法制导翻译过程⑴翻译的顺序与语义子程序执行的顺序相关;⑵子程序执行的顺序与应用产生式进行归约的顺序相关;⑶归约的顺序与中间代码的顺序相关;第二节中间语言一、中间语言的表示形式1、后缀式(逆波兰表

7、示)(P167定义)2、图表示法(DAG无环路有向图,抽象语法树)3、三地址代码⑴三地址语句⑵四元式⑶三元式⑷间接三元式二、后缀式(逆波兰表示)1、表达式表示形式⑴中缀形式二目运算的运算符总是置于两个运算对象之间。例:a*(b+c)⑵后缀形式把运算符置于运算对象之后,将中缀式中的算符,按优先级或结合律重新排序。⑶后缀形式表达式E的定义①如果E是一个变量或常量,则E的后缀形式是E自身。②如果E是E1OPE2形式的表达式,这里的OP是任

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

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

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