编译原理--引论(一)
- 在一个程序可以运行之前,它首先被翻译成一种能够被计算机执行的形式
- 完成这项翻译工作的软件系统称为编译器
语言处理器
编译器
- 一个编译器是一个程序,它可以把以源语言编写的程序,把该程序翻译成为一个等价的
- 编译器的重要任务之一是报告它在翻译过程中发现的源程序中的错误
运行目标程序
- 若目标程序是一个可执行的机器语言程序,那么它就可以被用户调用,处理输入并产生输出
解释器
- 常见的语言处理器,不通过翻译方式生成目标程序
- 从用户角度看,解释器直接利用用户提供的输入执行源程序中指定的操作
编译器与解释器优劣比较
在把用户输入映射成为输出的过程中
- 由一个编译器产生的机器语言目标程序通常比一个解释器快很多
- 解释器的错误诊断效果通常比编译器更好,因为它逐个语句执行源程序
Java语言处理器结合了编译和解释过程
- 一个Java源程序首先被编译成一个称为字节码(bytecode)的中间表示形式
- 然后由一个虚拟机对得到的字节码加以解释执行
- 好处是可以在一台机器上编译得到的字节码在另一台机器上解释执行
- 通过网络 就可以完成机器之间的迁移
- 为了更快地完成输入到输出地处理,有些被称为即时编译器地Java编译器在运行中间程序处理输入的前一刻首先把字节码翻译成为机器语言,然后再执行程序
- 一个源程序可能被分割成为多个模块,并存放于独立的文件中
- 把源程序聚合在一起的任务有时会由一个称为预处理器(preprocessor) 的程序独立完成,预处理器(preprocessor) 负责把宏的缩写形式转换为源语言的语句
- 将经过预处理的源程序作为输入传递给一个编译器,编译器可能产生一个汇编语言程序作为其输出,因为汇编语言比较容易输出和调试
- 这个汇编语言程序由称为汇编器(assembler) 的程序进行处理,并生成可重定位的机器代码
- 大型程序经常被分成多个部分编译,可重定位机器代码有必要和其他可重定位的目标文件及库文件连接到一起,形成真正在机器上运行的代码
- 一个文件的代码可能指向另一个文件的位置,而链接器(linker) 能够解决外部内存地址的问题
- 加载器(loader) 把所有可执行目标文件放到内存中
论读书
睁开眼,书在面前 闭上眼,书在心里
睁开眼,书在面前 闭上眼,书在心里