解释器/编译器如何工作

dev*_*per 71 compiler-construction interpreter

解释器/编译器如何工作?解释器和编译器之间有什么区别.

Adr*_*der 56

编译器

编译器是第一种要编写的翻译程序.这个想法很简单:编写程序,然后将其交给编译器进行翻译.然后运行结果.

口译

解释器也是一个将高级语言翻译成低级语言的程序,但它在程序运行时才会执行.您使用文本编辑器或类似的东西编写程序,然后指示解释器运行该程序.它需要程序,一次一行,并在运行之前转换每一行:它转换第一行并运行它,然后转换第二行并运行它等.

编译器特性:

  • 花费大量时间分析和处理程序
  • 生成的可执行文件是某种形式的机器特定二进制代码
  • 计算机硬件解释(执行)结果代码
  • 程序执行很快

口译员特点:

  • 分析和处理程序的时间相对较少
  • 结果代码是某种中间代码
  • 生成的代码由另一个程序解释
  • 程序执行相对较慢

  • 那不对.两种语言都被编译和解释. (9认同)
  • @Aniket 不,对目标代码不进行任何解释。如果你把一个程序编译成机器可以理解的东西,那么你就不需要解释器了。此外,问题的重点是编译器生成的目标代码与 Java 编译器生成的中间码(例如:字节码)之间的区别,然后在每次运行时由真正的解释器解释。 (2认同)

mar*_*nas 31

什么是翻译?

一个的S - >Ť译者接受源语言表达小号代码,并将其转换到另一个(目标)语言表达T.等效代码

译者的例子:

  • 编译器 - 将高级代码转换为低级代码,例如Java - > JVM
  • 汇编程序 - 将汇编语言代码转换为机器代码,例如x86as - > x86
  • 高级翻译器 - 将代码从一个PL转换为另一个PL,例如Java - > C.
  • 反编译器 - 将低级代码转换为高级代码,例如Java JVM字节码 - > Java

什么是口译员?

一个小号解释接受语言表达小号代码,并立即执行该代码.它通过一次获取,分析和执行一条指令来工作.

当用户以交互方式输入指令(想想Python)并希望在输入下一条指令之前获取输出时,这很好.当程序只执行一次或需要便携时也很有用.

  • 解释程序比执行本机机器代码要慢得多
  • 解释高级语言要慢约100倍
  • 解释中级(如JVM字节码)语言要慢10倍
  • 如果重复调用指令,将重复进行分析 - 耗时!
  • 无需编译代码

差异

行为

  • 编译器将源代码转换为机器代码,但不执行源代码或目标代码.

  • 解释器一次执行一条指令的源代码,但不翻译源代码.

性能

  • 编译器需要很长时间才能将源程序转换为本机机器代码,但后续执行速度很快
  • 解释器立即开始执行源程序,但执行速度很慢

解释性编译器

解释性编译器是编译器和解释器之间的良好折衷.它将源程序转换为虚拟机代码,然后进行解释.

解释编译器将快速翻译与适度快速执行相结合,前提是:

  • VM代码低于源语言,但高于本机机器代码
  • VM指令格式简单(可由解释器快速分析)

示例:JDK为Java提供了解释性编译器.

  • "解释器一次执行一个指令的源代码,但不转换源代码"(取自diff标题)我认为解释器一次转换并执行两个动作,而不仅仅是按照你的解释执行.除了这个解释是清楚和完美+1. (3认同)

KMå*_*Mån 19

编译器将一种计算机语言的源代码转换为另一种计算机语言.

解释器,直接执行源代码(通常在自己的虚拟机内).

alt text http://content.answers.com/main/content/img/CDE/COMPILE.GIF

通常,解释器的性能成本很高.


Pre*_*raj 16

解释器和编译器有什么区别?

在此输入图像描述

所述编译器首先扫描整个程序,然后将其转换成将被计算机处理器执行的机器代码.

口译翻译一个语句转换成机器语言,执行它,进入到下一个语句.

解释器/编译器如何工作?

在此输入图像描述

  • 与编译语言不同,它们提前翻译成机器语言(右).
  • 解释语言在运行时翻译.
  • dBASE和BASIC 解释器(中)翻译原始源代码.
  • Java和Visual Basic(左)解释器翻译字节码,字节码是从原始源代码编译的中间语言.

资源


use*_*451 7

差异与他们如何工作

问: 编译器和口译员用的是什么?

答:大多数程序都是用高级语言编写的(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

语言示例

解读

  • 蟒蛇
  • 红宝石
  • PHP
  • JAVA(全能)
  • Perl的
  • [R
  • 电源外壳

编译

  • C
  • C++
  • C#
  • Objective-C的
  • 迅速
  • Fortran语言