编译和解释原理

语言发展

  计算机的硬件只能识别0和1组成的机器指令,而机器指令是最基本的计算机语言,但是我们平时进行程序设计时肯定不会用机器语言来编程,因为用它的效率低,更让人难以理解。因此聪明的人类发明了汇编语言,它使用符号来表示指令,例如用ADD表示加法,这就容易理解了。但是汇编语言和机器语言十分接近,其书写取决于机器指令,因此它还是一种面向机器的语言,所以称它为低级语言。相应的,又在此基础上,开发出了功能更强、抽象更高的面向各类应用的程序语言,称为高级语言。例如VB,C++,C#,Java等,大家都挺熟悉的。

  但是计算机不能直接理解这些高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成低级语言,计算机才能执行高级语言编写的程序。翻译的方式有两种,一个是编译,一个是解释

编译程序

  编译过程,是将所有的源代码指令一次性翻译成目标程序,然后再执行。这个过程如下:

  编译器将高级语言从源代码翻译成与之等价的目标程序(一次性全部翻译完),在随后的某个时刻,用户启动目标程序由操作系统执行。

  

  编译程序详细过程:

  编译器首先对源程序进行词法,语法,语义的分析,将源程序变成一种内部表达形式,叫做中间代码,中间代码是一种结构简单,表意明确的记号系统,能容易的将他翻译成目标代码。

  目标代码分为两类:汇编语言形式和机器指令形式。

  

解释程序

  解释过程,就是对于源文件中的每一条指令,都依次翻译成目标指令(这是和编译不同的,解释程序没有目标程序),并且执行的过程。对每条这种执行过程完全由解释器控制的。

  

  解释程序在词法,语法,语义分析上和编译器的工作原理基本相同,但在运行用户程序时,直接执行源程序或源程序的中间代码程序,中间不会产生目标程序,如下图三种方式(C更接近于机器语言)。

  

编译和解释的比较

编译:一次编译,多次运行,总体运行较快,效率更高。

平台依赖性。编译好的程序只能在当前平台运行,是个局限性。

解释:解释器实时地解释每一条指令并运行,总体运行比较慢。

平台无关性。任何平台只要装上解释器都可以运行完全相同的代码。

发展

  编译和解析相比汇编更加效率,人为理解更加容易,但是编译和解释的优缺点明显,而且还是互补的,有没有更有效率又可移植的编程呢,当然是有的,C#和Java,大家都很熟悉。

  它们是如何解释的,简单一句话说明吧:

  JAVA:先转换为中间语言,然后在运行时!解释!

  C#:先转换为中间语言,然后在运行时!编译!,且用到多少就编译多少!

时间: 2024-10-23 21:17:21

编译和解释原理的相关文章

也谈编译 VS 解释

语言发展 计算机的硬件仅仅能识别0和1组成的机器指令,而机器指令是最主要的计算机语言,可是我们平时进行程序设计时肯定不会用机器语言来编程,由于用它的效率低.更让人难以理解. 因此聪明的人类发明了汇编语言.它使用符号来表示指令,比如用ADD表示加法.这就easy理解了.可是汇编语言和机器语言十分接近,其书写取决于机器指令,因此它还是一种面向机器的语言.所以称它为低级语言. 对应的,又在此基础上,开发出了功能更强.抽象更高的面向各类应用的程序语言.称为高级语言.比如VB,C++,C#,Java等,大

C#编译和运行原理

关于编译与内存的关系,以及执行时内存的划分 1.所谓在编译期间分配空间指的是静态分配空间(相对于用new动态申请空间),如全局变量或静态变量(包括一些复杂类型的 常量),它们所需要的空间大小可以明确计算出来,并且不会再改变,因此它们可以直接存放在可执行文件的特定的节里(而且 包含初始化的值),程序运行时也是直接将这个节加载到特定的段中,不必在程序运行期间用额外的代码来产生这些变量. 其实在运行期间再看"变量"这个概念就不再具备编译期间那么多的属性了(诸如名称,类型,作用域,生存期等等)

编译与解释的区别

博主今年大三,学校开展了<编译原理>这门课,而老师提的第一个问题便是编译与解释的区别,下面我将会说说自己的看法. 首先我们要知道市面上大致上是有两种类型的语言的:静态语言与动态语言. 静态语言:C/C++,JAVA,C#等等:动态语言:Javascript,Python等等 而静态语言之所以是静态的正是应为它的源文件是需要使用编译器将源程序文件翻译成二进制文件. 我们拿JAVA举例,java是一门典型的强类型静态语言.首先,我们在One.java文件中编写一段程序如下 package com.

编译型和解释型的区别&amp;&amp;Java从编译到执行的过程

借鉴: 1  http://www.cnblogs.com/bluestorm/archive/2012/12/09/2810167.html           区别 2  http://blog.jobbole.com/53152/       编译的过程 3  http://jingyan.baidu.com/article/b24f6c82de6bcf86bfe5dad4.html          Java从编译到执行的过程(完整) Java编译-下载-解释-执行的过程: 在Java编

编译和解释的区别是什么?

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快; 而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的. 这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式) 一.低级语言与高级语言最初的计算机程序都是用0和1的序列表示的,程序员直接使用的是机器指令,无需翻译,从纸带打孔输入即可执行得到结果.后来为了方便记忆,就将用0.1序列表示的机

编译还是解释?

我们可能要问,什么时候应该用编译,什么时候应该用解释呢?最终的结果是几乎相同,因此,答案通常最终归结为生成代码的原始速度,虽然内存使用情况和启动时间也是主要的关注.如果需要代码执行得更快,那么编译通常是更好的结果,有一定的优势. 清单 12-8 的测试工具,能够重复执行 interpret 函数中的 createDynamicMethod 方法,计算出花费的时间:还测试在动态方法上的重要变化.这还生成一个新的 .NET 委托值,作为该句柄,调用生成的代码.可以看出,这是到目前为止最快的技术.记住

程序的编译与解释之间的区别

个人觉得:取决于你怎么解读这个问题. 传统意义对比: 传统意义上的所谓编译与解释,区别在于代码是在什么时候被翻译成目标CPU的指令.——虽然这种解释从科学上说不通,但这却是一直以来大家更认可的更约定俗成的定义. 对 C 语言或者其他编译型语言来说,编译生成了目标文件,而这个目标文件是针对特定的 CPU 体系的,为 ARM 生成的目标文件,不能被用于 MIPS 的 CPU.这段代码在编译过程中就已经被翻译成了目标 CPU 指令,所以,如果这个程序需要在另外一种 CPU 上面运行,这个代码就必须重新

Python入门——编译和解释

编译和解释 源代码: 采用某种编程语言编写的计算机程序,人类可读 例如:result = 2 + 3 目标代码: 计算机可直接执行的,人类不可读(一般) 例如:11010010 00111011 (机器语言) 将人类编写的程序转变为机器可以直接执行的目标代码,程序执行的两种方式: 编译: 将源代码一次性转换成目标代码的过程,类似英文翻译 解释: 将源代码逐条转换成目标代码同时逐条运行的过程,类似同声传译 根据程序的执行方式不同,编程语言分为两类:静态语言:使用编译执行的编程语言 C/C++语言,

Unity编译Android的原理解析和apk打包分析

作者介绍:张坤 最近由于想在Scene的脚本组件中,调用Android的Activity的相关接口,就需要弄明白Scene和Activity的实际对应关系,并对Unity调用Android的部分原理进行了研究. 本文主要探讨Scene和Activity之间的关系,以及Unity打包apk和Android studio打包apk的差别在什么地方?找到这种差别之后,可以怎么运用起来? 本文需要用到的工具: Android反编译工具--apktool Android studio自带的反编译功能 一.