布尔表达式的语法及语义分析程序_编译原理学习笔记(六):语义分析和中间代码生成…

布尔表达式的语法及语义分析程序_编译原理学习笔记(六):语义分析和中间代码生成…语义分析和中间代码生成一、中间语言1.1概述「特点」独立于机器复杂性界于源语言和目标语言之间「优点」使编译程序的结构在逻辑上更为简单明确便于进行与机器无关的代码优化工作易于移植「常用的中间语言」

语义分析和中间代码生成

一、中间语言

1.1 概述

「特点」

  • 独立于机器
  • 复杂性界于源语言和目标语言之间

「优点」

  • 使编译程序的结构在逻辑上更为简单明确
  • 便于进行与机器无关的代码优化工作
  • 易于移植
9b9e96f18bacf53d5a5af71022345a48.png

「常用的中间语言」

  • 后缀式:逆波兰表示
  • 图表示:抽象语法树(AST)、有向无环图(DAG)
  • 三地址代码:四元式、三元式、间接三元式

1.2 后缀式

1.2.1 定义

1c5695e306228cc438a9e666dfe56d95.png

1.2.2 计算方式

d754fd8619115d04faf9574d4a2411f7.png

1.2.3 表达式 => 后缀式

  • 表达式 => 后缀式的属性文法
a3a544b375c65cb79aef5d54da718976.png
  • 中缀表达式 => 后缀式
9f1ea9a1d2c5fb996522581459a1ff82.png

1.3 图表示法

1.3.1 有向无环图

  • 对表达式中的每个子表达式,DAG中都有一个结点
  • 一个内部结点代表一个操作符,它的孩子代表操作数
  • 在一个 DAG 中代表公共子表达式的结点具有多个父节点

1.3.2 举例

f2c8fc9494d58a6f7954d3170be57431.png

1.4 三地址代码

1.4.1 概述

  • 「形式」
    equation?tex=x%3A%3Dy%5C+op+%5C+z
  • 「理解」三地址代码可以看成是抽象语法树或有向无环图的一种线性表示
  • 「抽象语法树 vs. 三地址代码」
44ce1eafba58a3235ababd1461fcd94b.png
  • 「有向无环图 vs. 三地址代码」
cf8b8ad5084acd5dec95a8bceb072da9.png
  • 「三地址语句的种类」
eec2384400c1f1f8d6868df5660a3ece.png

1.4.2 四元式

0ad1ea2bf227d777732acb05999206f7.png

1.4.3 三元式

在四元式基础上优化,用编号代表结果。

575b1e8327b7e2ae21d4d30797e55bcf.png

0983072e254613ef2870273c3a78923c.png

1.4.4 间接三元式

在三元式的基础上再度优化,使得式子发生变化时,可变性更强。

  • 「定义」间接三元式 = 三元式表 + 间接码表
    • 间接码表:一张指示器表,按运算的先后次序列出有关三元式在三元式表中的位置
  • 「优点」方便优化,节省空间
3d6e120eba4fce499058c895d821a341.png

二、赋值语句的翻译

2.1 赋值语句的属性文法

2.1.1 概述

  • 「赋值语句形式」
    equation?tex=id%3A%3DE
  • 「赋值语句意义」
    • 对表达式 E 求值并置于变量 T 中
    • equation?tex=id.place%3A%3DT
  • 「赋值语句 => 三地址代码的 S-属性文法」
060a9f230222063bbd59a36e3ed6d881.png

2.1.2 语义规则

  • 赋值语句生成三地址代码的 S-属性文法
  • equation?tex=gen%28%29 函数用于生成语句的三地址代码
1270d03b105dd00722b2eb0a17aafe1a.png

2.2 赋值语句的翻译模式

  • 产生赋值语句三地址代码的翻译模式
612321d206dc8a7bef94ead1a3de9e7a.png

79eae03f73d365e4d9c34ed51737e1a6.png

f16902baca4723a36cf3d38e1c728e8b.png

三、数组元素引用的翻译

3.1 数组元素地址计算

3.1.1 计算公式

  • equation?tex=A
    equation?tex=n 维数组,按行存放,每个元素宽度为
    equation?tex=w
    • equation?tex=low_i 为第
      equation?tex=i 维的下界
    • equation?tex=up_i 为第
      equation?tex=i 维的上界

今天的文章布尔表达式的语法及语义分析程序_编译原理学习笔记(六):语义分析和中间代码生成…分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/65042.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注