编译程序 & 解释程序

332 阅读3分钟

将高级语言程序翻译成机器语言程序的软件叫做【翻译程序】。
【翻译程序】有两种,一种是编译程序,一种是解释程序。

编译程序

编译程序是一个语言处理程序。它将高级语言程序(如Pascal,Fortran,c等)源代码作为输入,直接进行翻译生成出机器语言的目标程序(汇编语言程序或二进制代码程序),然后再让计算机执行这个目标程序,得到计算结果。


需要注意的是:以上讲的是编译和运行两个分开的阶段,也就是说程序必须要全部翻译完毕之后,才能运行。但是在一个交互环境当中,并不需要将两个阶段分开,也就是我们在使用解释程序的时候,它不需要在运行前就去把源程序翻译成目标代码,也可以在某台机器上运行程序,并生成结果。


编译程序工作时,先分析,后综合,从而得到目标程序。
分析指的是:词法分析、语言分析。
综合指的是:代码优化,存储分配、代码生成。

为了完成分析综合任务,编译程序对源程序进行一次甚至多次扫描,每次扫描完成一项或多项任务,也可能一项任务被分成多次扫描才能完成。
例如:进行一项4此扫描的翻译:
(1)第一次扫描做:词法分析
(2)第二次扫描做:语法分析
(3)第三次扫描做:代码优化和存储分配
(4)第四次扫描做:代码生成
\

解释程序

同样将源代码(如basic语言)的程序作为输入,解释一句就提交计算机执行一次,并不形成目标文件;
就像口语交际的中文翻译,说出一句翻译一句,或者是终端的dos窗口,在终端输入一条命令与句,解释程序立刻返回给终端若干句;

这种只是适用于小型机器的计算问题,解释程序的执行速度较慢,如果出现循环,也是重复着提交一句。

解释程序会接受某个语言的程序并且立即去执行这个源程序,它的工作模式就是:一个个获取、分析并执行源程序的语句,一旦第一个语句分析结束后,源程序就会开始运行并且去生成结果,它比较适合我们想以交互方式来工作的情况,也就是说,我们希望在获取下一个语句之前了解每个语句的执行结果,允许执行时修改程序。

解释程序其实有很多,比如说BASIC语言解释程序、LISP语言解释程序、UNIX命令语言(shell)解释程序、数据库查询语言SQL解释程序以及java语言环境中的BYTECODE解释程序
\

区别

在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程;
而在解释方式下,解释程序和源程序(或某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序。

解释器翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立的目标程序。