(完整word版)编译原理复习大纲lk

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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'|ε

相关文档
最新文档