解释器和编译器最终代码产品

时间:2015-02-17 09:11:35

标签: compilation operating-system interpreter

我正在努力理解编译器和解释器之间的区别。

据我所知,编译器可以将高级语言直接转换为机器代码,一次性查看整个代码。

我理解一个解释器 - 而不是翻译成机器代码 - 直接执行命令,一次一个。

我不明白解释器是如何做到这一点的?它是否也最终必须生成机器代码才能执行?

所以我的问题是 - 编译器和解释器都不是产生机器代码,而解释器只是执行额外步骤并逐行执行(然后丢弃已执行的机器代码)?

1 个答案:

答案 0 :(得分:3)

编译器解析语言并生成机器代码。

解释器通过调用专用函数来解析语言并立即执行程序,它不会生成代码。

例如,A= B + C使编译器生成

Load R0, $B; 
Load R1, $C;
Add R1, R0; 
Store $A, R1; 

并且解析器在解析

时直接调用其运行时例程
....
Push("B");
....
Push("C");
....
Add();
....
Pop("A");
....
像往常一样,现实更复杂,因为可以预先解析的中间形式以及解释或即时编译的中间代码,但是你明白了。

我热烈推荐http://compilers.iecc.com/crenshaw/,它将向您展示如何在编译器或解释器中体现解析器。