编译原理学习笔记

       一个好的编译器是自成天地的,包含了整个计算机科学的一个映像。编译器实际运用了贪心算法(寄存器分配)/启发式搜索技术(表调度)/图算法(死代码消除)/动态规划(指令选择)/有线自动机和下推自动机(词法分析和语法分析)以及不动点算法(数据流分析)。它处理诸如动态分配/同步/命名/局部性/分级存储结构管理和流水线调度等问题。

       编译器是成功将理论应用到实际问题的范例。自动产生词法分析器和语法分析其的工具应用了形式语言理论的结果。这些工具同样可用于文本搜索/网站过滤/文字处理和命令行语言解释器。类型检查和静态分析应用了格理论/数论和其他数学分析的结果,以理解并改进程序。代码生成器使用了树模式匹配/语法分析/动态规划和文本匹配的算法,来自动化指令选择的过程。

       构建成功的编译器需要精通算法/工程和计划。好的编译器会对困难问题近似求解,它们强调效率,无论是自身的视线还是生成的代码。它们的内部数据结构和知识表示暴露的细节不多不少,既足够进行强有力的优化,又不会使编译器沉湎于细节。编译器构建汇集了计算机科学领域中的思想和技术,将其应用到受限的环境下,以解决某些真正困难的问题。

1. 单盒模型指出,编译器必须理解输入源程序并将其功能映射到目标机。

编译原理学习笔记_第1张图片

      前端专注于理解源语言程序。后端专注于将程序映射到目标机。对于编译器的设计和实现,这种关注点的分离隐含着几个重要结论。

2. 三阶段编译器,表示了经典的优化编译器

编译原理学习笔记_第2张图片

      编译器的中间部分称为优化器,负责分析并转换IR,以改进IR。 详细结构如下图:

编译原理学习笔记_第3张图片

      前端的工作涉及理解源程序并将其分析结果以IR形式记录下来;

      优化器部分专注于改进IR形式;

      后端必须将转换过的IR程序映射到目标机的有限资源上,从而能够有效利用那些资源。

你可能感兴趣的:(编译原理学习笔记)