编译原理:引论

编译/翻译/解释

翻译程序:把某一种语言程序等价地转换成另一种语言程序的程序

编译程序:一种翻译程序。将高级语言翻译为低级语言

  • 诊断编译程序
  • 优化编译程序
  • 交叉编译程序
  • 可变目标编译程序

解释程序:把源语言写的源程序作为输入,不产生目标程序,而是边解释边执行。

编译过程

  1. 词法分析:识别单词

    原则:构词规则(词法规则)

    描述工具:有限自动机

  2. 语法分析:分析语法结构

    原则:语法规则

    描述工具:上下文无关文法

  3. 中间代码产生:对句子的含义初步翻译

    原则:语义规则

    描述工具:属性文法

    中间代码:三元式、四元式、树…

  4. 优化:修饰,产生更高效的目标代码

    原则:程序的等价变换规则

  5. 目标代码生成:得到结果

    原则:依赖硬件系统结构和机器指令的含义

    三种形式:汇编语言、绝对指令、可重定位指令代码(需要链接)

编译程序的结构

  • 词法分析器 → 单词符号
  • 语法分析器 → 语法单位
  • 语义分析与中间代码生成器 → 中间代码
  • 优化段 → 中间代码
  • 目标代码生成器 → 目标程序
  • 符号表管理
  • 出错处理

出错处理

发现错误、报告给用户

  • 语法错误:不符合语法/词法规则的错误
  • 语义错误:不符合语义规则的错误

前端与后端

前端:与源代码相关,如词法分析、语法分析、语义分析、中间代码生成以及与机器无关的优化

后端:与目标机器有关,与机器有关的优化,目标代码的生成

编译程序的生成

  • 使用汇编/机器语言为工具
  • 使用高级语言作为工具
image-20220103150007656

移植

把一种机器上的编译程序移植到另一种机器