编译原理复习(有答案)

编译原理复习(有答案)
编译原理复习(有答案)

第一章引论

1.编译过程的阶段

由词法分析、语法分析、语义分析、中间代码生成、

代码优化和目标代码生成六个阶段

2.编译程序的概念

3.编译程序的结构

例:(B)不是编译程序的组成部分。

A. 词法分析器;

B. 设备管理程序

C. 语法分析程序;

D. 代码生成程序

4.遍的概念

对源程序(或其中间形式)从头至尾扫描一次并进

行有关加工处理,生成新的中间形式或最终目标程序,称为一遍。

5./

6.编译程序与解释程序的区别

例:解释程序和编译程序是两类程序语言处理程序,它们的主要区别在于(D)。

A. 单用户与多用户的差别

B. 对用户程序的

差错能力

C. 机器执行效率

D. 是否生成目标

代码

第三章文法和语言

文法的概念

字母表、符号串和集合的概念及运算

例:(ab|b)*c 与下面的那些串匹配(ACD)

A. ababbc;

B. abab;

C. c;

D. babc;

E. aaabc

例:ab*c*(a|b)c 与后面的那些串匹配(BC)

|

例:(a|b)a+(ba)*与后面的那些串匹配(ADE)

文法的定义(四元组表示)

文法G定义为四元组(V N,V T,P,S)

V N:非终结符集

V T:终结符集

P:产生式(规则)集合

S:开始符号(或识别符号)

例:给定文法,A::= bA | cc,下面哪些符号串可

由其推导出(①② ⑤)。

①cc ②b*cc ③b*cbcc ④bccbcc ⑤bbbcc

什么是推导例:已知文法G:

E->E+T|E-T|T

T->T*F|T/F|F

F->(E)|i

试给出下述表达式的推导:i*i+i

推导过程:E->E+T

->T+T

->T*F+T

]

->F*F+T

->i*F+T

->i*i+T

->i*i+F

->i*i+i

句型、句子的概念

例:假设G一个文法,S是文法的开始符

号,如果S=>*x,则称x 是句型。

例:对于文法G,仅含终结符号的句型称

为句子。

语言的形式定义

例:设r=(a|b|c)(x|y|z),则L(r)中元

素为9个。

|

例:文法G产生式为S→AB,A→aAb|,

B→cBd|cd,则B∈L(G)。

A. ababcd;

B. ccdd;

C. ab;

D.

aabb

等价文法

例:如果两个文法描述了同一个语言,则这两个文法是等价文法。

文法的类型

0型:左边至少有一个非终结符

1型:右边长度>=左边长度

2型:左边有且仅有一个非终结符

3型:形如:A->aB,A->a

各类型文法都是逐级包含关系,

例:文法S→abC|c,bC→d 是几型文法0型

例:文法S→abC,bC→ad 是几型文法1型

例:文法G[A]:A→,A→aB,B→Ab,B→a

是几型文法2型

例:文法S→a|bC,C→d 是几型文法3型 最左(右)推导

规范推导 :最右推导被称为规范推导

规范句型 :由规范推导所得的句型称为规范句型 规范归约:左归约为规范归约

二义性

`

例:如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是 二义的 。

例:已知文法G1:P->PaP|PbP|cP|Pe|f ,G1是( A )。 A 二义文法;B 无二义的 例:证明下述文法G[<表达式>]是二义的。 <表达式>→a|(<表达式>)|<表达式><运算符><表达式>

<运算符>→+|-|*|/

答:可为句子a+a*a 构造两个不同的最右推导: 最右推导1 〈表达式〉

〈表达式〉〈运算符〉〈表达式〉 〈表达式〉〈运算符〉a 〈表达式〉* a

〈表达式〉〈运算符〉〈表达式〉* a 〈表达式〉〈运算符〉 a * a 〈表达式〉+ a * a a + a * a

最右推导 2 〈表达式〉

〈表达式〉〈运算符〉〈表达式〉

〈表达式〉〈运算符〉〈表达式〉〈运算符〉〈表达式〉

〈表达式〉〈运算符〉〈表达式〉〈运算符〉 a 〈表达式〉〈运算符〉〈表达式〉 * a 〈表达式〉〈运算符〉 a * a 〈表达式〉+ a * a a + a * a

短语、句柄、直接短语

#

例:令文法G[E]为:

E->E+T|E-T

T->T*F|T/F|F F->(E)|i

证明E+T*F 是它的一个句型,指出这个句型的所有短语、直接短语和句柄。

例:已知文法G[S] S→aB|bA A→a|aS|bAA B→aBB|bS|b

}

句型aabbAb 的句柄是( D )

第四章 词法分析

词法输出的token 表示法

词法记号、模式、词法单元的概念

词法输出的token 表示 :二元式表示(单词种别,单词自身的值) 例:扫描器的任务是从 源程序 中识别出一个个 单词 。 正规式的概念及其代数性质 词法分析中的单词符号的描述工具 正规式代表的集合

例:请描述下面正规式定义的串,字母表S = {0, 1}。 1(0|1)*0

答:必须以1开头0结尾的串

例:为下边所描述的串写正规式,字母表是 {0, 1}。 以01 结尾的所有串

答:(0|1)*01

正规文法和正规式相互转换

正规文法到正规式的转换规则: 正规文法 正规式 A xB, B y 转换成:

A=xy

.

A

xA y 转换成: A=x y

A x, A

y 转换成:

A=x y

例:给出下述文法所对应的正规式:

S→0A|1B

A→1S|1

B→0S|0

答: S->0A | 1B

->01S | 01 | 10S | 10

->(01|10)S | (01|10)

-> (01|10) (01|10)* 即:r= (01|10) (01|10)*

NFA和DFA

NFA和DFA 的组成

例:指出哪些串是自动机可接受的(②④)xy ②xyxxy ③yyyx ④

xyyxyxyxxy

~

NFA和DFA的相互转换

例:将下图确定化:

答:用子集法将NFA确定化:

.01

S VQ

-QU

VQ VZ QU

QU V QUZ

VZ Z Z

V

Z.

QUZ VZ QUZ

Z Z Z

重新命名状态子集,令VQ为A、QU为B、VZ为C、V为D、QUZ为E、Z为F。

.

01

S A B

A C B

B!E D

C F F

D F.

E C

E

F F F

DFA的状态图:

正规式与NFA的相互转换

例:构造正规式1(0|1)*101相应的DFA

答:先构造NFA:

用子集法将NFA确定化

>

.

01

X.A

A A AB

AB

|

AC

AB

AC A ABY

ABY AC AB

除X,A外,重新命名其他状态,令AB为B、AC为C、ABY为D,因为D含有Y(NFA的终态),所以D 为终态。

.

#

1

X.A

A A B

B C

B

C A D

D C B

DFA的状态图::

第五章自顶向下语法分析方法

\

语法分析常用的方法是__B___。

①自顶向下②自底向上③自左向右

④自右向左

A.①②③④

B.①②

C.③④

D.①②③

会求FIRST、FOLLOW集

计算FIRST(X):

(a) 若X∈V T, 则FIRST(X)={X}

(b) 若X∈V N, 且有产生式X→a…, a

∈V T, 则 a∈FIRST(X)

(c) 若X∈V N, X→, 则∈

FIRST(X)

(d) 若X∈V N, Y1, Y2, …, Y i∈V N, 且

有产生式X→Y1Y2…Y n; 当Y1Y2…Y i-1都

时,(其中1≤i≤n), 则

FIRST(Y1)、FIRST(Y2)、…、FIRST(Y i-1)

的所有非{}元素和FIRST(Y i)都包含

在FIRST(X)中

(e) 当(d)中所有Yi , (i=1,

2, …n), 则FIRST(X)=FIRST(Y1)∪

FIRST(Y2)∪…∪FIRST(Yn)∪{}

计算FOLLOW(A):

(a) 设S为文法中开始符号,把

{#}加入FOLLOW(S)中(这里“#”为句子括号)。

(b) 若A→B是一个产生式,

则把FIRST()的非空元素加入FOLLOW(B)中。

如果则把FOLLOW(A)

也加入FOLLOW(B)中。

`

计算SELECT(A->):

A→, A∈V N , ∈V*,

若,则

SELECT(A→)=FIRST()

若,则SELECT(A→)=(FIRST()-{})∪FOLLOW(A)

例:文法:S→iCtS|iCtSeS|a,C→b中first(S)为(A),follow(S)为(B)。

A. {i,a};

B. {e,#};

C. {i,e,#};

D. {e,b}

LL(1)文法的条件

例:LL(1)文法的条件是___C___。

A. 对形如U::=x1 | x2 | … | xn 的

规则,要求First(xi)∩

First(xj)=,(i≠j);

B. 对形如U::=x1 | x2 | … | xn 的

规则,若xi=>*, 则要求First(xj)∩

Follow(U)=,(i≠j)

/

C. a 和 b

D. 都不是

构造LL(1)分析表

例:已给文法 G[S] :

S → SaP | Sf | P

P → qbP | q

将 G[S] 改造成 LL(1)文法,并给出

LL(1)分析表。

答:改造后的文法:

S → PS'

S' → aPS'| fS' |

·

P → qP'

P' → bP |

各候选式的 FIRST 集,各非终结符的 FOLLOW 集为

.产生式SELECT

FOLLOW

S→

PS'

{q}{#}

S'→aPS'

{a}

{#}

fS'

{f}→{#}

P →qP' {q}

{a,f,#} P'→bP {b}

{a,f,#}

{ a,f,#}

LL(1) 分析表为 a $

b f

q

#

S

PS' 、

S' aPS'

fS'

P

;

qP'

P'

bP

第六章 自底向上优先分析

算符文法的定义

如果不含空产生式的上下文无关文法 G 中没有形如 A …BC…的产生式,其中B,

C ∈V N ,则称G 为算符文法(OG )。

最左素短语的概念

设有文法G[S],其句型的素短语是一个短语,它至少包含一个终结符,且除自身外不再包含其他素短语。处于句型最左边的素短语为最左素短语

例:给定文法G 如下:E→E+T|T ;T→T*F|F; F→P↑F|P;P→(E )|i 句型P*P+i 的最左素短语为( A )。 A. P*P ; B. P ;

C. P+i ;

D. P*P+i

第七章 LR 分析

LR(K)的含义

L 从左至右扫描输入符号串 R 构造一个最右推导的逆过程

K 向右顺序查看输入串的K 个符号

LR 分析器的逻辑结构及活前缀等概念 LR 分析对文法的要求

构造LR(0)分析表、SLR(1)分析表

用SLR 分析法分析非二义性的文法和二义性的文法。

例:已知文法 A→aAd|aAb|

判断该文法是否是SLR(1)文法,若是构造相应分析表,并对输入串ab#给出分析过程。 答:文法:

A→aAd|aAb|ε

拓广文法为G′,增加产生式S′→A

若产生式排序为: 0 S' →A 1 A →aAd 2 A →aAb 3 A →ε

由产生式知: First (S' ) = {ε,a} First (A ) = {ε,a} Follow(S' ) = {#} Follow(A ) = {d,b,#}

G′的LR(0)项目集族及识别活前缀的DFA 如下图所示:

在I 0中:

A →.aAd 和A →.aAb 为移进项目,A →.为归

约项目,存在移进-归约冲突,因此所给文法不是

LR(0)文法。

在I 0、I 2中:

Follow(A) ∩{a}= {d,b ,#} ∩{a}=

所以在I 0、I 2中的移进-归约冲突可以由Follow

集解决,所以G 是SLR(1)文法。

构造的SLR(1)分析表如下: 状态(State )

Action Goto

a

d b #

A

0 1

S2 r3

1

对输入串ab#的分析过程

分析成功,说明输入串ab是文法的句子~

相关主题
相关文档
最新文档