搜档网
当前位置:搜档网 › 编译原理知识点总结

编译原理知识点总结

编译原理知识点总结
编译原理知识点总结

考试题型:填空24%+简答4*4=16%+解答4*15=6

Chapter 1重要概念

1.什么编译程序?P3

答:编译程序的主要功能是把用高级语言编写的源程序翻译为等价的目标程序。

2.编译程序的工作过程?(6个阶段)P4

1、词法分析程序

2、语法分析程序

3、语义分析程序

4、中间代码生成

5、代码优化程序

6、目标代码生成

(不做优化是4个阶段,5、6不要)

3.编译程序的逻辑结构?P4 图1-2 编译程序的逻辑结构

4.执行高级语言编写的程序:(编译执行、解释执行)

1)按编译方式在计算机上执行用高级语言编写的程序,一般须经过两个阶段。第一个阶段称为编译阶段,其任务是由编译程序将源程序编译为目标程序,若目标程序不是机器代码,而是汇编语言程序,则尚需汇编程序再行汇编为机器代码程序;第二阶段称为运行阶段,其任务是在目标计算机上执行编译阶段所得到的目标程序。

2)用高级语言编写的程序也可以通过解释程序来执行。解释程序也以源程序作为它的输入,它与编译程序的主要区别是在解释程序的执行过程中不产生目标程序,而是解释执行源程序本身。

缺点:这种边翻译边执行的方式工作效率很低,但由于解释程序的结构比编译程序简单,且占用内存较少,在执行过程中也易于在源程序一级对程序进行修改,因此一些规模较小的语言,如BASIC,也常采用此种方式。

5.P11 第一段

编译程序的各部分之间的关系,是指他们之间的逻辑关系,而不一定是执行时间上的先后顺序,事实上,可按不同的执行流程来组织上述各部分的工作,这在很大程度上依赖与编译过程中对源程序扫描的遍数,以及如何划分各遍扫描所进行的工作。此处所说的“遍”,是指对源程序或其内部表示从头到尾扫视一次,并进行有关的加工处理工作。

(执行过程:单遍扫描、多遍扫描(大多数))

Chapter 2 前后文无关文法和语言

1.文法和语言的形式定义

产生语言就是制定出有限个规则(文法),借助于它们,就能产生出此语言的全部句子。2.文法规则四要素:

文法 :四要素(VN,VT,S,P)。

1)产生语言的规则中的一系列需定义的语法范畴的名字称为非终结符号(大写字母),其集合记为 VN

2)规则中不需进一步定义的基本符号称为终结符号,其集合记为VT

3)非终结符中最终需定义的那个为推导句子开始的语法范畴,称其为开始符号或识别符号,

记作S

4)每一规则是用 ::= 或 -> 连接起来的有序对,也称为产生式,用P表示.

3.句型的分析是指构造一种算法,用以判断所给符号串是否为某一文法的句型(或句子) 。

分两类方法:

自顶向下分析:从开始符推导出句子或句型

自底向上分析:从句子或句型归约出开始符

4.短语和句柄

语法树的应用——语法分析(自顶向下分析,自底向上分析)

用语法树进行句型分析:

用语法树自顶向下进行推导,---最右推导

用语法树自底向上进行归约。--最左规约

5.文法和语言的Chomsky分类

1)0型文法或短语结构文法(PSG)

2)1型文法或前后文有关文法(CSG)

3)2型文法或前后文无关文法(CFG).

4)3型文法或正规文法。(左线性文法+右线性文法)

编译过程的词法分析使用正规文法(3型文法)描述单词结构;

语法分析采用前后文无关文法(2型文法)描述语句结构

课堂练习

1)Chomsky定义的四种形式语言文法分别为0型文法,1型文法,2型文法 ,3型文法,

其中3型文法用于描述词法,2型文法用于描述语法。

2)递归文法产生的语言语句集合是无限集合。

3)规范推导是最右推导,规范归约是最左归约。

定义每种语言的文法都是不(不|—)唯一的。

文法的化简与改造主要包括无用符号和无用产生式的删除,ε-产生式的消除 ,单产生式

的消除几项内容。

大题:1)画出句子的语法树,找出所有的短语,直接短语和句柄(运算符最低原则)

Chapter3 词法分析及词法分析程序

1)了解6种定义,特点

正规文法、状态转换图、有限自动机FA(NFA、DFA)、状态转换矩阵、正规表达式、正规集

大题:正规式--状态图(NFA)--确定化---最小化

顺序:或,连接,闭包

(1)状态转换图的五要素

1)有限非空状态集K

2)有限输入字母表∑

3)状态之间的映射关系f

4)初态S0∈K

5)终态集Z∈K

(2)1.确定的有限自动机(DFA)

若FA在每个状态,对输入符号的下一状态是唯一的,称此种FA为确定的有限自动机DFA

2.非确定的有限自动机(NFA)

若FA在某个状态,对输入符号的下一状态不是唯一的,而是状态集的一个子集,称此种FA

为非确定的有限自动机NFA。

(3)正规式中用到符号:

* 闭包最优(优先顺序可用括号加以改变)

·连接(不引起混乱可略去)次之

| 或最后

正规式:将文法的终结符号用以上三种运算符连接起来组成的正规文法的表达式,是另一种用于描述正规文法的直观表示。

正规集:正规式所描述的字符串的集合。

(4)词法分析方法(正规文法、状态转换图、状态转换矩阵)

(5)单词描述(正规文法、状态转换图、有限自动机FA(NFA、DFA)、状态转换矩阵、正规表达式、正规集)

课堂练习:

1.单词的编译器内部表示为二元式(class , value)

2.单词的描述形式有许多种,包括文法形式正规文法,图示方式状态转换图,便于计算机存储的状态转换矩阵,自动机又分为NFA,DFA两种,正规表达式和正规集最便于体现单词的结构

3.Bell实验室M.Lesk等人用C语言研制的一个词法分析程序的自动生成工具叫LEX

4.判断(对)所有带有ε的自动机都是非确定的自动机

Chapter 4 语法分析和语法分析程序

1.语法分析方法:

自顶向下分析法:如递归下降法,LL(1)等(最左推导)

自底向上分析法:如算符优先法(分析表达式常用),LR等(最右规约)

大题LR、SLR1

(1)LL(1)---预测分析法(LL(1)分析法→最左推导→LL(1)分析表)

1) 编写文法,消除二义性;

2) 消除左递归、提取左因子;

3) 求 FIRST 集和 FOLLOW 集

FIRST(γ):γ可以推出的开头的终结符号(或ε)

FOLLOW(A):在所有句型中可能直接跟在A之后的终结符号

4)检查是不是 LL(1) 文法

(若不是 LL(1),说明文法的复杂性超过自顶向下方法的分析能力)

5)按照 LL(1) 文法构造预测分析表

6)实现预测分析器

(2)算符优先分析法(构造算符优先矩阵→分析句子)

广义运算符: 文法的终结符号

广义运算对象: 非终结符

(3)LR(0)分析法

A.引入S’->S拓广文法

B.构造识别所有规范句型全部的活前缀的DFA

C.构造LR(0)分析表rj---产生式编号

D.分析句子

(4)SLR(1)分析表

课堂练习

1、LL(1)分析器由缓冲区,分析栈,分析表,

控制程序四部分组成。

2、语法分析的方法主要分为自顶向下和自底向上两大类,前者又包括LL(1)分析法和递归下降法两种具体方法,后者又包括LR分析法和算符优先分析法两种具体方法

3、判断

(错)1、自顶向下语法分析采用规范推导。(最左)

(对)2、所有左递归文法均无法直接用LL(1)分析方法进行语法分析。

(错)3、所有的自底向上语法分析,每步分析都是找出当前句型的句柄进行归约。(算符优先矩阵→最左素短语)

(对)4、一个文法如果是LR(0)文法,则必定是LR(1)文法。(更多的文法适应SLR(1))

Chapter 5 语法制导翻译及中间代码生成

1)语法制导翻译:在一遍扫描中,由语法分析引导,既完成语法分析任务,又完成语义分析和中间代码生成方面的工作。

实现方法:对文法中的每一产生式,都附加一“语义动作”或“语义子程序”,且在语法分析过程中,每当用一产生式进行推导或归约时,语法分析程序除执行相应的语法分析动作之外,同时调用相应的语义子程序。

2)属性文法:一种附带有语义属性的前后文无关文法。

3)中间代码:介于源程序与目标程序之间的代码形式,

形式简单、含义明确、结构清晰、易于优化

4)四元式:(操作符,第一操作数,第二操作数,结果)

大题:1.算术表达式

2.布尔表达式改进记值

3.程序流程控制语句的翻译(序列、条件分支、while循环)

最新编译原理试题汇总+编译原理期末试题(8套含答案+大题集)

编译原理考试题及答案汇总一、选择 1.将编译程序分成若干个“遍”是为了_B__。 A . 提高程序的执行效率 B.使程序的结构更加清晰 C. 利用有限的机器内存并提高机器的执行效率 D.利用有限的机器内存但降低了机器的执行效率 2.正规式 MI 和 M2 等价是指__C__。 A . MI 和 M2 的状态数相等 B.Ml 和 M2 的有向弧条数相等。 C .M1 和 M2 所识别的语言集相等 D. Ml 和 M2 状态数和有向弧条数相等 3.中间代码生成时所依据的是 _C_。 A.语法规则 B.词法规则 C.语义规则 D.等价变换规则 4.后缀式 ab+cd+/可用表达式__B_来表示。 A. a+b/c+d B.(a+b)/(c+d) C. a+b/(c+d) D. a+b+c/d 6.一个编译程序中,不仅包含词法分析,_A____,中间代码生成,代码优化,目标代码生成等五个部分。 A.( ) 语法分析 B.( )文法分析 C.( )语言分析 D.( )解释分析 7.词法分析器用于识别__C___。 A.( ) 字符串 B.( )语句 C.( )单词 D.( )标识符 8.语法分析器则可以发现源程序中的___D__。 A.( ) 语义错误 B.( ) 语法和语义错误 C.( ) 错误并校正 D.( ) 语法错误 9.下面关于解释程序的描述正确的是__B___。 (1) 解释程序的特点是处理程序时不产生目标代码 (2) 解释程序适用于 COBOL 和 FORTRAN 语言 (3) 解释程序是为打开编译程序技术的僵局而开发的 A.( ) (1)(2) B.( ) (1) C.( ) (1)(2)(3) D.( ) (2)(3) 10.解释程序处理语言时 , 大多数采用的是__B___方法。 A.( ) 源程序命令被逐个直接解释执行 B.( ) 先将源程序转化为中间代码 , 再解释执行 C.( ) 先将源程序解释转化为目标程序 , 再执行 D.( ) 以上方法都可以 11.编译过程中 , 语法分析器的任务就是__B___。 (1) 分析单词是怎样构成的 (2) 分析单词串是如何构成语句和说明的 (3) 分析语句和说明是如何构成程序的 (4) 分析程序的结构 A.( ) (2)(3) B.( ) (2)(3)(4)C.( ) (1)(2)(3) D.( ) (1)(2)(3)(4) 12.编译程序是一种___C__。 A. ( ) 汇编程序 B.( ) 翻译程序 C.( ) 解释程序 D.( ) 目标程序 13.文法 G 所描述的语言是_C____的集合。 A. ( ) 文法 G 的字母表 V 中所有符号组成的符号串 B.( ) 文法 G 的字母表 V 的闭包 V* 中的所有符号串 C.( ) 由文法的开始符号推出的所有终极符串 D. ( ) 由文法的开始符号推出的所有符号串 14.文法分为四种类型,即 0 型、1 型、2 型、3 型。其中 3 型文法是___B__。 A. ( ) 短语文法 B.( ) 正则文法 C.( ) 上下文有关文法 D.( ) 上下文无关文法15.一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 __D___。 A.( ) 句子 B.( ) 句型 C.( ) 单词 D.( ) 产生式

四川大学编译原理期末复习总结

一、简答题 1.什么是编译程序 答:编译程序是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序。 将高级程序设计语言程序翻译成逻辑上等价的低级语言(汇编语言,机器语言)程序的翻译程序。 2.请写出文法的形式定义 答:一个文法G抽象地表示为四元组 G=(Vn,Vt,P,S) –其中Vn表示非终结符号 –Vt表示终结符号,Vn∪Vt=V(字母表),Vn∩Vt=φ –S是开始符号, –P是产生式,形如:α→β(α∈V+且至少含有一个非终结符号,β∈V*) 3.语法分析阶段的功能是什么 答:在词法分析的基础上,根据语言的语法规则,将单词符号串分解成各类语法短语(例:程序、语句、表达式)。确定整个输入串是否构成语法上正确的程序。 4.局部优化有哪些常用的技术 答:优化技术1—删除公共子表达式 优化技术2—复写传播 优化技术3—删除无用代码 优化技术4—对程序进行代数恒等变换(降低运算强度) 优化技术5—代码外提 优化技术6—强度削弱 优化技术7—删除归纳变量 优化技术简介——对程序进行代数恒等变换(代数简化) 优化技术简介——对程序进行代数恒等变换(合并已知量) 5.编译过程分哪几个阶段 答:逻辑上分五个阶段:词法分析、语法分析、语义分析与中间代码生成、代码优化、目标代码生成。每个阶段把源程序从一种表示变换成另一种表示。 6. 什么是文法 答:文法是描述语言的语法结构的形式规则。是一种工具,它可用于严格定义句子的结构; 用有穷的规则刻划无穷的集合;文法是被用来精确而无歧义地描述语言的句子的构成方式;文法描述语言的时候不考虑语言的含义。 7. 语义分析阶段的功能是什么 答:对语法分析所识别出的各类语法范畴分析其含义,进行初步的翻译(翻译成中间代码); 并对静态语义进行审查。 8.代码优化须遵循哪些原则 答:等价原则:不改变运行结果 有效原则:优化后时间更短,占用空间更少 合算原则:应用较低的代价取得较好的优化效果 9.词法分析阶段的功能是什么 答:

编译原理知识点

1.解释程序:不生成目标代码 编译程序:生成目标代码 2.编译程序组成:8个 分析< 前端>:(词法分析程序、语法分析程序、语义分析程序、中间代码生成程序) 综合< 后端>:(代码优化程序、目标代码生成程序) 贯穿始末:表格管理程序、出错处理程序 3.文法四元组: 终结符号集合Vt 、非终结符号集合Vn、产生式集合P、识别符号(开始符号)S V T∩V N=Φ 文法-> 语言(推导、规约)唯一;语言-> 文法(凑规则)不唯一。 4.文法分类: 0型文法(短语结构文法):左侧至少含有一个非终结符 1型文法(上下文有关文法):左侧长度<= 右侧长度S->ε除外,S不能出现在右侧2型文法(上下文无关文法):左侧只能有一个非终结符( 语法分析) 3型文法(正规文法):A-> aB A->a 右线性;( 词法分析) A->Ba 或A->a 左线性(看非终结符位置) 5.A*=A0 ∪A+ A0 ={ε} !={ } =Φ空集 A+ =AA* =A*A 6.句型:符号串x是从识别符号S推导出来的,x称为一个句型 句子:x仅由终结符号组成,仅含终结符号的句型是一个句子 短语:子树的末端(叶子)从左至右连成的串(包括整棵语法树) 简单子树:只含有单层分枝的子树 直接短语( 简单短语):由简单子树的叶子组成 句柄:最左边的直接短语(不一定含终结符) 素短语:至少含有一个终结符的短语,并且除它自身之外不再含任何更小的素短语最左素短语:最左边的素短语 短语:P(相对于T、E)、P+T(相对于E)、i(相对于P、F)、P+T+i(相对于E)直接短语:P、i 句柄:P (最左边的直接短语) 素短语:P+T 、i (至少含有一个终结符的短语)最左素短语:P+T 7.二义性文法:有两个不同的最左推导或有两个不同的最右推导或能产生两棵语法树 8.文法产生式正规式 规则1 A→xB B→y A = xy

编译原理概念期末总结复习

翻译程序:把一种语言程序转换成另一种语言程序,且在功能上是相同的这样的程序。 编译程序:把高级语言转换成低级语言,且在功能上是相同的这样的程序。 解释程序:边解释边执行源程序的程序。区别:编译程序有中间代码,而解释程序没有。编译过程的五个阶段: 1、词法分析任务:对构成源程序的字符串进行扫描和分解,识别出一个个单词。 2、语法分析任务:在词法分析的基础上,根据语言规则,把单词符号串分解成各类语法 单位。 3、语义分析和中间代码产生任务:对语法分析所识别出的各类语法范畴,分析其含义, 并进行初步翻译。 4、优化任务:对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效 的目标代码。 5、目标代码生成任务:把中间代码变换成特定机器上的低级语言代码。 编译程序的七个部分词法分析器,语法分析器、语义分析与中间代码产生器、优化器、目标代码生成器、表格管理和出错处理。 编译程序生成的五个办法:机器语言、高级语言、移植、自编译方式和使用工具自动生成。词法规则:指单词符号的形成规则。(也就是正规式) 语法规则:规定了如何从单词符号形成更大的结构。就是语法单位的形成规则。 空字:不包含任何符号的序列。 闭包: 中所有的符号组成的集合。 上下文无关文法是指:所定义的语法范畴是完全独立于这种范畴可能出现的环境的文法。上下文无关文法的四个组成部分:一组终结符号、一组非终结符号、一个开始符号和一组产生式。 终结符号也就是不可再分的基本符号。 非终结符号是用来代表语法范畴,表示一定符号串的集合。 开始符号是语言中我们最感兴趣的语法范畴。 产生式是定义语法范畴的书写规则。 句子:文法中从开始符号推导的终结符号串。 句型:从开始符号推导的符号串。 语言:文法中所有句子的集合。 程序语言的单词符号分为五种:关键字、标识符、常数、运算符和界符。 二元式表示:(种类,属性) 正规式的运算符有三种:或,连接和闭包。优先顺序是:闭包,连接,或。 DFA怎么识别字:若存在一条从初态结点到某一终态结点的通路,且这条通路上所有弧的标记符连接成的字是a,则称a可为DFA所识别。 DFA怎么识别空字:若DFA的初态结点同时又是终态结点,则空字可为DFA所识别。NFA怎么识别字:若存在一条从某一初态结点到终态结点的通路,且这条通路上所有弧的标记字依序连接成的字等于a,则称a可为NFA识别。 NFA怎么识别空字:若M的某些结点即是初态又是终态结点,或者存在一条从某个初态结点到某个终态结点的空通路,那么,空字可为M所识别。 语言的语法结构是用上下文无关文法描述的。 语法分析分为两类:自上而下分析法,自下而上分析法。 自上而下分析法面临的问题:1.文法的左递归问题。2.回溯3.成功可能是暂时的,产生虚假匹配。4.难于知道输入串中出错的确切位置。5.效率低,代价高。

编译原理知识点汇总

编译原理的复习提纲 1.编译原理=形式语言+编译技术 2.汇编程序: 把汇编语言程序翻译成等价的机器语言程序 3.编译程序: 把高级语言程序翻译成等价的低级语言程序 4.解释执行方式: 解释程序,逐个语句地模拟执行 翻译执行方式: 翻译程序,把程序设计语言程序翻译成等价的目标程序 5.计算机程序的编译过程类似,一般分为五个阶段: 词法分析、语法分析、语义分析及中间代码生成、代码优化、目标代码生成 词法分析的任务: 扫描源程序的字符串,识别出的最小的语法单位(标识符或无正负号数等) 语法分析是: 在词法分析的基础上的,语法分析不考虑语义。语法分析读入词法分析程序识别出的符号,根据给定的语法规则,识别出各个语法结构。 语义分析的任务是检查程序语义的正确性,解释程序结构的含义,语义分析包括检查变量是否有定义,变量在使用前是否具有值,数值是否溢出等。

语法分析完成之后,编译程序通常就依据语言的语义规则,利用语法制导技术把源程序翻译成某种中间代码。所谓中间代码是一种定义明确、便于处理、独立于计算机硬件的记号系统,可以认为是一种抽象机的程序 代码优化的主要任务是对前一阶段产生的中间代码进行等价变换,以便产生速度快、空间小的目标代码 编译的最后一个阶段是目标代码生成,其主要任务是把中间代码翻译成特定的机器指令或汇编程序 编译程序结构包括五个基本功能模块和两个辅助模块 6.编译划分成前端和后端。 编译前端的工作包括词法分析、语法分析、语义分析。编译前端只依赖于源程序,独立于目标计算机。前端进行分析 编译后端的工作主要是目标代码的生成和优化后端进行综合。独立于源程序,完全依赖于目标机器和中间代码。 把编译程序分为前端和后端的优点是: 可以优化配置不同的编译程序组合,实现编译重用,保持语言与机器的独立性。 7.汇编器把汇编语言代码翻译成一个特定的机器指令序列 第二章 1.符号,字母表,符号串,符号串的长度计算P18,子符号串的含义,符号串的简单运算XY,Xn, 2.符号串集合的概念,符号串集合的乘积运算,方幂运算,闭包与正闭包的概念P19,P20A0 ={ε} 3.重写规则,简称规则。非xx(V

编译原理结课论文

目录

1.绪论 概述 “编译原理”是一门研究设计和构造编译程序原理课程,是计算机各专业的一门重要的专业课。编译原理这门课程蕴含着计算机学科中解决问题的思路和解决问题的方法,对应用软件和系统软件的设计与开发有一定的启发和指导作用。“编译原理”是一门实践性很强的课程,要掌握这门课程中的思想,就必须要把所学到的知识应用于实践当中。而课程设计是将理论与实践相互联系的一种重要方式。 设计目的 课程设计是对学生的一种全面综合素质训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,设计题中的问题比平时的练习题要复杂很多,但也更接近实际。编译原理这门课程安排的课程设计的目的是旨在要求学生进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容,选择合适的数据逻辑结构解决问题,然后编制算法和程序完成设计要求,从而进一步培养学生独立思考问题、分析问题、解决实际问题的能力。 设计题目及要求 基于这个学期所学习的内容以及自己所掌握到的知识,本次我所要设计的题目是赋值语句的四元式生成。

要求: (1)设计语法制导生成赋值语句的四元式的算法; (2)编写代码并上机调试运行通过; (3)输入一赋值语句; (4)输出相应的表达式的四元式; 2.背景知识 语法制导翻译方法 语法制导翻译的方法就是为每个产生式配上一个翻译子程序(称语义动作或语义子程序),并在语法分析的同时执行这些子程序。语义动作是为产生式赋予具体意义的手段,它一方面指出了一个产生式所产生的符号串的意义,另一方面又按照这种意义规定了生成某种中间代码应做哪些基本动作。在语法分析的过程中,当一个产生式获得匹配(对于自顶向下分析)或用于规约(对于自底向上分析)时,此产生式相应的语义子程序就进入工作,完成既定的翻译任务。语法制导翻译分为自底向上语法制导翻译和自顶向下语法制导翻译。 属性文法 属性文法是编译技术中用来说明程序语言语义的工具,也是当前实际应用中比较流行的一种语义描述方法。属性是指与文法符号的类型和值等有关的一些信息,在编译中用属性描述处理对象的特征。属性文法是一种

编译原理考试重点题

1、设正规式r= a(a|b)*, 将r转换为相应的正规文法。 令S为文法开始符,首先形成S →a(a|b)*,然后形成S →aA和A →(a|b)*,再变换成: S→aA A→ε A→(a|b)A, 进而变换成正规文法形式: S→aA A→ε A→aA A→bA 2、令文法G[S] S→cC,S→c,C→cC,C→dC,C→c,C→d, 将该文法转换为相应的正规式。 首先有S=cC|c, C=(cC|dC)|(c|d) =(c|d)C|(c|d) =(c|d)*|(c|d) =(c|d)+ 进一步有

S=c(c|d)+|c =c(c|d)* c(c|d)*即为该文法所对应的正规式 令文法G[S]为: S->S+A|A A->A*B|B B->(S)|a|b (1)分析说明a*a+b是该文法的一个句型; (2)指出该句型的所有短语、直接短语和句柄。(1)该字符串对应的语法树为: 所以a*a+b为该文法的句型。 (2)短语为:a,a,a*a,b,a*a+b; 直接短语为:a,a,b; 句柄为:最左边的a 令文法G[S]为: S->aCcDe C->b|Cb D->d

(1)分析说明aCbcde是它的一个句型; (2)指出该句型的所有短语、直接短语和句柄。 (1)此句型对应语法树如下,故aCbcde为此文法的一个句型。 (2)短语为:aCbcde,Cb,d; 直接短语:Cb,d; 句柄: Cb。 构造正规式(a|b)*相应的最小化DFA。 1、首先构造对应的NFA: 2、将NFA确定化: 3、对其最小化:

设有非确定的有自限动机NFA M=({A,B,C},{0,1},δ,{A},{C}),其中: δ(A,0)={C}, δ(A,1)={A,B}, δ(B,1)={C}, δ(C,1)={C}。 请画出状态转换距阵和状态转换图。 状态转换距阵为: 状态转换图为:

2021年编译原理知识点

1.解释程序:不生成目的代码 编译程序:生成目的代码 2.编译程序构成:8个 分析< 前端>:(词法分析程序、语法分析程序、语义分析程序、中间代码生成程序) 综合< 后端>:(代码优化程序、目的代码生成程序) 贯穿始末:表格管理程序、出错解决程序 3.文法四元组: 终结符号集合Vt 、非终结符号集合Vn、产生式集合P、辨认符号(开始符号)S V T∩V N=Φ 文法-> 语言(推导、规约)唯一;语言-> 文法(凑规则)不唯一。 4.文法分类: 0型文法(短语构造文法):左侧至少具有一种非终结符 1型文法(上下文关于文法):左侧长度<= 右侧长度S->ε除外,S不能出当前右侧2型文法(上下文无关文法):左侧只能有一种非终结符( 语法分析) 3型文法(正规文法):A-> aB A->a 右线性;( 词法分析) A->Ba 或A->a 左线性(看非终结符位置) 5.A*=A0 ∪A+ A0 ={ε} !={ } =Φ空集 A+ =AA* =A*A 6.句型:符号串x是从辨认符号S推导出来,x称为一种句型 句子:x仅由终结符号构成,仅含终结符号句型是一种句子 短语:子树末端(叶子)从左至右连成串(涉及整棵语法树) 简朴子树:只具有单层分枝子树 直接短语( 简朴短语):由简朴子树叶子构成 句柄:最左边直接短语(不一定含终结符) 素短语:至少具有一种终结符短语,并且除它自身之外不再含任何更小素短语

最左素短语:最左边素短语 短语:P(相对于T、E)、P+T(相对于E)、i(相对于P、F)、P+T+i(相对于E)直接短语:P、i 句柄:P (最左边直接短语) 素短语:P+T 、i (至少具有一种终结符短语)最左素短语:P+T 7.二义性文法:有两个不同最左推导或有两个不同最右推导或能产生两棵语法树 8.文法产生式正规式 规则1 A→xB B→y A = xy 规则2 A→xA|y A = x*y 右线性 A→Ax|y A = yx* 左线性 规则3 A→x A→y A = x|y 9.DFA 初态唯一,转换函数为单值映射 表达方式:转移矩阵、状态转换图 状态转换图上若存在一条从初态到某一终态道路,且这条路上所有弧标记符连成字符串为t,则称t被DFA接受。 10.NFA初态可为各种,转换函数为多值映射 拟定化:与某一NFA等价DFA不唯一 1.状态集合Iε-闭包 2.move函数 最小化:消除多余状态和合并等价状态 多余状态:从自动机开始状态出发,任何输入串也不能到达那个状态;或者从这个状态没有通路到达终态。

编译原理学习心得

编译原理学习心得 编译原理学习心得1 编译程序在计算机科学与技术的发展历史中发挥了巨大作用,是计算机系统的核心支撑软件。而“编译原理”这门课程一直以来是国内外大学计算机相关专业的重要课程。因为它的知识结构贯穿程序设计语言、系统环境以及体系结构,能以相对的视角体现从软件到硬件以及软硬件协同的整机概念。其理论基础又涉及形式语言与自动机、数据结构与算法等计算机学科的许多重要方面,为联系计算机科学理论和计算机系统的典范。 虽然编译原理这门课程在大多数的人里认为枯燥无味,学起来就像看天书一样。然而学习这门课程还是有一定的好处的。比如可以更加容易的理解在一个语言种哪些写法是等价的,哪些是有差异的,可以更加客观的比较不同语言的差异,并且学习新的语言的效率也会更加高,语言转换也会更加游刃有余。 不学“编译原理”这门课程的话,自己的编程思想会很浅显。而且编程也只仅仅停留在编程上,无法深入理解其中的原理。 学习编译原理的话,从文法、正规式、NFA与DFA的定义,下手,要用心动脑去体会 编译原理学习心得2

从联系最紧密的操作系统来说吧,你写多线程/多进程的程序就得和操作系统的知识打交道。写多线程得加锁吧,临界区、死锁的四个条件之类的标准的操作系统的内容吧(不得不吐槽一下,某国内一线电商干了三年的程序猿,写多线程居然不知道加锁,也是醉了)。进程间通信的几种方式什么管道、socket、共享内存等,这也是操作系统的内容吧。文件系统,这也是经常要打交道的东西。还有内存什么的,你做Android 开发,这些里边有很多东西都在系统层面被封装好了,但是你要是不知道原理,一旦出了错根本无从调试,况且你该不会打算写一辈子写Android 就是填逻辑吧。 然后,是编译原理,普通的程序猿是接触不到编译器或者虚拟机的开发的。但是这并不意味着编译原理就用不到。说个最常见的读取配置文件,只要你的配置文件有自定义的语法,你就要用编译原理的东西。还有类似于自动生成代码啦、正则表达式啦这些都算是编译原理的内容。你既然是写Java 的不了解虚拟机怎么可以,最基本的字节码总是需要能看懂的吧,分析一些疑难杂症的时候字节码还是很有用的。 最后,是计算机原理,如果只是做应用开发的话计算机原理其实不必要掌握的多深入,但是一些基本的概念还是要清楚的。比如寄存器、缓存、中断什么的,关键的时候可以帮助你调试。在一些对性能要求非常高的场合,也是很有作用的。此外,学了

《编译原理》总复习-07级

《编译原理》总复习-07级 第一章编译程序的概述 (一)内容 本章介绍编译程序在计算机科学中的地位和作用,介绍编译技术的发展历史,讲解编译程序、解释程序的基本概念,概述编译过程,介绍编译程序的逻辑结构和编译程序的组织形式等。 (二)本章重点 编译(程序),解释(程序),编译程序的逻辑结构。 (三)本章难点 编译程序的生成。 (四)本章考点 全部基本概念。 编译程序的逻辑结构。 (五)学习指导 引论部分主要是解释什么是编译程序以及编译的总体过程。因此学习时要对以下几个点进行重点学习:翻译、编译、目标语言和源语言这几个概念的理解;编译的总体过程:词法分析,语法分析、语义分析与中间代码的生成、代码优化、目标代码的生成,以及伴随着整个过程的表格管理与出错处理。 第三章文法和语言课外训练 (一)内容 本章是编译原理课程的理论基础,主要介绍与课程相关的形式语言的基本概念,包括符号串的基本概念和术语、文法和语言的形式定义、推导与归约、句子和句型、语法分析树和二义性文法等定义、文法和语言的Chomsky分类。 (二)本章重点 上下文无关文法,推导,句子和句型,文法生成的语言,语法分析树和二义性文法。(三)本章难点 上下文无关文法,语法分析树,文法的分类。 (四)本章考点 上下文无关文法的定义。 符号串的推导。 语法分析树的构造。 (五)学习指导 要构造编译程序,就要把源语言用某种方式进行定义和描述。学习高级语言的语法描述是学习编译原理的基础。上下文无关文法及语法树是本章学习的重点。语法与语义的概念;程序的在逻辑上的层次结构;文法的定义,文法是一个四元组:终结符号集,非终结符号集,开始符号、产生式集;与文法相关的概念,字符,正则闭包,积(连接),或,空集,产生式,推导,直接推导,句子,句型,语言,最左推导,最右推导(规范推导);学会用文法来描述语言及通过文法能分析该文法所描述的语言;语法树及二义性的概念、能通过画语法树来分析一个文法描述的语言是否具有二义性;上下文无关文法的定义和正规文法的定义,能判断一个语言的文法是哪一类文法。 附训练试题:

编译原理知识点

编译原理: 编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。编译原理是计算机专业设置的一门重要的专业课程。编译原理课程是计算机相关专业学生的必修课程和高等学校培养计算机专业人才的基础及核心课程,同时也是计算机专业课程中最难及最挑战学习能力的课程之一。编译原理课程内容主要是原理性质,高度抽象。 基本概念: 编译原理即是对高级程序语言进行翻译的一门科学技术, 我们都知道计算机程序由程序语言编写而成, 在早期计算机程序语言发展较为缓慢, 因为计算机存储的数据和执行的程序都是由0、1代码组合而成的, 那么在早期程序员编写计算机程序时必须十分了解计算机的底层指令代码通过将这些微程序指令组合排列从而完成一个特定功能的程序, 这就对程序员的要求非常高了。人们一直在研究如何如何高效的开发计算机程序, 使编程的门槛降低。 编译器: C语言编译器是一种现代化的设备, 其需要借助计算机编译程序, C语言编译器的设计是一项专业性比较强的工作, 设计人员需要考虑计算机程序繁琐的设计流程, 还要考虑计算机用户的需求。计算机的种类在不断增加, 所以, 在对C语言编译器进行设计时, 一定要增加其适用性。C语言具有较强的处理能力, 其属于结构化语言, 而且在

计算机系统维护中应用比较多, C语言具有高效率的优点, 在其不同类型的计算机中应用比较多。 C语言编译器前端设计 编译过程一般是在计算机系统中实现的, 是将源代码转化为计算机通用语言的过程。编译器中包含入口点的地址、名称以及机器代码。编译器是计算机程序中应用比较多的工具, 在对编译器进行前端设计时, 一定要充分考虑影响因素, 还要对词法、语法、语义进行分析。 1 词法分析 词法分析是编译器前端设计的基础阶段, 在这一阶段, 编译器会根据设定的语法规则, 对源程序进行标记, 在标记的过程中, 每一处记号都代表着一类单词, 在做记号的过程中, 主要有标识符、关键字、特殊符号等类型, 编译器中包含词法分析器、输入源程序、输出识别记号符, 利用这些功能可以将字号转化为熟悉的单词。 2 语法分析 语法分析是指利用设定的语法规则, 对记号中的结构进行标识, 这包括句子、短语等方式, 在标识的过程中, 可以形成特殊的结构语法树。语法分析对编译器功能的发挥有着重要影响, 在设计的过程中, 一定要保证标识的准确性。 3 语义分析 语义分析也需要借助语法规则, 在对语法单元的静态语义进行检查时, 要保证语法规则设定的准确性。在对词法或者语法进行转化

编译原理知识点总结 哈工程

第一章概论 1.什么是编译器?输入输出? 编译器是将一种语言翻译为另一种语言的计算机程序。 输入:源语言( source language) 编写的程序 输出:目标语言( target language ) 编写的程序。 2.汇编语言的优缺点 优点:汇编语言大大提高了编程的速度和准确度 缺点:编写起来也不容易,阅读和理解很难;而且汇编语言的编写严格依赖于特定的机器,所以为一台计算机编写的代码在应用于另一台计算机时必须完全重写。 3.什么是解释器?与编译器的区别? 解释程序是如同编译器的一种语言翻译程序。 与编译器的区别:它立即执行源程序而不是生成在翻译完成之后才执行的目标代码。 4.乔姆斯基分类结构有几种文法?名称?相互关系? 4种 名称: 0型无限制文法 1型上下文相关文法 2型上下文无关文法 3型正则文法 相互关系:其中的每一个都是其前者的专门化。 5.什么是扫描器?扫描器的功能是什么? 扫描器就是语法分析程序。 功能:依据词法规则,分析由字符组成的源程序,把它分割为一个一个具有独立意义的最小语法单位,即单词。 6.什么是编辑器?IDE中编辑器的新功能 编译器通常接受由任何生成标准文件(例如ASCII 文件)的编辑器编写的源程序。 IDE 中编辑器的新功能:尽管编辑器仍然生成标准文件,但会转向正被讨论的程序设计语言的格式或结构。这样的编辑器称为基于结构的,且它早已包括了编译器的某些操作;因此,程序员就会在程序的编写时而不是在编译时就得知错误了。从编辑器中也可调用编译器以及与它共用的程序,这样程序员无需离开编辑器就可执行程序。

7.什么是调试器,与编译器的关系 调试程序是可在被编译了的程序中判定执行错误的程序。 运行一个带有调试程序的程序与直接执行不同,这是因为调试程序保存着所有的或大多数源代码信息(诸如行数、变量名和过程)。它还可以在预先指定的位置(称为断点)暂停执行,并提供有关已调用的函数以及变量的当前值的信息。为了执行这些函数,编译器必须为调试程序提供恰当的符号信息。 8.编译器有哪几个功能模块?各模块的功能及输入输出 目标代码

编译原理概念总结

第一章 引论 ? 为什么要用编译器 ? 与编译器相关的程序 ? 翻译步骤 ? 编译器中的主要数据结构 1、语言处理器 1、简单的说,一个编译器就是一个程序,它可以阅读以某一种语言(源语言)编写的程序,并把该程序翻译成一个等价的、用另一种语言(目标语言)编写的程序。 2、编译器的重要任务之一就是报告它在翻译过程中发现的源程序中的错误。 3、使用编译器是为了提高编程的速度和准确度。 4、与编译器相关的程序:解释程序(interpreter )、汇编程序(assembler )、连接程序(linker )、装入程序(loader )、预处理器(preprocessor )、编辑器(editor )、调试程序(debugger )、描述器(profiler )、项目管理程序(project manager )。 5、解释器是另一种常见的语言处理器。它并不通过翻译的方法生成目标程序。从用户的角度来看,解释器直接利用用户提供的输入执行源程序中指定的操作。 6、一个源程序可能被分割成多个模块,并存放于独立的文件中。把源程序聚合在 一起的任务有时会由一个被称为预处理器(preprocessor )的程序独立完成。预处理器还负责把那些称为宏的缩写形式转换为源语言的语句。 7、连接器(linker )能够解决外部内存地址的问题。 8、加载器(loader )把所有的可执行目标文件放到内存中执行。 2、一个编译器的结构 Output Source Program Front end Back end Object

1、将编译器看成黑盒,则源程序映射为在语义上等价的目标程序,而这个映射由两部分组成:分析部分和综合部分。 2、分析部分把源程序分解成多个组成要素,并在这些要素之上加上语法结构。 3、综合部分根据中间表示和符号表中的信息来构造用户期待的目标程序。 4、编译器的第一个步骤:词法分析(lexical)或扫描(scanning)。词法分析器读入组成源程序的字符流,并且将它们组成有意义的词素(lexeme)的序列。词法分析器产生词法单元(token)。 5、分隔词素的空格会被词法分析器忽略掉。 6、编译器的第二个步骤:语法分析(syntax)或解析(parsing)。语法分析器使用由词法分析器生成的各个词法单元的第一个分量来创建树形的中间表示。 7、语义分析(static semantic analysis):语义分析器使用语法树和符号表中的信息 来检查源程序是否和语言定义的语义一致。它同时也收集类型信息,并把这些信息存放在语法树或符号表中,以便在随后的中间代码生成过程中使用。语义分析的一个重要部分是类型检查(type checking)。编译器检查每个运算符是否具有匹配的运算分量。 8、总的说,编译器的翻译步骤是:扫描程序----语法分析程序----语义分析程序---- 源代码优化程序----代码生成器----目标代码优化程序。 3、编译器结构中的主要数据结构 1、记号(token) 2、语法树(syntax tree) 3、符号表(symbol table) 4、常数表(literal table) 5、中间代码(intermediate code) 6、临时文件(temporary file) 4、将编译器分成了只依赖于源语言(前端( front end))的操作和只依赖于目 标语言(后端( back end))的操作两部分。 第二章词法分析 ? 扫描处理 ? 正则表达式 ? 有穷自动机 ? 从正则表达式到D FA ? 利用L e x自动生成扫描程序 1、Tokens记号标记:identifiers、keywords、integers、floating-point、symbols、strings、comments 1、使用正则表达式去描述程序语言tokens 2、一个正则表达式是归纳确定 3、一个正则表达式R描述一组字符串集合L(R) 4、L(R) = the language defined by R 5、所有的token都能用正则表达式表示 2、正则表达式: 1、基本正则表达式:他们是字母比哦啊中的单个字符且自身匹配

编译原理知识点

编译原理知识点 一编译器 简单讲,编译器就是将“高级语言”翻译为“机器语言(低级语言)”的程序。一个现代编译器的主要工作流程:源代码(source code) → 预处理器 (preprocessor) → 编译器(compiler) → 汇编程序(assembler) → 目标代码(object code) →链接器(Linker) → 可执行程序(executables) 二工作原理 编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。然而,也存在从低阶语言到高阶语言的编译器,这类编译器中用来从由高阶语言生成的低阶语言代码重新生成高阶语言代码的又被叫做反编译器。 也有从一种高阶语言生成另一种高阶语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。 典型的编译器输出是由包含入口点的名字和地址,以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序 三编译器的发展史 (1) 20世纪50年代

IBM的John Backus带领一个研究小组对FORTRAN语言及其编译器进行开发。但由于当时人们对编译理论了解不多,开发工作变得既复杂又艰苦。与此同时,Noam Chomsky开始了他对自然语言结构的研究。他的发现最终使得编译器的结构异常简单,甚至还带有了一些自动化。Chomsky的研究导致了根据语言文法的难易程度以及识别它们所需要的算法来对语言分类。正如现在所称的Chomsky 架构(Chomsky Hierarchy),它包括了文法的四个层次:0型文法、1型文法、2型文法和3型文法,且其中的每一个都是其前者的特殊情况。2型文法(或上下文无关文法)被证明是程序设计语言中最有用的,而且今天它已代表着程序设计语言结构的标准方式。分析问题(parsing problem,用于上下文无关文法识别的有效算法)的研究是在60年代和70年代,它相当完善的解决了这个问题。现在它已是编译原理中的一个标准部分。

北京工业大学编译原理考试一纸开卷【期末复习总结】

1、简要解释编译程序中的遍(趟)的含义。 就是对源程序或者源程序的中间结果从头到尾扫描一次,并作有 关的加工处理,生成新的中间结果和目标程序.通常,每遍的工作有外存上获得的前一遍的中间结果开始,完成它所含的有关工作之后,再把结果记录于外存..既可以将几个不同阶段合为一遍,也可以把一个阶段的工作分为若干遍。 2、何为“标识符”?何为“名字”?两者的区别是什么?在程序设计语言中,标识符是一个最基本的概念,其定义为:凡以字母开头的字母数字序列(有限个字符)都是标识符。当给予某标识符以确切的含义时,这个标识符就叫做名字。程序语言中各种名字都是用标识符表示的,只是标识符是一个没有意义的字符序列,而名字却有着确切的意义和属性。 3、简述为什么自顶向下的语法分析技术不能处理具有左递归的文法?这是由于在自顶向下的语法分析技术中,要解决的问题是根据当前输入符号判断将栈顶(最左)的非终结符号替换成哪条规则的右部,若文法具有左递归,则在分析过程中,无法判断岀替换的规则,造成无穷递归求解的过程。 4、简述编译程序的工作过程 编译程序的工作过程,是指从输入源程序开始到输岀目标程序为止的整个过程,是非常复杂的,就其过程而言,一般可以划分为五个工作阶段:①词法分析,对构成源程序的字符串进行扫描和分解,识别岀一个个的单词;②语法分析,根据语言的语法规则,把单词符号串分解成各类语法单位;③语义分析与中间代码产生,即对各类语法单位,分析其汉一并进行初步翻译;④代码优化,以期产生更高效的代码;⑤目标代码生成,把中间代码变换成特定机器上的低级语言指令形式。 5、什么是语法制导翻译? 是指在语法规则的制导下,通过计算语义规则,完成对输入符号的翻译。由于使用属性文法时把语法规则和语义规则分开,但在使用语法规则进行推导或归约的同时又使用这些语义规则来指导翻译与最终产生目标代码,所以称为语法制导翻译。 6、请简要阐述高级程序设计语言参数传递的常用方式 1、传值:计算实参并将其右值传递给被调用过程 2、传地址: 调用过程将实参地址传递给被调用过程3、传值结果:将传值和 传地址两种方式结合4、传名:只有在被调用过程中用到形参时才动态的建立起它与实参的联系 7、什么是自展?什么是交叉编译? 自展过程就是用低级语言先实现一个简单的编译器,然后用这个编译器的语言再去编写一个更高级的编译器一一' 个新编译器是 旧编译器的扩展一一的过程。编译器的运行环境与产生程序的运行环境不同的编译过程叫做交叉编译 8、计算机执行用高级语言编写的程序有哪些途径?其主要区别 是什么? 解释和编译。解释不生成目标代码。 9、自顶向下的语法分析方法中需要解决的主要问题?如何表 示? 主要需要解决回溯与左递归。回溯:匹配多个候选式无法快速匹配;左递归:推导过程无休止。解决:提取公共左因子、消除直接及间接左递归。翻译程序:能够把某种语言转换成另一种语言,而后者与前者在逻辑上是等价的。 语义分析与中间代码产生:对语义分析所识别岀的各类语法范 畴,分析其含义并进行初步翻译(产生中间代码) 编译程序结构:表格管理、岀错处理 编译前端:由与源语言有关但与目标语言无关的那些部分组成,包括词法分析、语义分析、语义分析与中间代码产生。 后端:编译程序中与目标语言有关那些部分,优化与目标代码生 成。后端不依赖于源语言而仅仅依赖于中间语言。 词法规则是指单词符号的形成规则。 语言的语法规则规定了如何从单词符号形成更大的结构(语法单位)。二义性:如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。 LL(1)的含义:第一个L表示从左到右扫描输入串,第二个L表示 最左推导,1表示分析时每一步只需向前查看一个符号 自上而下分析的问题:①文法含有左递归时,分析过程会陷入无限循环②回溯浪费分析时间③某一非终结符用某一候选式匹配成功时,可能是暂时的④分析不成功时,难以找到岀错位置 自下而上分析的问题:怎样判断栈顶的符号串的可归约性,以及如 何归约。 一个句型的最左直接短语称为该句型的句柄。 在形式语言中最右推导常被称为规范推导,由规范推导所得的句型称为规范句型,如果文法无二义的,那么规范推导(最右推导)的逆过程必是规范归约(最左归约) 输入串-----语法树——依赖图-------- 语义规则计算次序 最左规约=规范规约:A 最右推导=规范推导:B 短语:子树的末端结点形成的符号串. 短语相对的句型:整个树的末端结点. 简单子树:只有一层分支的子树 简单短语(直接短语):简单子树的末端结点形成的符号串. 句柄:最左直接短语 素短语:是个短语,并且至少含有一个终结符,并且,除它自身之外不再含任何更小的素短语 上例G〔引:句型Mg的语法时 共有三裸子轲. 三4趣语:血Sfi 简羊範待:H, Sb 勺柄:A 例题1、构造下面文法的LL (1)分析表。 “ TL int | real L 宀id R , id R | £ FIRST ( D) =FIRST (T) ={int, real} FOLLOW (D) =FOLLOW ( L) ={#} FIRST ( L) ={id} FOLLOW (T) ={id} FIRST (R) ={ , , £} FOLLOW (R) ={#} 注意当FIRST (X)含£还需要看FOLLOW (X)

程序设计语言编译原理_考试重点(终)

1 2 3 开 4 1 0 1 1 1 0 1 3 0 1 2 a a a ,a b b b 第一章 引论 1.编译程序分几个阶段,每个阶段的任务是什么? 五个阶段:词法分析、语法分析、语义分析、中间代码生成、优化、目标代码生成 词法分析任务:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词。(如基本字,标识符,常数,算符和界符)。 语法分析任务:在词法分析基础上,将单词符号串转化为语法单位(语法范畴)(短语、子句、句子、程序段、程序),并确定整个输入串是否构成语法上正确的程序。 语义分析和中间代码生成任务:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。 代码优化任务:对于代码(主要是中间代码)进行加工变换,以期能够产生更为高效(省时间和空间)的目标代码 。 目标代码生成任务:将中间代码变换成特定机器上的低级语言代码 2.表格管理和出错处理:编译各阶段均须维持表格并进行表格管理,建表的技术支持是数据结构,表格的分类、结构、处理方法决定于语言及机器,还有优化措施。一个好的编译程序应该:全,最大限度发现错误;准,准确指出错误的性质和发生地点;局部化,将错误的影响限制在尽可能小的范围内。源程序中的错误通常分为 :语法错误,不符合语法(或词法)规则的错误,如单词拼写错误、括号不匹配 ... 语义错误,不符合语义规则的错误,如说明错误、作用域错误、类型不匹配 ... 3.前端、后端:编译前端主要由与源语言有关,但与目标机无关的那些部分组成。编译后端包括编译程序中与目标机有关的那些部分。 4.遍:根据系统资源的状况、运行目标的要求……等,可以将一个编译程序设计成多遍扫描的形式,在每一遍扫描中,完成不同的任务。遍可以和阶段相对应,也可无关。单遍代码不太有效。遍 是对源程序或源程序的中间结果从头到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。 5.“运算符与运算对象类型不符”属于语义错误 6.算法逻辑上的错误属于语义错误 7.编译程序:能够把某一种语言程序转换成另一种语言程序,而后者与前者在逻辑上是等价的一种程序。通常是从高级语言转换成为低级语言。 8.解释程序:它以该语言写的源程序作为输入,但是不产生目标代码,而是边解释边执行源程序本身。 9.诊断编译程序:专门用于帮助程序开发和调试的编译程序。 10.优化编译程序:着重于提高目标代码效率的编译程序。 11.宿主机:运行编译程序的计算机。 12.目标机:运行编译程序所产生目标代码的计算机。 13.交叉编译程序:一个程序产生不同 于宿主机的机器代码的程序。 14.可变目标编译程序:如果不需要重新编译程序中与机器无关的部分就能改变目标机,则该编译程序就叫做可变目标编译程序。 PS :世界上第一个编译程序——FORTRAN 编译程序——20世纪50年代 15.编译过程 第一阶段:词法分析——词法分析器 1)任务:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词(亦称单词符号或简称符号),标示符,常熟,算符和界符。2)单词符号是语言的基本组成成分,是人们理解和编程的基本要素。3)描述词法规则的有效工具是:正规式和有限自动机 第二阶段:语法分析——(词法)分析器 1)任务:在词法分析的基础上,根据语言的语法规则,把单词符号分解成各类语法单位,如“短语”、“子句”、“句子”、“程序段”和“程序”等。通过语法分析,确定整个输入串是否构成语法上正确的“程序”。2)语法分析所依据的是语言的语法规则。通常是上下文无关文法描述、3)词法分析是一种线性分析,而语法分析是一种层次结构分析。 第三阶段:语义分析和中间代码产生——语义分析器 1)任务:对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。2)对每种语法范畴进行静态语义检查—>进行中间代码的翻译。3)语义分析所依据的是语言的语义规则,通常使用属性文法描述语义规则。4)中间代码:一种含义明确、便于处理的记号系统,它通常独立于具体的硬件。5)中间代码的四元式表示形式。此外还有三元式、间接三元式、逆波兰记号和树。 第四阶段:优化——优化器 1)任务:在于前段产生的中间代码进行加工交换,,以期在最后阶段能产生更为高效(省时间和空间)的目标代码。2)优化的主要方面有:公共字表达式、优化循环、删除无用代码等等。3)优化所依据的原则:程序的等价变化原则。 第五阶段:目标代码生成——目标代码生成器 1)任务:吧中间代码(或经优化处理后)变换成特定机器上的低级语言代码。2)形式:绝对指令代码或可重定位的指令代码或汇编指令代码。 16.编译程序的结构 语法错误:指源程序中不符合语法(或词法)规则的错误,他们可在词法分析和语法分析时检测出来 语法错误:指源程序中不符合语义规则的错误,一般在语义分析时检测出来,有的要在运行时才能检测出来。通常有:说明错误、作用域错误、类型不一致等 遍:对源程序或源程序的中间结果从头 到尾扫描一次,并作有关的加工处理,生成新的中间结果或目标程序。 编译前段:由与源程序有关但与目标程序无关的那些部分组成。包括词法分析、语法分析、语义分析与中间代码和一些优化工作。 编译后端:编译程序中与目标机有关的那些部分,后端不依赖于源语言而仅仅依赖于中间语言。 集成化的程序设计环境的特点:它将相互独立的程序设计工具集成起来,以使为程序员提供完整的、一体化的支持,从而进一步提高程序开放效率,改善程序质量。 17.T 形图 第二章 高级语言及其语法描述 1. 程序语言是由语法和语义两方面定义的。 2.上下文无关文法的定义:四个组成部分:一组终结符号、一组非终结符号、一个开始符号、一组产生式。一个上下文无关文法G 是一个四元式(VT,VN,S, P ),其中: VT :是非空有限集,它的每个元素是终结符号;VN :是非空有限集,它的每个元素是非终结符号, VT ∩VN=Φ,VT ∪VN=V;S :S ∈VN ,称为开始符号;P :产生式集合(有限),每个产生式形式是{ P->α| P ∈VN , α∈(VT ∪VN)*,S 至少一次为P }; 3.推导、最左推导、最右推导:1、推导:如两个串u0、un ,存在一个串序列u0=>u1=>…=>un ,则我们称这个序列是从u0到un 的一个推导。 U1un :表示从u0出发,经一步或若干步,可推导出un. U1 un :表示从u0出发,经0步 或若干步,可推导出un. 最左推导是指,任何一步α=>β都是对α中的最左非终结符进行替换的。最右推导是指,任何一步α=>β都是对α中的最右非终结符进行替换的。 4.语法树:在编译中产生语法树是为了语法分析。 5、什么是句型?什么是句子?什么是语言? 假定G 是一个文法,S 是它的开始符号。如果S=> α,则称α是一个句型。仅含终结符的句型是一个句子。文法G 所产生的句子的全体是一个语言。 语言是由句子组成的集合,是由一组记号所构成的集合。 6.乔姆斯基把文法分成4种类型,即0型文法、1型文法、2型文法和3型文法。0型文法也称为短语文法。1型文法也称为上下文有关文法。2型文法也称为上下文无关文法。3型文法也称为正规文法。与程序语言语法有关的文法是上下文无关文法。 第三章 词法分析 1.状态转换图:使用状态转换图是设计词法分析程序的一种好途径,状态转换图是一张有限方向图。在状态转换图中,结点代表状态,用圆圈表示。一个状态转换图可用于识别(或接受)一定的字符串。 2.确定的有限自动机(DFA )、非确定有限自动机(NFA )。五元式:有限状 态集合、有穷字母表、转换函数、唯一的初始状态、终止状态集合。一个确定有限自动机(DFA ) M 是一个五元式:M = (S,∑,δ,s0 ,F) ,其中S 是一个有限集,它的每个元素称为一个状态,∑是一个有穷字母表,它的每个元素称为一个输入字符,δ是一个从S ×∑至S 的单值部分映射。 δ(s,a)=s ′意味着:当现行状态为、输入字符为a 时,将转换到下一状态s ′。我们称s ′为s 的一个后继状s0∈S 是唯一的初态F 是一个终态集(可空)。一个非确定有限自动机(NFA ) M 是一个五元式:M = (S,∑,δ,S0 ,F) ,其中S 是一个有限集,它的每个元素称为一个状态,∑是一个有穷字母表,它的每个元素称为一个输入字符,δ是一个从S ×∑*至S 的子集的映射,即δ: S ×∑* → 2s ,S0∈S 是唯一的初态,F 是一个终态集(可空)。 3.设有确定的有限自动机DFA M = ({0,1,2,3},{a,b},δ,0,{3}),其中δ为:δ(0,a)=1 δ(0,b)=2 δ(1,a)=3 δ(1,b)=2 δ(2,a)=1 δ(2,b)=3 δ(3,a)=3 δ(3,b)=3 请画出状态转换矩阵和状态转化图。相应的状态转换矩阵如下表: 对应的状态转换图 4.设计一个DFA,要求能够识别∑={0,1}上能被5整除的二 进制数。 5.词法分析的流 程 第四章 语法分析——自上而下分析 1.语法分析器的功能:识别语法成分,并作语法检查. 2.自上而下语法分析方法遇到的主要问题是回溯和左递归。 3.把一个文法改造成任何非终结符的所有候选式首符集两两不相交的方法是提取公共左因子。 4.LL (1)分析法中,第一个L 表示从左到右扫描输入串,第二个L 表示最左推导。1表示分析时每步只需向前看一个符号。 5.LL (1)文法的条件:1文法不含左递归2)FIRST(α)∩ FIRST(β) = φ3) 算符 左操作数 右操作数 结果 状态 a b 0 1 2 1 3 2 2 1 3 3 3 3

相关主题