解释程序和编译程序

合集下载

解释性语言和编译性语言的区别

解释性语言和编译性语言的区别

解释性语言和编译性语言的区别计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。

翻译的方式有两种,一个是编译,一个是解释。

两种方式只是翻译的时间不同。

编译性语言编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。

解释性语言解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性java语言,专门有一个解释器能够直接执行java程序,每个语句都是执行的时候才翻译。

这样解释性语言每执行一次就要翻译一次,效率比较低。

脚本语言脚本语言是解释性语言。

脚本语言一般都有相应的脚本引擎来解释执行。

它们一般需要解释器才能运行。

所以只要系统上有相应语言的解释程序就可以做到跨平台。

脚本语言是一种解释性的语言,例如vbscript,javascript,installshield script等等,它不象c\c++等可以编译成二进制代码,以可执行文件的形式存在。

JAVA语言java语言是解释性语言。

java很特殊,java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。

Java 既可以被编译,也可以被解释。

通过编译器,可以把Java程序翻译成一种中间代码 - 称为字节码 - 可以被Java解释器解释的独立于平台的代码。

通过解释器,每条Java字节指令被分析,然后在计算机上运行。

只需编译一次,程序运行时解释执行。

Java字节码使“写一次,到处运行”成为可能。

可以在任何有Java编译器的平台上把Java程序编译成字节码。

这个字节码可以运行在任何Java VM上。

例如,同一个Java程序可以运行在WindowsNT、Solaris和Macintosh上。

编译性语言、解释性语言和脚本语言

编译性语言、解释性语言和脚本语言
形用户界面(GUI)。Java API被分组为相关组件的库(包)。
下图描述了一个运行在Java平台上的Java程序,如应用程序(application)或小应用程序(applet)。如图中显示的,JavaAPI和VM把Java程序从硬件依赖中分离出来。
作为一种独立于平台的环境,Java比本地代码慢一些。然而,聪明的编译器、很好地调制过的解释器和即时字节码编译器可以在不牺牲可移植性的条件下使Java的表现接近本地代码。
解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。
什么是脚本语言?
1.脚本语言(JavaScript,VBscript等)介于HTML和C,C++,Java,C#等编程语言之间。
可以把Java字节码看作运行在Java虚拟机(Java VM)上的机器代码指令。每中Java解释器,不管是Java开发工具还是可以运行Java小应用程序的Web浏览器,都是一种Java VM的实例。JavaVM也可以由硬件实现。
Java字节码使“写一次,到处运行”成为可能。可以在任何有Java编译器的平台上把Java程序编译成字节码。这个字节码可以运行在任何Java VM上。例如,同一个Java程序可以运行在WindowsNT、Solaris和Macintosh上。
脚本语言不需要编译,可以直接用,由解释器来负责解释。
5.脚本语言一般都是以文本形式存在,类似于一种命令.
举个例子说,如果你建立了一个程序,叫aaa.exe,可以打开.aa为扩展名的文件.
你为.aa文件的编写指定了一套规则(语法),当别人编写了.aa文件后,你的程序用这种规则来理解编写人的意图,并作出回应.那么,这一套规则就是脚本语言.

编译原理答案(前三章)

编译原理答案(前三章)

编译原理答案(前三章)第 1 章引论第 1 题解释下列术语:答案:(1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。

(2)源程序:源语言编写的程序称为源程序。

(3)目标程序:目标语言书写的程序称为目标程序。

(4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。

通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理等工作。

(5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。

(6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。

第 2 题一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。

答案:一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。

其各部分的主要功能简述如下。

词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。

语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。

语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。

中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。

中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。

目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。

表格管理程序:负责建立、填写和查找等一系列表格工作。

表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。

哈工大编译原理习题及答案

哈工大编译原理习题及答案

1.1何谓源程序、目标程序、翻译程序、编译程序和解释程序?它们之间可能有何种关系?1.2一个典型的编译系统通常由哪些部分组成?各部分的主要功能是什么?1.3选择一种你所熟悉的程序设计语言,试列出此语言中的全部关键字,并通过上机使用该语言以判明这些关键字是否为保留字。

1.4选取一种你所熟悉的语言,试对它进行分析,以找出此语言中的括号、关键字END以及逗号有多少种不同的用途。

1.5试用你常用的一种高级语言编写一短小的程序,上机进行编译和运行,记录下操作步骤和输出信息,如果可能,请卸出中间代码和目标代码。

第一章习题解答1.解:源程序是指以某种程序设计语言所编写的程序。

目标程序是指编译程序(或解释程序)将源程序处理加工而得的另一种语言(目标语言)的程序。

翻译程序是将某种语言翻译成另一种语言的程序的统称。

编译程序与解释程序均为翻译程序,但二者工作方法不同。

解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。

即边解释边执行,翻译所得的指令序列并不保存。

编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之。

即先翻译、后执行。

2.解:一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。

3.解:C语言的关键字有:auto break case char const continue default do double else enum externfloat for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while。

编译技术名词解释

编译技术名词解释

基本知识编译程序:就是指这样一种程序,通过它能够将用高级语言编写的源程序转换成与之在逻辑上等价的低级语言形式的目标程序解释程序与编译程序的主要区别是:*编译程序将源程序翻译成目标程序后再执行目标程序*解释程序则是逐条读出源程序中的语句并解释执行,即在解释程序的执行过程中并不产生目标程序。

形式化方法是用一整套带有严格规定的符号体系来描述问题的方法。

文法是程序语言的生成系统自动机是程序语言的识别系统推导的每一步都是对当前句型中的最右非终结符用相应产生式的右部进行替换,这样的推导称为最右推导(规范推导)最右推导的逆过程称为最左归约(规范归约)。

符号串集合的正闭包:设A是符号串的集合,则称A+为符号串集A的正闭包。

具体定义如下:A+=A1∪A2∪A3…符号串集合的(星)闭包:设A是符号串的集合,则称A*为符号串集A的星闭包。

具体定义如下:A*=A0∪A1∪A2∪A3…二义性文法:文法G[S]的一个句子如果存在两棵不同的语法树,或者能找到两种不同的最左推导(或最右推导),则称这个文法是二义性的。

先天二义性文法:对于一个二义性文法G[S],如果能找到一个非二义性文法G'[S],使得L(G')=L(G),则该二义性文法的二义性是可以消除的。

如果找不到这样的G'[S],则二义性文法描述的语言为先天二义性的。

推导的每一步都是对当前句型中的最右非终结符用相应产生式的右部进行替换,这样的推导称为最右推导(规范推导)最右推导的逆过程称为最左归约(规范归约)。

符号串长度:|ab|=2,|ε|=0。

四元式,逆波兰,划分基本块,作流图一个句型的最左直接短语称为该句型的句柄。

语法树的某个结点连同它的所有后代组成了一棵子树。

2型文法:文法G的每一个产生式具有下列形式:A→α其中,A∈VN,α∈V*,则称文法G为2型文法或上下文无关文法。

3型文法:文法G的每个产生式具有下列形式:A→α或A→αB其中,A、B∈VN,α∈VT*,则文法G称为3型文法、正规文法或右线性文法在编译方法中:通常用3型文法(正规文法)来描述高级程序语言的词法部分,然后用有限自动机FA来识别高级语言的单词。

编译原理习题答案

编译原理习题答案

编译原理习题答案《编译原理》习题答案:第⼀次:P142、何谓源程序、⽬标程序、翻译程序、汇编程序、编译程序和解释程序?它们之间可能有何种关系?答:被翻译的程序称为源程序;翻译出来的程序称为⽬标程序或⽬标代码;将汇编语⾔和⾼级语⾔编写的程序翻译成等价的机器语⾔,实现此功能的程序称为翻译程序;把汇编语⾔写的源程序翻译成机器语⾔的⽬标程序称为汇编程序;解释程序不是直接将⾼级语⾔的源程序翻译成⽬标程序后再执⾏,⽽是⼀个个语句读⼊源程序,即边解释边执⾏;编译程序是将⾼级语⾔写的源程序翻译成⽬标语⾔的程序。

关系:汇编程序、解释程序和编译程序都是翻译程序,具体见P4 图 1.3。

P143、编译程序是由哪些部分组成?试述各部分的功能?答:编译程序主要由8个部分组成:(1)词法分析程序;(2)语法分析程序;(3)语义分析程序;(4)中间代码⽣成;(5)代码优化程序;(6)⽬标代码⽣成程序;(7)错误检查和处理程序;(8)信息表管理程序。

具体功能见P7-9。

P144、语法分析和语义分析有什么不同?试举例说明。

答:语法分析是将单词流分析如何组成句⼦⽽句⼦⼜如何组成程序,看句⼦乃⾄程序是否符合语法规则,例如:对变量 x:= y 符合语法规则就通过。

语义分析是对语句意义进⾏检查,如赋值语句中x与y类型要⼀致,否则语法分析正确,语义分析则错误。

P155、编译程序分遍由哪些因素决定?答:计算机存储容量⼤⼩;编译程序功能强弱;源语⾔繁简;⽬标程序优化程度;设计和实现编译程序时使⽤⼯具的先进程度以及参加⼈员多少和素质等等。

补充:1、为什么要对单词进⾏内部编码?其原则是什么?对标识符是如何进⾏内部编码的?答:内部编码从“源字符串”中识别单词并确定单词的类型和值;原则:长度统⼀,即刻画了单词本⾝,也刻画了它所具有的属性,以供其它部分分析使⽤。

对于标识符编码,先判断出该单词是标识符,然后在类别编码中写⼊相关信息,以表⽰为标识符,再根据具体标识符的含义编码该单词的值。

计算机组成原理——解释程序和编译程序

计算机组成原理——解释程序和编译程序

计算机组成原理——解释程序和编译程序⼀、定义编译型程序:把做好的源程序全部编译成⼆进制代码的可运⾏程序。

然后,可直接运⾏这个程序。

解释型程序:把做好的源程序翻译⼀句,然后执⾏⼀句,直⾄结束!⼆、区别编译型程序,执⾏速度快、效率⾼;依靠编译器、跨平台性差些。

解释型程序,执⾏速度慢、效率低;依靠解释器、跨平台性好。

编译型的语⾔包括:C、C++、Delphi、Pascal、Fortran解释型的语⾔包括:Java、Basic、javascript、Python三、J a v a那java是编译型的还是解释型的?Java这个语⾔很⾮凡。

⼀、你可以说它是编译型的。

因为所有的Java代码都是要编译的,.java不经过编译就什么⽤都没有。

⼆、你可以说它是解释型的。

因为java代码编译后不能直接运⾏,它是解释运⾏在JVM上的,所以它是解释运⾏的,那也就算是解释的了。

三、但是,现在的JVM为了效率,都有⼀些JIT优化。

它⼜会把.class的⼆进制代码编译为本地的代码直接运⾏,所以,⼜是编译的。

像C、C++ 他们经过⼀次编译之后直接可以编译成操作系统了解的类型,可以直接执⾏的 所以他们是编译型的语⾔。

没有经过第⼆次的处理 ⽽Java不⼀样他⾸先由编译器编译成.class类型的⽂件,这个是java⾃⼰类型的⽂件 然后在通过虚拟机(JVM)从.class⽂件中读⼀⾏解释执⾏⼀⾏,所以他是解释型的语⾔,⽽由于java对于多种不同的操作系统有不同的JVM所以 Java实现了真正意义上的跨平台!请观看下⾯两张图 了解⼀下Java的虚拟机机制:(1)java语⾔的编译-->解释--->执⾏过程(2)java的虚拟机从java来看⽤编译型、解释型来分类编程语⾔已经有点⼒不从⼼了。

高级语言程序的两种处理方式——编译和解释

高级语言程序的两种处理方式——编译和解释

⾼级语⾔程序的两种处理⽅式——编译和解释编译⽅式编译程序的功能就是把⾼级语⾔书写的源程序翻译成与之等价的⽬标程序(汇编语⾔或机器语⾔)。

编译程序的⼯作过程词法分析在词法分析阶段,源程序可以简单的看做是⼀个多⾏的字符串。

词法分析阶段是编译过程的第⼀阶段,主要任务是对源程序从前到后(从左到右)逐个字符进⾏扫描,从中识别出⼀个个“单词”符号。

词法分析程序输出的”单词“常采⽤⼆元组的⽅式,即单词类别和单词⾃⾝的值。

词法分析过程依据的语⾔的此法规则,即描述“单词”结构的规则。

词法分析器⼀般来说有两种⽅法构造:⼿⼯构造和⾃动⽣成。

⼿⼯构造可使⽤状态图进⾏⼯作,⾃动⽣成使⽤确定的有限⾃动机来实现。

词法分析器的功能输⼊源程序,按照构词规则分解成⼀系列单词符号。

单词是语⾔中具有独⽴意义的最⼩单位,包括:(1)关键字是由程序语⾔定义的具有固定意义的标识符。

(2)标识符⽤来表⽰各种名字,如变量名,数组名,过程名等等。

(3)常数常数的类型⼀般有整型、实型、布尔型、⽂字型等。

(4)运算符如+、-、*、/等等。

(5)界符如逗号、分号、括号、等等。

语法分析编译程序的语法分析器以单词符号作为输⼊,分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等,最后看是否构成⼀个符合各类语法的构成规则,按该语⾔使⽤的语法规则分析检查每条语句是否有正确的逻辑结构,程序是最终的⼀个语法单位。

语法分析的⽅法分为两种:⾃上⽽下分析法和⾃下⽽上分析法。

⾃上⽽下就是从⽂法的开始符号出发,向下推导,推出句⼦。

⽽⾃下⽽上分析法采⽤的是移进归约法,基本思想是:⽤⼀个寄存符号的先进后出栈,把输⼊符号⼀个⼀个地移进栈⾥,当栈顶形成某个产⽣式的⼀个候选式时,即把栈顶的这⼀部分归约成该产⽣式的左邻符号。

语法分析只考虑构成该句⼦的语法单位是否符合语法规则。

例如在分析除法表达式时在语法分析阶段只分析运算符左右两边是否为变量、常量、表达式等,⽽不去管除数是否为0。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

A、解释程序所谓解释程序是高级语言翻译程序的一种,它将源语言(如BASIC)书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。

就像外语翻译中的“口译”一样,说一句翻一句,不产生全文的翻译文本。

这种工作方式非常适合于人通过终端设备与计算机会话,如在终端上打一条命令或语句,解释程序就立即将此语句解释成一条或几条指令并提交硬件立即执行且将执行结果反映到终端,从终端把命令打入后,就能立即得到计算结果。

这的确是很方便的,很适合于一些小型机的计算问题。

但解释程序执行速度很慢,例如源程序中出现循环,则解释程序也重复地解释并提交执行这一组语句,这就造成很大浪费。

B、编译程序这是一类很重要的语言处理程序,它把高级语言(如FORTRAN、COBOL、Pascal、C等)源程序作为输入,进行翻译转换,产生出机器语言的目标程序,然后再让计算机去执行这个目标程序,得到计算结果。

编译程序工作时,先分析,后综合,从而得到目标程序。

所谓分析,是指词法分析和语法分析;所谓综合是指代码优化,存储分配和代码生成。

为了完成这些分析综合任务,编译程序采用对源程序进行多次扫描的办法,每次扫描集中完成一项或几项任务,也有一项任务分散到几次扫描去完成的。

下面举一个四遍扫描的例子:第一遍扫描做词法分析;第二遍扫描做语法分析;第三遍扫描做代码优化和存储分配;第四遍扫描做代码生成。

值得一提的是,大多数的编译程序直接产生机器语言的目标代码,形成可执行的目标文件,但也有的编译程序则先产生汇编语言一级的符号代码文件,然后再调用汇编程序进行翻译加工处理,最后产生可执行的机器语言目标文件。

在实际应用中,对于需要经常使用的有大量计算的大型题目,采用招待速度较快的编译型的高级语言较好,虽然编译过程本身较为复杂,但一旦形成目标文件,以后可多次使用。

相反,对于小型题目或计算简单不太费机时的题目,则多选用解释型的会话式高级语言,如BASIC,这样可以大大缩短编程及调试的时
B、编译程序指最终生成可脱离原编辑环境运行的程序,如EXE、COM、DLL 等,解释程序指必须运行在编程环境或与编程环境相当的解释文件的支持;编译程序通常最终为二进制文件,可以被计算机直接识别并运行,解释程序不能直接被计算机识别只能是从程序中读一行被相关的解释环境“翻译”一行再执行一行的运行,所以无论速度还是效率还是运行所需要的环境都比编译程序差很多,像ASP、PHP、BASIC等都是解释程序。

相关文档
最新文档