编译器
(Compiler)和解释器
(Interpreter)是两种不同的工具,都可以将编程语言
和脚本语言
转换为机器语言
。
编译器
可以将整个程序转换为目标代码
(object code),这些目标代码通常存储在文件中。目标代码也被称为二进制代码
,在进行链接
(link)后可以被机器直接执行。典型的编译型程序语言有C
和C++
。
解释器
(Interpreter)能够直接执行程序或脚本语言中编写的指令,而不需要预先将这些程序或脚本语言转换成目标代码
或者机器码
。典型的解释型语言有Perl
、Python
、PHP
和Matlab
。
以下是关于编译器
和解释器
有趣的方面:
编译器
和解释器
都能将源代码(文本文件)转换为其他符号;都能生成语法树(parse tree
);都能生成立即指令(immediate instructions
,即该指令中要操作的数据已经包含在了指令中,而不是在指令中操作数据所在的地址)。它们的不同之处是,编译器包含了链接器
(linker),生成独立的机器代码程序,而解释器是直接执行高级语言所描述的操作。一旦程序被编译了,则它的源代码对于运行程序来说没用处了。而解释型程序的源代码在运行程序的时候是始终都需要被用到。
解释型程序一般会比编译型程序运行效率低。
Java程序首先会被编译器编译成中间状态(即字节码),然后再被解释器执行。