编译原理语义分析和中间代码

编译原理语义分析和中间代码

ID:46515251

大小:261.34 KB

页数:8页

时间:2019-11-24

编译原理语义分析和中间代码_第1页
编译原理语义分析和中间代码_第2页
编译原理语义分析和中间代码_第3页
编译原理语义分析和中间代码_第4页
编译原理语义分析和中间代码_第5页
资源描述:

《编译原理语义分析和中间代码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第4章语义分析和中间代码生成4.1概述4.2属性文法4.3几种常见的中间语言4.4表达式及赋值语句的翻译4.5控制语句的翻译4.6数组元素的翻译4.7过程或函数调用语句的翻译4.8说明语句的翻译4.9递归下降语法制导翻译方法简介4.1概述4.1.1语义分析的概念源程序经过词法分析、语法分析后,表明该源程序书写正确、符合程序语言所规定的语法,但语法分析并未对程序内部的逻辑含义加以分析,因此编译程序接着进行语义分析,即审查每个语法成分的静态语义。如果静态语义正确,则生成与该语言成分等效的中间代码,或

2、直接生成目标代码。直接生成机器语言或汇编语言形式的目标代码的优点是编译时间短且无需中间代码到目标代码的翻译,而生成中间代码的优点是使编译结构在逻辑上更为简单明确,特别是使目标代码的优化较易实现。语义分析进行的语义检查有两类:动态语义检查和静态语义检查。动态语义检查需生成相应的目标代码,在运行时进行;静态语义检查在编译时进行。静态语义检查涉及以下几个方面:(1)类型检查,如运算操作数的类型应相容。(2)控制流检查,用以保证控制语句有合法的转向点。如C语言中不允许goto语句转入case语句流;br

3、eak语句需寻找包含它的最小switch、while或for语句方可找到转向点。(3)一致性检查,如在相同作用域中标识符只能说明一次、case语句的标号不能相同等。语义分析阶段只产生中间代码而不生成目标代码的方法使编译程序的开发变得较为容易,但由于语义是上下文有关的,因此语义的形式化描述非常困难,目前较常见的是用属性文法作为描述语义的工具,并采用语法制导翻译法完成对语法成分的翻译。4.1.2语法制导翻译法语法制导翻译法就是为每个产生式配上一个翻译子程序(称语义动作),并在语法分析的同时执行这些子

4、程序。语义动作是为产生式赋予具体意义的手段,它一方面指出了一个产生式所产生的符号串的意义,另一方面又按这种意义规定了生成某种中间代码应做哪些基本动作。在语法分析过程中,当一个产生式获得匹配(对自上而下分析)或用于归约(对自下而上分析)时,此产生式相应的语义子程序就进入工作,完成既定的翻译任务。语法制导翻译分为自下而上语法制导翻译和自上而下语法制导翻译,下面重点介绍自下而上语法制导翻译。假定有一个自下而上的LR分析器,可以把这个LR分析器的能力扩大,使它能在用某个产生式进行归约的同时调用相应的语义

5、子程序进行翻译。每个产生式的语义子程序执行后,某些结果(语义信息)必须作为此产生式的左部符号的语义值暂时保存下来,以便以后语义子程序引用这些信息。此外,原LR分析器的分析栈也加以扩充,以便能存放与文法符号相对应的语义值。这样,分析栈可存放三类信息:状态、文法符号及文法符号对应的语义值。扩充后的分析栈如图4–1所示。此外,原LR分析器的分析栈也加以扩充,以便能存放与文法符号相对应的语义值。这样,分析栈可存放三类信息:状态、文法符号及文法符号对应的语义值。扩充后的分析栈如图4–1所示。

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

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

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