编译原理基本概念

1. 编译程序

编译程序是一种翻译程序,它将高级语言所写的源程序翻译成等价的机器语言或汇编语言的目标程序。

2. 词法分析(Lexical analysis或Scanning)和词法分析程序(Lexical analyzer或Scanner)

词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用lex等工具自动生成。

3. 语法分析(Syntax analysis或Parsing)和语法分析程序(Parser) 语法分析是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等.语法分析程序判断源程序在结构上是否正确.源程序的结构由上下文无关文法描述.

4. 语义分析(Syntax analysis)及中间代码生成

语义分析是编译过程的一个逻辑阶段. 语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查, 进行类型审查.例如一个C程序片断: int arr[2],b; b = arr * 10;

源程序的结构是正确的.

语义分析将审查类型并报告错误:不能在表达式中使用一个数组变量,赋值语句的右端和左端的类型不匹配.语义分析时,根据语句的含义,可对它进行翻译,用另一种语言形式(比源语言更接近于目标语言的一种中间代码或直接用目标语言)来描述这种语义。

5. 代码优化

代码优化的任务是对前阶段产生的中间代码进行等价变换或改造,以期获得更为高效的,即省时间和空间的代码。

6. 目标代码生成

目标代码的生成的任务是将中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。

7. 遍

8. 前端(Front-end)和后端(Back end)

有时,常常把编译的过程分为前端(front end)和后端(back end),前端由那样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。通常这些阶段包括词法分析、语法分析、语义分析和中间代码生成,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符号表管理工作。 后端工作指那

些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。编译程序和解释程序

9. Lex

一个词法分析程序的自动生成工具。它输入描述构词规则的一系列正规式,然后构建有穷自动机和这个有穷自动机的一个驱动程序,进而生成一个词法分析程序.

10. Yacc

一个语法分析程序的自动生成工具。它接受语言的文法,构造一个LALR(1)分析程序.因为它采用语法制导翻译的思想,还可以接受用C语言描述的语义动作,从而构造一个编译程序. Yacc 是 Yet another compiler compiler的缩写.

11. 源语言(Source language)和源程序(Source program) 被编译程序翻译的程序称为源程序,书写该程序的语言称为源语言.

12. 目标语言(Object language or Target language)和目标程序(Object program or Target program)

编译程序翻译源程序而得到的结果程序称为目标程序, 书写该程序的语言称为目标语言.

13. 中间语言(中间表示)(Intermediate language(representation)) 在进行了语法分析和语义分析阶段的工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间表示或中间代码。所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统复杂性介于源程序语言和机器语言之间,容易将它翻译成目标代码。另外,还可以在中间代码一级进行与机器无关的优化。常见的中间代码形式有:逆波兰式、三元式、四元式、树形表示和三地址代码。

14. 文法(Grammars)

文法是用于描述语言的语法结构的形式规则。文法G定义为四元组(VN,V T,P,S)。其中VN为非终结符号(或语法实体,或变量)集;V T为终结符号集;P为产生式(也称规则)的集合;产生式(规则)是形如α→β或 a ::=b 的(a , b)有序对,其中α∈(VN∪V T)*且至少含有一个非终结符,而β∈(VN∪V T)*。VN,V T和P是非空有穷集。S称作识别符号或开始符号,它是一个非终结符,至少要在一条规则中作为左部出现。

一个文法的例子: G=( VN ={A,R}, P ={0,1} ,P ={A→0R,A→01,R→A1}, S =A)

15. 文法分类(A hierarchy of Grammars)

著名语言学家Noam Chomsky定义了四类文法和四种形式语言类,文法的四种类型分别是0型、1型、2型和3型。几类文法的差别在于对产生式施加不同的限制,分别是:

0型文法(短语结构文法)(phrase structure grammars):

设G=(VN,V T,P,S),如果它的每个产生式α→β是这样一种结构α∈(VN∪V T)*且至少含有一个非终结符,而β∈(VN∪V T)*,则G是一个0型文法。

1型文法(上下文有关文法)(context-sensitive grammars):

设G=(VN,V T,P,S)为一文法|α|,若P中的每一个产生式α→β均满足|β|≥|α|,仅仅S→ε除外,则文法G是1型或上下文有关的。

2型文法(上下文无关文法)(context-free grammars):

设G=(VN,V T,P,S),若P中的每一个产生式α→β满足:α是一非终结符,β∈(VN∪V T)*则此文法称为2型的或上下文无关的。

3型文法(正规文法)(regular grammars):

设G=(VN,V T,P,S),若P中的每一个产生式的形式都是A→aB或A→a,其中A和B都是非终结符,a是终结符,则G是3型文法或正规文法。

0型文法产生的语言称为0型语言。

1型文法产生的语言称为1型语言,也称作上下文有关语言。 2型文法产生的语言称为2型语言,也称作上下文无关语言。 3型文法产生的语言称为3型语言,也称作正规语言。

16. 句型(Sententialform),句子(Sentence)和语言(Language) 设G[S]是一文法,如果符号串x是从识别符号推导出来的,即有S称x是文法G[S]的句型。若x仅由终结符号组成,即S为G[S]的句子。

文法G所产生的语言定义为集合{x|S

x,其中S为文法识别符号,且x∈V T*}。

x,则

x,x∈V T*,则称x

可用L(G) 或L(G[S])表示该集合。

17. 推导(Derive)和语法树(Parse tree)

推导的概念:分别定义V*中的符号之间的关系直接推导的推导

和长度为n(n≥0)的推导

、长度为n(n≥1)

(1)如α→β是文法G=(VN,V T,P,S)的规则(或说是P中的一个产生式),γ和δ是V*中的任意符号,若有符号串v,w满足: v=γαδ,w=γβδ

则说v(应用规则α→β)直接产生w,或说,w是v的直接推导,或说,w直接归约到v,记做vw。

(2)如果存在直接推导的序列: vw0 w1 w2… wnw,(n>0)

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4