语义分析和中间代码生成ppt课件.ppt

语义分析和中间代码生成ppt课件.ppt

ID:58654762

大小:772.00 KB

页数:118页

时间:2020-10-05

语义分析和中间代码生成ppt课件.ppt_第1页
语义分析和中间代码生成ppt课件.ppt_第2页
语义分析和中间代码生成ppt课件.ppt_第3页
语义分析和中间代码生成ppt课件.ppt_第4页
语义分析和中间代码生成ppt课件.ppt_第5页
资源描述:

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

1、本章在编译程序中的地位表格管理词法分析器语法分析器语义分析与中间代码产生优化器目标代码生成器源程序单词符号语法单位中间代码中间代码目标代码出错处理6.1概述6.2属性文法6.3几种常见的中间语言(*四元式)6.4表达式及赋值语句的翻译6.5控制语句的翻译6.6数组元素的翻译6.7过程或函数调用语句的翻译*6.8说明语句的翻译内容安排6.1概述6.1.1语义分析的概念一个源程序经过词法分析、语法分析之后,表明该源程序在书写上是正确的,并且符合程序语言所规定的语法。但是语法分析并未对程序内部的逻辑含义加以分析,因此编译程序接下来的工作是语义分析,即审查每个语法成分的静态语义。如果静态语义正确,则生

2、成与该语言成分等效的中间代码,或者直接生成目标代码。直接生成目标代码直接生成机器语言或汇编语言形式的目标代码的优点是编译时间短且无需中间代码到目标代码的翻译。生成中间代码生成中间代码的优点是使编译结构在逻辑上更为简单明确,特别是使目标代码的优化比较容易实现。语义分析时语义检查的分类:动态语义检查需要生成相应的目标代码,它是在运行时进行的;例如:除零溢出错误。静态语义检查在编译时完成的,它涉及以下几个方面:(1)类型检查(2)控制流检查(3)一致性检查各种条件表达式的类型不是布尔类型;运算符的分量类型不相容;赋值语句左右类型不相容;形、实参类型不相容;函数说明和函数返回类型不相容;……intx;

3、floatf();x=f();符合变量声明的语法、语义符合函数声明的语法、语义符合赋值语句的语法、不符合语义(1)类型检查(2)控制流检查用以保证控制语句有合法的转向点。如C语言中不允许goto语句转入case语句流;break语句需寻找包含它的最小switch、while或for语句方可找到转向点,否则出错。(3)一致性检查如在相同作用域中标识符只能说明一次、case语句的标号不能相同、函数调用参数个数要相同等。常见的语义错误声明和使用相关的语义错误标识符没有声明;重复声明;如何检查?每当遇到新声明的标识符,查符号表如果当前有效的所有标识符中有相同名字的,则是重复声明错误;否则生成它的属性信

4、息,保存到符号表中;每当遇到标识符的使用,查符号表如果没有找到,说明该标识符没有声明;否则,得到该标识符的属性,进行进一步分析;语义分析阶段只产生中间代码而不生成目标代码的方法使编译程序的开发变得较为容易,但语义分析不像词法分析和语法分析那样可以分别用正规文法和上下文无关文法描述。由于语义是上下文有关的,因此语义的形式化描述是非常困难的,目前较为常见的是用属性文法作为描述程序语言语义的工具,并采用语法制导翻译的方法完成对语法成分的翻译工作。语法制导翻译的方法就是为每个规则配上一个翻译子程序(称语义动作或语义子程序),并在语法分析的同时执行这些子程序。语义动作是为规则赋予具体意义的手段,它一方面

5、指出了一个规则所产生的符号串的意义,另一方面又按照这种意义规定了生成某种中间代码应做哪些基本动作。在语法分析过程中,当一个规则获得匹配(对于自上而下分析)或用于归约(对于自下而上分析)时,此规则相应的语义子程序就进入工作,完成既定的翻译任务。6.1.2语法制导翻译方法语法制导翻译分为自下而上语法制导翻译和自上而下语法制导翻译,我们重点介绍自下而上语法制导翻译。假定有一个自下而上的LR分析器,我们可以把这个LR分析器的能力加以扩大,使它能在用某个规则进行归约的同时调用相应的语义子程序进行有关的翻译工作;每个规则的语义子程序执行之后,某些结果(语义信息)必须作为此规则的左部符号的语义值暂时保存下来

6、,以便以后语义子程序引用这些信息。此外,原LR分析器的分析栈也加以扩充,以便能够存放与文法符号相对应的语义值。这样,分析栈可以存放三类信息:分析状态、文法符号及文法符号对应的语义值。扩充后的分析栈如图6–1所示。图6–1扩充后的LR分析栈作为一个例子,我们考虑下面的文法及语义动作所执行的程序:规则语义动作(0)S'→Eprintval[TOP](1)E→E(1)+E(2)val[TOP]=val[TOP]+val[TOP+2](2)E→E(1)*E(2)val[TOP]=val[TOP]*val[TOP+2](3)E→(E(1))val[TOP]=val[TOP+1](4)E→ival[TOP

7、]=lexval(注:lexval为i的整型内部值)我们扩充分析栈工作的总控程序功能,使其在完成语法分析的同时也能完成语义分析工作(这时的语法分析栈已成为语义分析栈);即在用某一个规则进行归约之后,调用相应的语义子程序完成与所用规则相应的语义动作,并将每次工作后的语义值保存在扩充后的“语义值”栈中。图6–2表示算术表达式7+9*5#的语法树及各结点值,而表6.1则给出了根据分析表用LR语法制导翻译

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

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

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