本文参考了《编译原理》(龙书)和wiki百科
解释器:
- 定义:一种电脑程序,能够把高级编程语言一行一行直接转译运行。
- 优点:
- 错误诊断效果相对更好
- 消除了编译整个程序的负担(但是会使运行时效率大大降低)
- 输入:
- 源程序
- 用户输入
- 输出:
- 执行程序的结果
- 示意图:
编译器:
- 定义:一种电脑程序,能够使源代码(原始语言),转换成另一种编程语言(目标语言)
- 优点:运行速度更快
- 输入:原始程序
- 输出:目标语言的等价程序
- 示意图:
Java的语言处理器
- 结合了编译和解释的过程
- 字节码(bytecode)是中间表示形式
- 优点:在A机器上编译得到的字节码可以在B机器上解释执行。
- 使用即时编译器(JIT)提高效率
- 示意图:
预处理器
- 定义:在计算机科学中,预处理器是程序中处理输入数据,产生能用来输入到其他程序的数据的程序。
- 特点:
- 常见的是在下一步编译之前,对源代码进行处理。(即:经过Preprocessor的源程序作为输入传递给一个编译器)
- 作用:
- 把多个模块,多个独立文件中的源程序聚合在一起。
- 宏替换
- 条件性编译
- 包含文件
链接器
- 定义:一个程序,将一个或多个由编译器或汇编器生成的目标文件外加库链接为一个可执行文件。
- 两种链接:
- 静态链接
- 把所有代码和库拷贝到执行文件里,运行的时候不再需要库了。(所以执行文件可能变大)
- 动态链接
- 只建立一个引用的接口,真正的代码和数据存放在另外的文件中,运行时再载入。
- 静态链接
加载器
- 定义:把所有的可执行目标文件放到内存中执行(操作系统的一部分,负责程序的加载,它是程序运行中不可或缺的一个步骤,它会将程序置放在存储器中,让它可以运行。)
- 步骤:
- 读取可执行文件
- 将可执行文件写入存储器中
- 开展其他的准备操作
- 加载完成
- 操作系统将控制权交给加载的代码,让它开始执行
一个语言处理器系统的示意图: