编译原理学习笔记16——语义分析和中间代码生成1
- 16.1 中间语言
- 16.2 常用的中间语言形式
16.1 中间语言
中间语言的特点和作用
- 特点
- 独立于机器
- 复杂性界于源语言和目标语言之间
- 引入中间语言的优点
- 使编译程序的结构在逻辑上更为简单明确
- 便于进行与机器无关的代码优化工作
- 易于移植
常用的中间语言
- 后缀式,逆波兰表示
- 图表示: 抽象语法树(AST)、有向无环图(DAG)
- 三地址代码 视频区域
- 三元式
- 四元式
- 间接三元式
16.2 常用的中间语言形式
后缀式
- 后缀式表示法不用括号
- 只要知道每个算符的目数,对于后缀式,不论从哪 一端进行扫描,都能对它进行无歧义地分解。
- 后缀式的计算
- 用一个栈实现
- 自左至右扫描后缀式,每碰到运算量就把它推进栈。 每碰到k目运算符就把它作用于栈顶的k个项,并用 运算结果代替这k个项。
将表达式翻译成后缀式的属性文法
中缀表达式翻译成后缀式的翻译模式
图表示法
- 抽象语法树(AST)
- 有向无环图(DAG)
有向无环图(DAG)
- 有向无环图(Directed Acyclic Graph,简称 DAG)
- 对表达式中的每个子表达式,DAG中都有一个结点
- 一个内部结点代表一个操作符,它的孩子代表操作 视频区域 数
- 在一个DAG中代表公共子表达式的结点具有多个父 结点
抽象语法树 vs. 有向无环图
赋值语句翻译成抽象语法树的属性文法
三地址代码
抽象语法树 vs. 三地址代码
有向无环图 vs. 三地址代码
三地址语句的种类
三地址语句——四元式
三地址语句——三元式
三地址语句——间接三元式