(完整word版)编译原理复习大纲lk
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、理解编译器的概念,掌握编译器的功能,熟练掌握编译器的主要翻译步骤。了解与编译器相关的程序及其功能
编译程序的工作过程一般可以划分为词法分析,语法分析,语义分析,中间代码生成,代码优化等几个基本阶段,同时还会伴有表格处理和出错处
理 .
@@
2、扫描器功能,理论依据,它完成任务是什么?
扫描器的任务是从源程序中识别出一个个单词符号,编译程序对源程序或中间代码程序从头到尾扫描一次,找到单词。
@@
5.符号表用法如、符号表中的信息栏中登记了每个名字的有关的性质,它有那些内容?
名字、符号种类、类型、地址、扩展属性指针。
@@
6.能画出程序框图,了解其功能,能叙述编译的基本结构
@@
2、文法的集中类型和主要特点.如文法有几种类型各自特点?一个文法组成部分?
0型文法:短语结构文法,任何0型文法都是递归和可枚举的。
1型文法:上下文有关文法,产生式左边至少有一个非终结符。
2型文法:上下文无关文法,产生式左边只能有一个非终结符,右边无限制。
3型文法:正则文法,右部可以有一个终结符和一个非终结符,或只有一个终结符。
四元组(V[非终结符],T[终结符],P[产生式],S[开始符号]);
@@
3.何为最左推导?最右推导?
其中:开始状态:0
终止状态:2
a
a
⇒ a 0
b
b
b
1
2
最左推导,在A 的每次推导过程中,每一步都是对当前句型的最左变量进行替换,每一步所得为左句型,相应的归约称为最右归约;最右推导,在A 的每次推导过程中,每一步都是对当前句型的最右变量进行替换,每一步所得为右句型,相应的归约称为最左归约。 @@
4、掌握正则表达式及其生成语言的定义,熟练掌握正则表达式的三种基本运算,会根据语言写出正则表达式,或者反过来写出指定的正则表达式生成的语言的特征。
1. 从各选择对象中选择,用元字符|表示。比如: a|b ;
2. 连结,由并置表示。比如: ab ;
3. 重复或“闭包”,由元字符*表示。比如: a*; @@
例题:给出下面语言的相应文法:
L 1={a n b n | n ≥1} L 2={a n b m+n a m | n ≥1,m ≥0}
5、掌握DFA 及其可接受的语言的定义,会根据语言画DFA 图,或者反过来写出指定的DFA 图可接受的语言的特征。
例子:为正规式(a|b )*a(a|b) 构造一个等价的确定的有限自动机。
解答: @@
5、 掌握用代码实现DFA 的两种算法,熟练掌握基于转换表的算法。 例子:给定下列自动机:
(1)把此自动机转换为确定自动机DFA 。 (2)给出此DFA 的正则表达式。 解答:(1): 有状态矩阵如图:
a,b a
a b ⇒ 0 1 2
G1: A →aAb |ab G1: S →AB A →aAb | ab B →bBa | ε
从而可得DFA 如图:
@@
(2)此DFA 的正则表达式为: (aa *b ∣b)(b ∣ab)* 或 a *b (b ∣ab )*。 @@
6、 掌握正则表达式和DFA 图,了解词法分析程序。 例题:给定文法G[S]:
S →aA|bQ ; A →aA|bB|b ;B →bD|aQ ;Q →aQ|bD|b ;D →bB|aA ;
E →aB|bF
F →bD|aE|b
构造相应的最小的DFA 。
解:先构造其NFA : 用子集法将NFA 确定化:
a
b S A Q A A BZ Q Q DZ BZ Q D DZ A B D A B B
Q
D
a b ⇒0 01 2 01 01 2 -2 1 2 1 2
a b
⇒0 0,1 2
1 2 -2 1 2
⇒ - ⇒ 0
2 a a
b a 1
01 b
b
b 极小化后: ⇒ 0
2 b
a
b b
1 a
将S 、A 、Q 、BZ 、DZ 、D 、B 重新命名,分别用0、1、2、3、4、5、6表示。因为3、4中含有z ,所以它们为终态。
令P 0=({0,1,2,5,6},{3,4})用b 进行分割:
P1=({0,5, 6},{1,2},{3,4})再用b 进行分割: P2=({0},{5, 6},{1,2},{3,4})再用a 、b 进行分割,仍不变。 再令{0}为A ,{1,2}为B ,{3,4}为C ,{5,6}为D 。 最小化为右上图。
@@
2、掌握文法的二义性概念,会识别和消除文法的二义性。
例题:设有文法G[S]: S →S(S)S|ε,该文法是否为二义文法?说明理由。 答:是二义的,因为对于()()可以构造两棵不同的语法树。 S S
S ( S ) S S ( S ) S
ε ε S ( S ) S S ( S ) S ε ε
ε ε ε ε ε ε
a b 0 1 2 1 1 3 2 2 4 3 2 5 4 1 6 5 1 6 6
2 5
@@消除下列文法G[E]的左递归。
E→E-T∣T
T→T/F∣F
F→( E )∣i
解答:
消除文法G[E]的左递归后得到:
E→TE’
E’→ -TE’∣ε
T→FT’
T’→/FT’∣ε
F→( E )∣i
@@
说明下面文法G[S]是二义性文法:S→SaS|SbS|cSd|eS|f
例子:fafbf是文法G[S]的一个句子,并且有两个不同的最右推导。
(1)S => SaS => SaSbS => SaSbf=> Safbf=> fafbf
(2)S => SbS => Sbf=> SaSbf => Safbf=> fafbf 因此说明此文法有二义性。
@@
考虑文法 G[S]:
S → (T) | a+S | a
T → T,S | S
消除文法的左递归及提取公共左因子。
解:消除文法G[S]的左递归:S→(T) | a+S | a
T→ST′
T′→,ST′| ε
提取公共左因子:
S→(T) | aS′
S′→+S | ε
T→ST′
T′→,ST′| ε消除左递归公式:A→Aa|b
A→bA'
A'→aA'|ε