编译原理复习题-给学生(简) 下载本文

《编译原理》复习题

(7)出错处理程序对出现在源程序中的错误进行处理。如果源程序有错误,编译程序应设法发现错误,把有关错误信息报告给用户。编译程序的各个阶段都有可能发现错误,出错处理程序要对发现的错误进行处理、记录,并反映给用户。 22.对于文法G(S):

S → (L) | aS | a L → L, S | S

(1) 画出句型(S, (a))的语法树。

(2) 写出上述句型的所有短语、直接短语和句柄。 解:

(1) 句型(S, (a))的语法树如下图所示:

S ( L ) L , S S ( L ) S a

(2) 从语法树中可以找到(3分)短语:a; (a); S; S,(a); (S, (a)) 直接短语: a; S 句柄: S

23.构造一文法,使其描述的语言L = {ω |ω ∈ (a, b)*,且ω中含有相同个数的a和b}。解:

S→ ε| aA|bB A→ b| bS| aAA B→ a| aS| bBB

24.分别给出表达式 –(a*(b-c))+d 的逆波兰表示和四元式表示。 解:(1)逆波兰式: abc-*@d+ 其中使用@代表一目减运算 (2)四元式: ① (-, b, c, T1)

25

《编译原理》复习题

② (*, a, T1, T2) ③ (@, T2, _, T3) ④ (+, T3, d, T4)

25.把下列语句翻译为四元式序列: while (A > B) if (C > D)

X = Y * Z

else

X = Y + Z 解:

(1) (j>, A, B, 3) (2) (j, _, _, 11) (3) (j>, C, D, 5) (4) (j, _, _, 8) (5) (*, Y, Z, T1) (6) (=, T1, _, X) (7) (j, _, _, 1) (8) (+, Y, Z, T2) (9) (=, T2, _, X) (10) (j, _, _, 1) (11)

26.构造一个DFA,它接受Σ = {0, 1}上所有满足如下条件的字符串:每个1后面都有0直接跟在右边。 解:(1)0*(0|10)*0* 或者 (0|10)*

(2)

①NFA (2分)

0 X ε 0 ε 1 1 2

0 ε 3 0 ε Y 0 26

《编译原理》复习题

②子集法确定化

I {X, 0, 1, 3, Y} {0, 1, 3, Y} {2} {1, 3, Y} 重新命名状态,即得:

S 1 2 3 4 ③ 最小化

首先分为终态集和非终态集 {3} {1, 2, 4} 因为10 = 2 20 = 2 40 = 4 状态均属于集合{1, 2, 4},所以对于输入符号0不能区分开1,2,4三个状态;11 = 3 21 = 3 41 = 3状态均属于集合{3},所以对于输入符号1也不能区分开1,2,4三个状态;因此最终的状态划分即为: {3} {1, 2, 4},其对应的DFA如下图所示:

0 1 0 0

27.已知文法G(S):

S→S*aP| aP| *aP P→+aP| +a

(1) 将文法G(S)改写为LL(1)文法G’(S); (2) 写出文法G’(S)的预测分析表。 解:

(1)消除左递归,文法变为: S→aPS’| *aPS’ S’→ *aPS’ | ε

27

I0 {0, 1, 3, Y} {0, 1, 3, Y} {1, 3, Y} {1, 3, Y} I1 {2} {2} - {2} 0 2 2 4 4 1 3 3 - 3 1

《编译原理》复习题

P→+aP| +a

提取公共左因子,文法变为G’(S): S→aPS’| *aPS’

S’→ *aPS’ |ε

P→+aP’ P’→P| ε

(2)计算每个非终结符的FIRST集和FOLLOW集: FIRST(S) = {a, *}

FOLLOW(S) = {#}

FIRST(S’) = {*, ε} FOLLOW(S’) = {#} FIRST(P) = {+} FOLLOW(P) = {*, #} FIRST(P’) = {+, ε}

FOLLOW(P’) = {*, #}

构造该文法的预测分析表如下: (5分)

* + a # S S→*aPS’ S→aPS’ S’ S’→ *aP S’→ ε P P→+aP’ P’ P’→ε P’→P P’→ε 28.已知文法G(S):

S→aS | bS | a

(1) 构造识别该文法所产生的活前缀的DFA;

(2) 判断该文法是LR(0)还是SLR(1),并构造所属文法的LR分析表。 解:

(1)将文法G(S)拓广为G’(S’):

(0) S’→S (1) S→aS (2) S→bS (3) S→a

识别该文法所产生的活前缀的DFA:

28