为了实现在一个计算机上运行高级语言的程序,主要有两个途径:第一个途径是把该程序翻译为这个计算机的指令代码序列,这就是我们已经描述的编译过程。第二个途径是编写一个程序,它解释所遇到的高级语言程序中的语句并且完成这些语句的动作,这样的程序就叫解释程序。从功能上说,一个解释程序能让计算机执行高级语言。它与编译程序的主要不同是它不生成目标代码,它每遇到一个语句,就要对这个语句进行分析以决定语句的含义,执行相应的动作。右面的图示意了它的工作机理
| 解释程序直接对源程序中的语句进行分析,执行其隐含的操作。 如执行下面的程序: ![]() 解释程序直接输出结果 4。而编译程序则生成目标代码,诸如: movf #2, b movf b , R1 addf #2, R1 movf R1, a 编译系统生成的目标代码由计算机执行才能生成结果。使用编译系统时会区分编译阶段和运行阶段,编译阶段对源程序进行编译,运行阶段是指目标程序的运行。而解释系统则是边解释边执行。从存储组织来看,在编译阶段,存储区一般要有源程序缓冲区,目标代码缓冲区,名字表以及编译程序使用的源程序中间表示和各种表格等等。在运行阶段,存储区只有目标代码和数据区了。对解释系统来说,在它工作的自始至终,存储区中要有源程序,名字表,标号表等表格,输入输出缓冲区以及数据区等等... |
| ||||||||||||||||||||
| 翻译:是按源程序的实际输入顺序,处理程 序语句,得到执行的目标程序。 解释:是按源语言的定义边解释边执行。 解释执行是按照被解释的源程序逻辑流程进行工作的。 解释执行 ① 不生成目标代码 ② 能支持交互环境(同增量式编译系统) 优点:交互方便,节省空间。 缺点:效率低。因对源程序的循环语句部分要反复解释执行。 共同点:都需进行词法、语法、语义分析。 可比喻为: -编译是笔译(产生目标程序) -解释是口译(不产生目标程序) 很多语言如BASIC,LISP和PROLOG等等最初都是解释执行的,后来也都有了编译系统。号称最具生命力的JAVA环境同时需要解释和编译系统的支持。 |


