口译/编译器如何工作?解释器和编译器有什么区别。
Answers:
编译器
编译器是要编写的第一种翻译程序。这个想法很简单:编写程序,然后将其交给编译器进行翻译。然后,您运行结果。
口译员
解释器也是一种程序,可以将高级语言翻译为低级语言,但在程序运行时即会执行。您使用文本编辑器或类似工具编写程序,然后指示解释器运行程序。它每次只占用一行程序,并在运行之前翻译每一行:它先翻译并运行第一行,然后再翻译并运行第二行,依此类推。
编译器特点:
口译员特点:
一个的S - >Ť译者接受源语言表达小号代码,并将其转换到另一个(目标)语言表达T.等效代码
译员示例:
一个小号解释接受语言表达小号代码,并立即执行该代码。它通过一次获取,分析和执行一条指令来工作。
当用户以交互方式输入指令(例如Python),并希望在输入下一条指令之前获取输出时,效果很好。当程序仅执行一次或需要可移植时,也很有用。
行为
编译器将源代码转换为机器代码,但不执行源代码或目标代码。
解释器一次只执行一条指令的源代码,但不翻译源代码。
性能
解释性编译器
解释性编译器是编译器和解释器之间的良好折衷。它将源程序转换为虚拟机代码,然后对其进行解释。
解释性编译器将快速翻译与适度的快速执行结合在一起,但前提是:
示例:JDK为Java提供了一个解释性编译器。
解释器和编译器有什么区别?
所述编译器首先扫描整个程序,然后将其转换成将被计算机处理器执行的机器代码。
该口译翻译一个语句转换成机器语言,执行它,并进入到下一个语句。
例如:编译器将立即给出几乎所有错误,但解释器将运行直到您写错指令为止
口译/编译器如何工作?
差异与工作方式
问: 编译器和解释器用于什么用途?
答:大多数程序都是用高级语言(c#,java ...)编写的。高级语言包含可理解的单词和短语。另一方面,计算机(到我写这篇文章时为止)可以理解机器代码,它是0和1的唯一二进制/机器码。因此,我们需要将高级代码转换为源代码(机器码/二进制)。因此,单词转换。
因此,我们得出结论,编译器/解释器的工作是将高级代码转换为机器代码。
但是两者都有“翻译”代码的不同方式
区别:
编译器:
将源代码转换为某种中间形式。对于静态语言,编译器通常将源代码转换为程序集,而程序集通常不会将其存储到磁盘中,然后调用汇编程序将程序集转换为二进制代码,该二进制代码通常存储为目标文件(.o或.obj后缀通常),然后调用链接器将目标文件链接到二进制可执行文件。同样,将编译,组装,链接的整个过程称为编译。因此,您可以将gcc称为编译器,但实际上它调用的是要编译的编译器cc1,因为它是要汇编的汇编器,而ld是要链接的链接器。
口译员:
该语言具有中间所谓的字节码形式,首先将源代码转换为字节码,此过程可以称为编译,javac用作示例。字节码不能在主机上运行,它需要一个程序(实际上是从OS角度来看的过程)才能将字节码解释为主机,该程序称为解释器,想想Java。某些语言(例如python)仅需一次即可完成编译和解释工作
-两者均来自:https : //www.quora.com/What-are-the-differences-between-a-compiler-an-interpreter-and-an-assembler-Provide-examples
比较中
口译员
- 分析源代码所需的时间更少,但总体执行时间较慢。
- 没有生成中间目标代码,因此具有存储效率。
- 继续翻译程序,直到遇到第一个错误为止,在这种情况下它将停止。因此调试很容易。
编译器
- 分析源代码需要花费大量时间,但是总体执行时间相对较快。
- 生成进一步需要链接的中间目标代码,因此需要更多的内存。
- 仅在扫描整个程序后才生成错误消息。因此,调试相对困难。
-来自:https://www.programiz.com/article/difference-compiler-interpreter
语言示例
口译
已编译
编译器-编译器将源语言翻译成目标语言。然后目标语言接受输入并给出输出。
解释器-解释器似乎不生成目标代码,而是直接与源代码一起接受输入并提供输出。
然后,在将输入映射到输出时,由编译器生成的面向机器语言的程序比解释器要快得多。但是,由于解释器逐行执行源程序,因此它比编译器提供更好的错误诊断。
参考-《编译器:原理,技巧和工具》(Aho aka the Dragon book)
看看PLAI书,这是我发现的有关动态语言实现的最佳入门:
编程语言:应用程序和解释 (c)Shriram Krishnamurthi
本书以在Scheme(dr.Racket)中为动态语言编写解释器为中心,使用它您可以编写自己的任何语言的解释器,并从中添加有关OOP的一些技巧。
和SmallTalk和SOM:简单对象机:
所有现代解释器都在内部包含编译器:将高级元素编译为低级但可移植的字节码,或者使用JIT将机器代码编译为RAM。
PS:如果有人想在Python上编写SmallTalk系统,请注意我。