编译器实质
一个编译器就是一个程序,他可以阅读以某一种语言编写的程序并将该程序翻译成另一个等价的语言【目标语言】编写的程序,而她的重要任务之一便是发现程序中错误。
解释器
解释器是另一种语言处理器。他并不会翻译以此来生成目标程序。而是直接利用用户提供的输入执行源程序中指定的操作
解释器与编译器对比
在将用户输入映射为结果时,由编译器产生的机器语言目标程序比解释器要快得多,但是因为解释器是逐句进行错误诊断的,所以错误诊断功能确实比编译器要好。
预处理器
程序可能会有多个模块,被分别放置在独立的文件中,那么在目标文件的形成过程中,需要将各个模块进行整合在一起。而进行这个功能的程序叫作预处理器。预处理器还会将宏的缩写形式转换为源语言的语句。
链接器作用
大型程序经常被分为多个部分进行编译,因此需要将可重定位的机器代码与其他可重定位的目标文件以及库文件连接在一起,并且一个文件中的代码可能指向另一个文件中的位置。
而链接器作用就是将目标代码、系统的标准启动代码和库代码合并为可执行文件【.exe】同时解决外部内存地址的问题
加载器作用
将所有可执行目标文件放到内存中执行
Java编译过程
Java语言处理器结合了编译以及解释的过程。
普通过程
Java源程序被编译成字节码,之后虚拟机会对字节码进行解释执行。这样的好处是在一台机器编译得到的字节码可在另一台机器上解释执行。可通过网络进行机器之间的迁移。
即时编译器编译过程
与上面不同的是,在得到字节码后将字节码翻译成为机器语言之后再执行
编译型语言编译过程
过程简述
源文件经过预处理器进行预处理操作后作为输入传入编译器,编译器产生汇编语言程序作为其输出,因为汇编语言容易进行调试以及输出。之后汇编程序经过汇编器进行处理,生成可重新定位的机器代码
流程
源程序 = 预处理器 => 经过预处理过的源程序 = 编译器 => 目标汇编程序 = 汇编器 => 可重定位机器代码
可重定位机器代码、库文件及可重定位对象文件 = 链接器/加载器 => 目标机器代码