编译与解释

编译过程概述


    词法分析——对源程序从左至右逐个字符地扫描,从中识别出一个个单词符号。

例子:正规式与自动机

 

    语法分析——在词法分析的基础上,根据语言的语法规则将单词序列分解成各类语法单位,如“表达式”、“语句”、“程序”等。

例子:0型文法、上下文有关文法、上下文无关文法。

 

    语义分析——进行类型分析和检查。程序语言中一个数据类型一般包括两方面内容:类型的载体及其上的运算。例如:整除取余运算符只能对整形数据进行运算,若其运算对象中有浮点数就认为是类型不匹配的错误。

 

    中间代码生成——根据语义分析的输出生成的中间代码。中间代码是一种简单且含义明确的记号系统,可以有若干种形式,他们的共同特征是与具体的机器无关


    语义分析与中间代码生成所依据的是语义规则。

 

    代码优化——优化过程可以在中间代码生成阶段进行,也可以在目标代码生成阶段进行。优化所依据的原则是程序的等价变换规则。

 

    目标代码生成——把中间代码转换成特定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码,目标代码生成工作与具体的及其密切相关


         1、编译器对高级语言源程序的处理过程可以划分为词法分析、语法分析、语义分析、中间代码生成代码优化、目标代码生成等几个阶段,其中中间代码生成代码优化并不是每种编译器都必需的。


         2、高级语言源程序的编译过程分为若干个阶段,分配寄存器属于代码生成阶段的工作


         3、编译程序对C语言源程序进行语法分析时,可以确定变量是否定义或声明


解释程序基本原理

 

    解释程序在词法、语法和语义分析方面与编译程序的工作原理基本相同,但是在运行用户程序时,它直接执行源程序或源程序的中间表示形式


    解释程序不产生源程序的目标程序,这是它与编译程序的主要区别。

 

编译与解释的区别

 

·效率:编译比解释方式可能取得更高的效率。解释方式在运行时可能需要反复扫描源程序;编译方式创建目标程序运行的时间比解释时间长,但编译一次就可以多次运行。


·灵活性:解释程序需要反复检查源程序,所以它比编译方式更加灵活。


·可移植性:解释器一般用某种程序设计语言编写的,因此只要对解释器进行重新编译,就可以使解释器运行在不同的环境中。



你可能感兴趣的:(编译)