什么是解释器与编译器

1、解释器

解释器是一种计算机程序,它将每个高级程序语句转换成机器代码。

 

2、编译器

把高级语言编写的程序转换成机器码,将人可读的代码转换成计算机可读的代码(0和1)。

 

3、机器语言

一个机器语言程序是由一系列二进制模式组成的(例 110110) 它表示应该由计算机执行的简单操作。机器语言程序是可执行的,所以它们可以直接运行

 

两者都是将高级语言转换成机器码,解释器在程序运行时将代码转换成机器码,编译器在程序运行之前将代码转换成机器码

 

两者的区别

 

  Interpreter(解释器) compare(编译器)
程序步骤 1、创建代码
2、没有文件链接或机器代码生成
3、源语句在执行过程中逐行执行
1、创建代码
2、Compile将解析或分析所有语言语句的正确性。如果不正确,则抛出错误
3、如果没有错误,编译器将把源代码转换为机器码
4、它将不同的代码文件链接到一个可运行的程序(称为exe)
5、运行程序
Input(输入) 每次读取一行 整个程序
Output(输出) 不产生任何的中间代码 生成中间目标代码
工作机制 编译和执行同时进行 编译在执行之前完成
存储 不保存任何机器代码 存储编译后的机器代码在机器上
执行 程序执行是解释过程的一部分,因此是逐行执行的 程序执行与编译是分开的,它只在整个输出程序编译后执行
生成程序 不生成输出程序,所以他们在每次执行过程中都要评估源程序 生成可以独立于原始程序运行的输出程序(以exe的形式)
修改 直接修改就可运行 如果需要修改代码,则需要修改源代码,重新编译
运行速度
内存 它需要较少的内存,因为它不创建中间对象代码 内存需求更多的是由于目标代码的创建
错误 解释器读取一条语句并显示错误(如果有的话)。你必须纠正错误才能解释下一行 编译器在编译时显示所有错误和警告。因此,不修正错误就不能运行程序
错误监测 容易
编程语言 PHP, Perl, Python, Ruby C, C++, C#, Scala,  Java
 
 

编译器

 

 

1、编译器读取源代码,输出可执行代码
2、将用高级语言编写的软件翻译成计算机可以理解的指令,它把程序员写的文本转换成CPU能理解的格式
3、编译的过程比较复杂,它花了很多时间分析和处理程序
4、可执行结果是某种形式的特定于机器的二进制代码
5、编译器是一种程序,它读取用高级语言编写的程序,并将其转换为机器语言或低级语言,并报告程序中出现的错误
 
编译器的类型:前端编译器、后端编译器
 
1)编译器的分析阶段也称为前端,它将程序划分为基本的组成部分,检查代码的语法、语义和语法,然后生成中间代码。分析阶段包括词法分析、语义分析和语法分析。
2)编译器的合成阶段也称为后端,优化中间代码,生成目标代码。合成阶段包括代码优化器和代码生成器。
 

 

 

解释器

1:解释器在运行时逐行转换源代码
2、解释完全将一个用高级语言编写的程序翻译成机器级语言
3、解释器允许在程序执行时求值和修改程序
4、用于分析和处理程序的时间相对较少
5、与编译器相比,程序执行相对缓慢
 
 
注: 
Java既是编译的又是解释的,Java代码本身被编译成目标代码。在运行时,JVM将目标代码解释为目标计算机的机器代码。

 

主要区别

让我们看看编译器和解释器之间的主要区别
1、编译器将一个程序作为一个整体进行翻译,而解释器则一条一条地翻译一个程序
2、在编译器的情况下生成中间代码或目标代码。而解释器不创建中间代码
3、编译器比解释器要快得多,因为编译器一次完成整个程序,而解释器则是依次编译每一行代码
4、由于要生成目标代码,编译器比解释器需要更多的内存
5、编译器同时显示所有错误,很难检测错误,而解释器则逐个显示每条语句的错误,更容易检测错误
6、在编译器中,当程序中出现错误时,它会停止翻译,并在删除错误后重新翻译整个程序。相反,当解释器中发生错误时,它会阻止其翻译,在删除错误后,翻译将继续
7、在编译器中,这个过程需要两个步骤,首先将源代码翻译成目标程序,然后执行。而在解释器中,这是一个一次性的过程,源代码在编译和执行的同时
8、编译器用于编程语言,如C、c++、c#、Scala等。另一个解释器用于PHP、Ruby、Python等语言。
 
 

总结

编译器和解释器的目的是做相同的工作,但在操作过程上不同,编译器以聚合的方式获取源代码,而解释器获取源代码的组成部分,即一条一条的语句。
 

 

 

 

 

 

 

 

 

相关链接

 

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/lemon-le/p/13840014.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!