27语义分析和中间代码产生 ●本节要点 中间表示(后缀式、三地址代码和DAG图) ●语言中常见结构的翻译 ●赋值语句 ●声明语句 ●数组引用 ●布尔表达式 ●控制语句
2.7 语义分析和中间代码产生 本节要点 ⚫ 中间表示(后缀式、三地址代码和DAG图) ⚫ 语言中常见结构的翻译 ⚫ 赋值语句 ⚫ 声明语句 ⚫ 数组引用 ⚫ 布尔表达式 ⚫ 控制语句
27语义分析和中间代码产生 ●静态语义检查 ●类型检查 控制流检查 致性检查 ●相关名字检查 名字的作用域分析 法分 静态检 析器 查器 中间代码中间代码优化器 产生器
2.7 语义分析和中间代码产生 静态语义检查 ⚫ 类型检查 ⚫ 控制流检查 ⚫ 一致性检查 ⚫ 相关名字检查 ⚫ 名字的作用域分析 语法分 析器 中间代码 产生器 静态检 查器 中间代码优化器
●中间语言(复杂性界于源语言和目标语 言之间)的好处: 便于进行与机器无关的代码优化工作 ●易于移植 使编译程序的结构在逻辑上更为简单明确 Compiler Compiler 源语言 Front End 中间语BakE叫d目标语 程序 言程序 言程序
中间语言(复杂性界于源语言和目标语 言之间)的好处: ⚫ 便于进行与机器无关的代码优化工作 ⚫ 易于移植 ⚫ 使编译程序的结构在逻辑上更为简单明确 源语言 程序 目标语 言程序 中间语 言程序 Compiler Front End Compiler Back End
271中间语言 常用的中间语 ●后缀式(逆波兰表示) 三地址代码 三元式 ●四元式 ●问接三元式 ●DAG图表示
常用的中间语言: ⚫ 后缀式(逆波兰表示) ⚫ 三地址代码 ⚫ 三元式 ⚫ 四元式 ⚫ 间接三元式 ⚫ DAG图表示 2.7.1 中间语言
后缀式 后缓式表示法: Lukasiewicz发明的一种表示 表达式的方法,又称逆兰表示法 个表达式E的后缀形式可以如下定义 1.如果E是一个变量或常量,则E的后缀式是E自身。 2.如果E是E1opE2形式的表达式,其中op是任何二 元操作符,则E的后缀式为EE2'op,其中E1和 E2′分别为E1和E2的后缀式。 3如果E是(E形式的表达式,则E1的后缀式就是E 的后缀式
2.7.1.1 后缀式 后缀式表示法:Lukasiewicz发明的一种表示 表达式的方法,又称逆波兰表示法。 一个表达式E的后缀形式可以如下定义: 1. 如果E是一个变量或常量,则E的后缀式是E自身。 2. 如果E是E1 op E2形式的表达式,其中op是任何二 元操作符,则E的后缀式为E1 E2 op,其中E1 和 E2 分别为E1 和E2的后缀式。 3. 如果E是(E1 )形式的表达式,则E1 的后缀式就是E 的后缀式