1,基本概念 

翻译为中间语言的好处:

  • 便于进行与机器无关的代码优化;
  • 使编译程序改变目标机更容易;易于编译器的移植
  • 使编译程序的结构在逻辑上更为简单明确,以中间语言为界面,编译前端和后端的接口更清晰。

中间语言的形式:后缀式,图表示法,三元式。

编译过程中不同语言的翻译或处理方法:说明语句的翻译,赋值语句的翻译,布尔表达式的翻译,控制语句的翻译。

中间语言的形式:

  • 逆波兰表示:后缀式
  • 图表示法:DAG和AST
  • 三地址代码:四元式,三元式,间接三元式

2,后缀式

后缀式:把操作数写在前面,把算符写在后面。

3,图表示法

图表示法包括DAG(有向无环图)AST(抽象语法树)

  • 相同点:对于表达式中的每个子表达式,图中都有一个结点。一个内部结点代表一个操作符,它的孩子代表操作数
  • 不同点:DAG图中代表公共子表达式的结点具有多个父结点,而在一棵抽象语法树中公共子表达式被表示为重复的子树。        

前序遍历:前缀式;中序遍历:中缀式;后序遍历:后缀式;

4,三地址码

三元式

【三元式】三地址码是由下面一般形式的语句构成的序列:x:=y op z

每条语句通常包含三个地址:两个操作数地址和一个操作结果地址

四元式

间接三元式

5,语义分析中各种语句的处理

说明语句的翻译

  • 声明语句的处理方式:不生成可执行代码,只涉及符号表的操作。
  • 声明语句的处理:对每个局部名字,在符号表中建立相应的表项,填写有关的信息(类型,嵌套深度,相对地址等)。
  • 相对地址:相对静态数据区基址或活动记录中局部数据区基址的一个偏移值。

赋值语句的翻译

布尔表达式的翻译

布尔表达式: 用布尔运算符号andornot作用到布尔变量或关系表达式上而组成。

控制语句的翻译

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐