美文网首页
编译原理——中间代码的生成

编译原理——中间代码的生成

作者: 牛程程 | 来源:发表于2017-09-24 23:31 被阅读0次

1、选择中间表示:通常来说,中间表示是图形符号和三地址代码的组合。在语法树中,图形符号中的节点表示一个结构;节点的子代表它的子结构。三地址的名称来自x - y op z格式指令,并且每个指令最多有一个运算符。
2、翻译表达式:通过把动作加到E - > E \ op E2格式的每个产生式中,具有创建操作功能的表达式可以解除单个操作的顺序。该操作或者为E创建一个节点,节点为E \和E2作为子节点,或者生成一个三地址指令,将操作应用于E \和E2的地址,并将结果放入一个新的临时名称,这将成为E.的地址
3、检查类型:表达式E \ op E2的类型由op和E \和E2的类型决定。强制是隐式类型转换,例如从整数到浮点数。中间代码包含特殊类型转换,以确保操作数类型与操作预期类型之间的精确匹配。
4、使用符号表来实现声明:一个声明指定一个名称的类型。类型的宽度是该类型名称需要的存储量。使用宽度,在运行时,名称的相对地址可以计算为从数据区域开始的偏移量。名称的类型和相对地址通过声明被放入符号表中,因此当名称出现在表达式中时,翻译器可以随后获取它们。
5、生成Bool表达式的跳转代码:在短路或跳转代码中,Bool表达式的值隐含在代码所能运行到的位置。跳转代码是有用的,因为通常的情况下,Bool表达式B用于控制流程,如if(B)。布尔值可以通过跳转到t = true或t = false来计算,其中t是临时名称。使用跳转标签,布尔表达式可以通过继承与它的真和假出口相对应的标签来转换。常数true和false分别转换成true和false的退出。
6、使用控制流实现语句:语句可以通过继承下一个标签进行转换,其中下一个标记在这条语句的代码之后的第一条指令。可以通过加一个标记Si代码开头的新标签来转换条件S - > if(B)Si,并分别传递新标签和S.next的真假出口。
7、使用反向回传:回传是一种在一次遍历中生成Bool表达式和语句代码的技术。这个目的是维护不完整跳转的列表,其中列表中的所有跳转指令都具有相同的目标。当目标已知时,其列表上的所有指令都将通过填写目标完成。
8、实现记录:记录或类中的字段名称可以被看作一系列声明。记录类型对字段的类型和相对地址进行编码。符号表就是实现这个功能的。

相关文章

  • 编译原理——中间代码的生成

    1、选择中间表示:通常来说,中间表示是图形符号和三地址代码的组合。在语法树中,图形符号中的节点表示一个结构;节点的...

  • 2018-09-07

    编译原理 Ch1 概念 编译程序 编译程序由八部分组成: 词法分析程序 语法分析程序 语义分析程序 中间代码生成程...

  • 编译器前端和后端

    编译器粗略分为词法分析,语法分析,类型检查,中间代码生成,代码优化,目标代码生成,目标代码优化。把中间代码生成及之...

  • 编译原理概述

    编译器原理 词法分析器 语法分析器 语义分析器 中间代码生成 符号表 独立机器的代码优化器 代码生成器 依赖于机器...

  • 第一章绪论

    编译过程和编译程序结构 五个阶段: 词法分析 语法分析 语义分析和中间代码生成 优化 目标代码生成 编译程序的开发...

  • 程序设计语言与语言处理程序基础

    编译过程 分为解释型和编译型 编译型过程为 源程序=>词法分析=>语法分析=>语义分析=>中间代码生成=>...

  • 编译原理系列之九 中间代码生成

    中间代码生成 中间代码也与机器无关。 常见中间表示形式:逆波兰式:逆波兰式中缀表达式转逆波兰式:按照算术表达式的计...

  • iOS 应用程序加载

    编译过程 前段 预处理编译阶段:宏的替换,头文件的导入 编译阶段:进行词法、语法等的分析和检查,然后生成中间代码I...

  • Flutter 前端编译器编译流程分析

    1. 前端编译器和后端编译器的区别 编译流程粗略分为词法分析、语法分析、类型检查、中间代码生成、代码优化、目标代码...

  • 程序设计语言|高级语言源程序的编译过程

    高级语言源程序的编译过程通常分为:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成。 1.词法分...

网友评论

      本文标题:编译原理——中间代码的生成

      本文链接:https://www.haomeiwen.com/subject/jtglextx.html