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

时间:2022-12-08 03:56:12

语义分析的任务:

审查每一个语法结构的静态语义,即验证语法正确的结构是否有意义

在语义正确的基础上生成一种中间代码或目标代码

语义分析的范围:

确定类型:确定标识符所关联的数据类型

类型检查:按语言的类型规则,检查运算的合法性与运算分量类型的一致性,必要时作类型转换

识别含义:根据语言的语义定义(形式或非形式),识别程序中各构造成分组合到一起的含义,并作相应的语义处理(生成中

间代码或目标代码)

控制流检查:控制流语句必须转移到合法的地方。如C中,break语句规定跳出最内层的循环或switch语句

一致性检查:在很多场合要求对象只能被说明一次。如:pascal语言规定同一个标识符在一个分程序中只能被说明一次等

相关名字检查:如:Ada,循环或块可以有一个名字,它出现在这些结构的开头或结尾。编译程序必须检查这两个地方用的名

字是否相同

其它:如名字的作用域分析等也是语义分析的工作

中间语言:

逆波兰表示法:后缀式

图表示法:抽象语法树

三元式:算符 第一运算分量 第二运算分量

四元式:算符 第一运算分量 第二运算分量 结果

翻译: