解释程序在词法、语法和语义分析方面与编译程序工作原理基本相同,但在运行用户程序时,它直接执行源程序或源程序的中间表示。
与编译程序的主要区别:解释程序不产生源程序的目标程序。
解释程序对源程序进行逐个字符检查,进行词法、语法分析和语义分析后,就执行程序语句规定的动作。
解释程序也可以先将源程序翻译成某种中间代码形式,然后对中间代码进行解释来实现用户程序的运行。
(一)解释程序基本结构
解释程序通常可以分成两部分
①分析部分,包括通常的词法分析、语法分析和语义分析程序,经语义分析后把源程序翻译成中间代码,中间代码常采用逆波兰表示形式;
②解释部分,对第一部分产生的中间代码进行解释执行。
(二)编译与解释方式比较
对于高级语言的编译和解释工作方式,可以从以下几方面进行比较:
对比 | 解释 | 编译 | |
1 | 效率 | 解释程序可能需要反复扫描源程序,如进行变量类型检查;为解释程序及其支撑系统分配更多内存; | 编译更耗时,占用存储空间更多,但源程序只需要被编译程序翻译一次,就可以多次运行。运行效率更高 |
2 | 灵活性 | 支持“边修改边运行”,比编译方式更灵活。运行时,可以对错误进行更精确定位 | |
3 | 可移植性 | 解释器一般也使用某种程序设计语言编写,只要重新编译解释器,就能支持不同环境 |
特殊:有些编译系统同时提供编译和解释方式,如Java虚拟机Just-in-time complication(代码首次运行时编译)。