个性化阅读
专注于IT技术分析

编译器设计

编译器设计教程目录

半瓶木阅读(20)评论(0)赞(0)

编译器设计入门介绍 编译器简介 编译阶段 编译器通过 编译器引导程序Bootstrap 有限状态机 正则表达式 DFA的优化 Lex词法分析器 形式语法 BNF符号和编译器 YACC语法生成解析器 上下文无关文法 CFG的功能 推导规则 解...

代码生成器详解

半瓶木阅读(19)评论(0)赞(0)

本文概述 注册和地址描述符 代码生成算法 代码生成器用于生成三地址语句的目标代码。它使用寄存器存储三个地址语句的操作数。 例: 考虑三个地址语句x:= y + z。它可以具有以下代码序列: 注册和地址描述符 寄存器描述符包含每个寄存器中当前...

全局数据流分析

半瓶木阅读(16)评论(0)赞(0)

为了有效地优化代码, 编译器会收集有关程序的所有信息, 并将此信息分发到流程图的每个块。此过程称为数据流图分析。 某些优化只能通过检查整个程序来实现。仅检查程序的一部分是无法实现的。 对于这种优化, 用户定义的链接是一个特定的问题。 在这里...

基本块的DAG表示

半瓶木阅读(16)评论(0)赞(0)

本文概述 DAG的构建算法 方法 基本块的DAG是有向无环图, 在节点上带有以下标签: 图的叶子由唯一标识符标记, 该标识符可以是变量名或常量。 图的内部节点由运算符标记。 还为节点提供了一系列标识符, 以供标签存储计算值。 DAG是一种数...

循环优化

半瓶木阅读(17)评论(0)赞(0)

本文概述 1.代码运动 2.感应变量消除 3.强度降低 循环优化是最有价值的与机器无关的优化, 因为程序的内部循环占用了程序员大量的时间。 如果我们减少一个内部循环中的指令数量, 那么即使我们增加该循环之外的代码量, 也可以改善程序的运行时...

与机器无关的优化

半瓶木阅读(20)评论(0)赞(0)

机器无关的优化尝试改进中间代码以获得更好的目标代码。此处转换的代码部分不涉及任何绝对内存位置或任何CPU寄存器。 中间代码生成的过程引入了很多低效率的问题, 例如:使用变量而不是常量, 额外的变量副本, 重复计算表达式。通过代码优化, 你可...

基本块的优化

半瓶木阅读(20)评论(0)赞(0)

本文概述 1.保留结构的转换 2.代数变换 优化过程可以应用于基本块。在优化时, 我们不需要更改由该块计算的表达式集。 基本块优化有两种类型。这些如下: 保留结构的转换 代数变换 1.保留结构的转换 基本块上的主要保留结构转换如下: 常见子...

流程图-srcmini

流程图

半瓶木阅读(23)评论(0)赞(0)

流程图是有向图。它包含基本块集的控制信息流。 控制流程图用于描述如何在各个块之间解析程序控制。在循环优化中很有用。 矢量点积的流程图如下: 块B1是初始节点。块B2紧随B1之后, 因此从B2到B1有一条边。 从B1的最后一条语句跳转的目标是...

构建基本块

半瓶木阅读(18)评论(0)赞(0)

基本块包含一个语句序列。控制流从语句的开始进入, 而在结束时离开而没有任何停止(可能是该块的最后一条指令除外)。 以下三个地址语句序列构成一个基本块: 基本块构建 算法:划分为基本块 输入:它包含三个地址语句的序列 输出:它包含一个基本块列...

运行时存储管理

半瓶木阅读(15)评论(0)赞(0)

本文概述 静态分配 堆栈分配 在执行过程中所需的信息保存在称为激活记录的存储块中。激活记录包括存储过程本地名称的信息。 我们可以使用以下方式在目标代码中描述地址: 静态分配 堆栈分配 在静态分配中, 激活记录的位置在编译时固定在内存中。 在...