编译原理(一):介绍

第一章 介绍

1.1 什么是编译程序

​ 从基本功能来看,编译程序是一种翻译程序。

​ 假设A为源语言,B为目标语言,编译程序就是将语言A的程序翻译成语言B的程序

  • 编译程序是较为复杂的翻译程序

    • 需要对源程序进行分析,识别源程序的语法结构信息,理解源程序的语义信息,反馈相应的出错信息
  • 编译程序通常是从较高级语言的程序翻译至较低级的语言的程序

    C 代码 --> 汇编代码

  • 源语言通常为高级语言,目标语言通常为机器级语言或较低的虚拟机语言

  • 编译语言的主要泛型

    • 命令式语言:C,C++,java
    • 面向对象语言:java,C++
    • 陈述式语言:函数式,逻辑型
    • 并发语言:java,Pascal
    • 其他:同步语言,脚本语言
  • 编译程序逻辑结构上至少包含两大阶段

      1. 分析阶段:理解源程序,挖掘源程序的语义
      2. 综合阶段:生成与源程序语义上等价的目标程序
  • 编译程序的前端、中端、后端

      1. 前端:实现主要的分析任务,通常以第一次生成中间代码为标志
      2. 后端:实现主要的综合任务,通常以从最后一级中间代码生成目标代码为标志
      3. 中端:实现各级中间代码上的操作
  • 典型编译程序的逻辑过程

    编译原理(一):介绍

    编译原理(一):介绍

编译原理(一):介绍

编译原理(一):介绍

编译原理(一):介绍

编译原理(一):介绍

编译原理(一):介绍

编译原理(一):介绍

  • 出错处理
    • 检查错误:报告出错信息
    • 排错:恢复编译工作
  • 编译程序的遍
    • 对一种代码形式从头到尾扫描一遍,将一个代码空间变换到另一个代码空间
    • 代码空间=代码+符号表+其他有用信息

解释程序

不产生目标程序文件,不区别翻译阶段和执行阶段,翻译源程序的每条语句后直接执行,程序执行期间一直有解释程序守候,常用于实现虚拟机

  • 比较编译程序和解释程序

编译原理(一):介绍

  • 预处理程序

    • 支持宏定义(#define),支持文件包含(#include),支持其他更复杂的源程序扩展信息
    • 预处理程序和编译程序的关系
    • 编译原理(一):介绍
  • 汇编程序:翻译汇编语言程序至可重定位的机器语言程序

  • 装入和连接程序:对可重定位机器语言程序进行修改,将相对地址变换为机器绝对地址

    • 连接程序合并多个可重定位机器语言程序文件到同一个程序
    • 装入和连接程序产生最终可执行的机器语言程序

编译原理(一):介绍

  • 调试程序:
    • 反馈目标程序运行时信息,将目标程序运行时信息与源程序关联,断点管理、单步跟踪、读/写目标状态等功能
  • 调试程序和编译程序的关系

编译原理(一):介绍