语义分析和中间代码生成
一、中间语言
1.1 概述
「特点」
- 独立于机器
- 复杂性界于源语言和目标语言之间
「优点」
- 使编译程序的结构在逻辑上更为简单明确
- 便于进行与机器无关的代码优化工作
- 易于移植
「常用的中间语言」
- 后缀式:逆波兰表示
- 图表示:抽象语法树(AST)、有向无环图(DAG)
- 三地址代码:四元式、三元式、间接三元式
1.2 后缀式
1.2.1 定义
1.2.2 计算方式
1.2.3 表达式 => 后缀式
- 表达式 => 后缀式的属性文法
- 中缀表达式 => 后缀式
1.3 图表示法
1.3.1 有向无环图
- 对表达式中的每个子表达式,DAG中都有一个结点
- 一个内部结点代表一个操作符,它的孩子代表操作数
- 在一个 DAG 中代表公共子表达式的结点具有多个父节点
1.3.2 举例
1.4 三地址代码
1.4.1 概述
- 「形式」
- 「理解」三地址代码可以看成是抽象语法树或有向无环图的一种线性表示
- 「抽象语法树 vs. 三地址代码」
- 「有向无环图 vs. 三地址代码」
- 「三地址语句的种类」
1.4.2 四元式
1.4.3 三元式
在四元式基础上优化,用编号代表结果。
1.4.4 间接三元式
在三元式的基础上再度优化,使得式子发生变化时,可变性更强。
- 「定义」间接三元式 = 三元式表 + 间接码表
- 间接码表:一张指示器表,按运算的先后次序列出有关三元式在三元式表中的位置
- 「优点」方便优化,节省空间
二、赋值语句的翻译
2.1 赋值语句的属性文法
2.1.1 概述
- 「赋值语句形式」
- 「赋值语句意义」
- 对表达式 E 求值并置于变量 T 中
-
- 「赋值语句 => 三地址代码的 S-属性文法」
2.1.2 语义规则
- 赋值语句生成三地址代码的 S-属性文法
-
函数用于生成语句的三地址代码
2.2 赋值语句的翻译模式
- 产生赋值语句三地址代码的翻译模式
三、数组元素引用的翻译
3.1 数组元素地址计算
3.1.1 计算公式
- 设
为维数组,按行存放,每个元素宽度为
-
为第维的下界
-
为第维的上界
-
-
今天的文章布尔表达式的语法及语义分析程序_编译原理学习笔记(六):语义分析和中间代码生成…分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/65042.html