编译原理第三版陈火旺答案

编译原理第三版陈火旺答案
编译原理第三版陈火旺答案

第二章

P36-6

(1)

L G ()1是0~9组成的数字串

(2)

最左推导:

N ND NDD NDDD DDDD DDD DD D N ND DD D N ND NDD DDD DD D ??????????????????0010120127334

556568

最右推导:

N ND N ND N ND N D N ND N D N ND N ND N D ??????????????????77272712712701274434

886868568

P36-7

G(S)

M

AD A AN N S M D N M N |||0|8|6|4|29|7|5|3|1→→→→→

P36-8

文法:

E T E T E T T

F T F T F F E i

→+-→→|||*|/()| 最左推导:

E E T T T

F T i T i T F i F F i i F i i i E T T F F F i F i E i E T i T T i F T i i T i i F i i i ?+?+?+?+?+?+?+?+??????+?+?+?+?+?+********()*()*()*()*()*()*()

最右推导:

E E T E T

F E T i E F i E i i T i i F i i i i i E T F T F F F E F E T F E F F E i F T i F F i F i i i i i ?+?+?+?+?+?+?+?+?????+?+?+?+?+?+?+**********()*()*()*()*()*()*()*()

语法树:/********************************

E

E F

T

E +

T F F T +i

i

i

E

E

F

T

E

-T F F T -i

i

i

E E

F

T

+T F F

T

i

i

i

*i+i+i

i-i-i

i+i*i

*****************/

P36-9

句子iiiei 有两个语法树:

S iSeS iSei iiSei iiiei S iS iiSeS iiSei iiiei ????????

P36-10

/**************

)

(|)(|S T T

TS S →→

***************/

P36-11

/*************** L1:

ε

||cC C ab aAb A AC S →→→ L2:

bc

bBc B aA A AB S ||→→→ε

L3:

ε

ε||aBb B aAb A AB S →→→ L4:

A

B B A A B A S |01|10|→→→ε ***************/

第三章习题参考答案

P64–7

(1)

101101(|)*

1 ε ε 1 0 1

1 确定化:

0 1 {X} φ {1,2,3} φ φ φ {1,2,3} {2,3} {2,3,4} {2,3} {2,3} {2,3,4} {2,3,4} {2,3,5} {2,3,4}

{2,3,5} {2,3} {2,3,4,Y} {2,3,4,Y}

{2,3,5}

{2,3,4,}

1 0

0 0 1 1 0

0 1 0 1 1 1 最小化:

X 1 2 3 4 Y

5 X

Y

6

0 1

2 3

5 4

{,,,,,},{}

{,,,,,}{,,}{,,,,,}{,,,}{,,,,},{},{}{,,,,}{,,}

{,,,},{},{},{}

{,,,}{,01234560123451350123451246012345601234135012345601231010

0==== 30123124012345601101122332340123456101

01}{,,,}{,,}

{,},{,}{},{},{}

{,}{}{,}{,}

{,}{}{,}{}{},{},{,},{},{},{}

===== 0

1

0 0 1 0

0 1 0 1 1 1

P64–8

(1)

01)0|1(*

(2)

)5|0(|)5|0()9|8|7|6|5|4|3|2|1|0)(9|8|7|6|5|4|3|2|1(*

(3)

******)110|0(01|)110|0(10

P64–12

(a)

a

a,b a

确定化:

a b {0} {0,1} {1} {0,1} {0,1} {1} {1}

{0}

φ

5 0

1 2 4 3 0

1

φ

φ

φ

给状态编号:

a b 0 1 2 1 1 2 2 0 3 3

3

3

a

a

a b b b

b

a

最小化:

{,},{,}

{,}{}{,}{}

{,}{,}{,}{}{,},{},{}

012301101223032330123a b

a b ====

a a

b b

a

b (b)

b b a

a b

a

a b

b a

a a

已经确定化了,进行最小化

0 1 2 3 0

1 2 0 2 3 1

4 5

最小化:

{{,}, {,,,}}

012345011012423451305234523452410243535353524012435011012424{,}{}{,}{,}

{,,,}{,,,}{,,,}{,,,}{,}{,}{,}{,}{,}{,}{,}{,}{{,},{,},{,}}

{,}{}{,}{,}{,}a b a b a b a b a b a =============={,}{,}{,}{,}{,}{,}{,}10243535353524 b a b

b b a

a b

a

P64–14

(1) 0

1 0 (2):

(|)*010

0 1 ε ε

确定化:

0 1 {X,1,Y}

{1,Y}

{2}

0 1 2 0

1

Y

X Y

X

2 1

{1,Y} {1,Y} {2} {2} {1,Y} φ φ

φ

φ

给状态编号:

0 1 0 1 2 1 1 2 2 1 3 3

3

3

0 1 0

1 1 1

0 最小化:

{,},{,}

{,}{}{,}{}{,}{,}{,}{}{,},{},{}

0123011012231323301230101====

1 1 1 0

第四章

P81–1

(1) 按照T,S 的顺序消除左递归

ε

|,)

(||^)

(T S T T

S T T a S S G '→''→→' 递归子程序: procedure S; begin

if sym='a' or sym='^' then abvance else if sym='('

0 2 1

3 0

1 3

then begin advance;T;

if sym=')' then advance; else error; end else error end;

procedure T; begin S;'T end;

procedure 'T ; begin

if sym=',' then begin advance; S;'T end end; 其中:

sym:是输入串指针IP 所指的符号 advance:是把IP 调至下一个输入符号 error:是出错诊察程序 (2)

FIRST(S)={a,^,(} FIRST(T)={a,^,(} FIRST('T )={,,ε} FOLLOW(S)={),,,#} FOLLOW(T)={)} FOLLOW('T )={)} 预测分析表

a

^

(

) , # S S a →

S →^

S T →()

T

T ST →' T ST →' T ST →'

'T

'→T ε '→'T ST ,

是LL(1)文法

P81–2

文法:

|^

||)(|*||b a E P F F F P F T T T F T E E E T E →'→''→→''→+→''→εεε

(1)

FIRST(E)={(,a,b,^} FIRST(E')={+,ε} FIRST(T)={(,a,b,^} FIRST(T')={(,a,b,^,ε} FIRST(F)={(,a,b,^} FIRST(F')={*,ε} FIRST(P)={(,a,b,^} FOLLOW(E)={#,)} FOLLOW(E')={#,)} FOLLOW(T)={+,),#} FOLLOW(T')={+,),#}

FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#} FOLLOW(P)={*,(,a,b,^,+,),#} (2)

考虑下列产生式:

'→+'→'→'→E E T T F F P E a b ||*|()|^||εεε

FIRST(+E)∩FIRST(ε)={+}∩{ε}=φ FIRST(+E)∩FOLLOW(E')={+}∩{#,)}=φ FIRST(T)∩FIRST(ε)={(,a,b,^}∩{ε}=φ FIRST(T)∩FOLLOW(T')={(,a,b,^}∩{+,),#}=φ FIRST(*F')∩FIRST(ε)={*}∩{ε}=φ

FIRST(*F')∩FOLLOW(F')={*}∩{(,a,b,^,+,),#}=φ FIRST((E))∩FIRST(a) ∩FIRST(b) ∩FIRST(^)=φ 所以,该文法式LL(1)文法. (3)

+ * ( ) a b ^ # E

E TE →'

E TE →' E TE →' E TE →'

E' '→+E E

'→E ε

'→E ε

T

T F T →'

T F T →' T F T →' T F T →'

T'

'→T ε

'→T T '→T ε '→T T '→T T '→T T '→T ε

F

F P F →' F P F →' F P F →' F P F →'

F' '→F ε '→'F F * '→F ε '→F ε '→F ε '→F ε '→F ε '→F ε

P

P E →() P a → P b → P →^

(4)

procedure E; begin

if sym='(' or sym='a' or sym='b' or sym='^' then begin T; E' end else error end

procedure E'; begin

if sym='+'

then begin advance; E end

else if sym<>')' and sym<>'#' then error end

procedure T; begin

if sym='(' or sym='a' or sym='b' or sym='^' then begin F; T' end else error end

procedure T'; begin

if sym='(' or sym='a' or sym='b' or sym='^' then T

else if sym='*' then error end

procedure F; begin

if sym='(' or sym='a' or sym='b' or sym='^' then begin P; F' end else error end

procedure F'; begin

if sym='*'

then begin advance; F' end end

procedure P; begin

if sym='a' or sym='b' or sym='^' then advance

else if sym='(' then

begin

advance; E;

if sym=')' then advance else error end

else error

end;

P81–3

/***************

(1) 是,满足三个条件。

(2) 不是,对于A 不满足条件3。 (3) 不是,A 、B 均不满足条件3。 (4) 是,满足三个条件。 ***************/

第五章

P133–1

E E T E T

F ?+?+*

短语: E+T*F, T*F, 直接短语: T*F 句柄: T*F

P133–2

文法:

S a T T T S S →→|^|(),|

(1)

最左推导:

S T T S S S a S a T a T S a S S a a S a a a S T S S S T S T S S T S S S S S S S T S S S T S S S S S S S S S a S ???????????????????()(,)(,)(,)(,())(,(,))(,(,))(,(,))(,(,))(,)(,)((),)((,),)((,,),)((,,),)(((),,),)(((,),,)),)(((,),,),)(((,),,),)(((,),,),)(((,),^,),)(((,),^,()),)(((,),^,()),)(((,),^,()),)(((,),^,()),)S S S a a S S S a a S S a a T S a a S S a a a S a a a a ?????? 最右推导:

S T T S T T T T S T T a T S a T a a S a a a a a S T S T a S a T a T S a T T a T S a T a a T S a a T a a ????????????????????()(,)(,())(,(,))(,(,))(,(,))(,(,))(,(,))(,(,))

(,)(,)(,)((),)((,),)((,()),)((,()),)((,()),)((,,()),)((,^,()),)((,^,()),)(((),^,()),)(((,),^,()),)(((,),^,()),)(((,),^,()),)(((,),^,()),)S a a T a a T S a a T a a a S a a a a a a a ?????

(2)

(((a ,a),^,(a)),a)

(((S,a),^,(a)),a)

(((T,a),^,(a)),a)

(((T,S),^,(a)),a)

(((T),^,(a)),a)

((S,^,(a)),a)

((T,^,(a)),a)

((T,S,(a)),a)

((T,(a)),a)

((T,(S)),a)

((T,(T)),a)

((T,S),a)

((T),a)

(S,a)

(T,S)

(T)

S

“移进-归约”过程:

步骤栈输入串动作

0 # (((a,a),^,(a)),a)# 预备

1 #( ((a,a),^,(a)),a)# 进

2 #(( (a,a),^,(a)),a)# 进

3 #((( a,a),^,(a)),a)# 进

4 #(((a ,a),^,(a)),a)# 进

5 #(((S ,a),^,(a)),a)# 归

6 #(((T ,a),^,(a)),a)# 归

7 #(((T, a),^,(a)),a)# 进

8 #(((T,a ),^,(a)),a)# 进

9 #(((T,S ),^,(a)),a)# 归

10 #(((T ),^,(a)),a)# 归

11 #(((T) ,^,(a)),a)# 进

12 #((S ,^,(a)),a)# 归

13 #((T ,^,(a)),a)# 归

14 #((T, ^,(a)),a)# 进

15 #((T,^ ,(a)),a)# 进

16 #((T,S ,(a)),a)# 归

17 #((T ,(a)),a)# 归

18 #((T, (a)),a)# 进

19 #((T,( a)),a)# 进

20 #((T,(a )),a)# 进

21 #((T,(S )),a)# 归

22 #((T,(T )),a)# 归

23 #((T,(T) ),a)# 进

24 #((T,S ),a)# 归

25 #((T ),a)# 归

26 #((T) ,a)# 进

27 #(S ,a)# 归

28 #(T ,a)# 归

29 #(T, a)# 进

30 #(T,a )# 进

31 #(T,S )# 归

32 #(T )# 归

33 #(T) # 进

34 #S # 归

P133–3

(1)

FIRSTVT(S)={a,^,(}

FIRSTVT(T)={,,a,^,(}

LASTVT(S)={a,^,)}

LASTVT(T)={,,a,^,)}

(2)

a ^ ( ) ,

a > > ^ > > ( < < < = < ) > > , < < < > >

6

G是算符文法,并且是算符优先文法

(3)优先函数

a ^ ( ) ,

f 4 4 2 4 4

g 5 5 5 2 3

f a f

^

f

(

f

)

f

,

g a g

^

g

(

g

)

g

,

(4)

栈输入字符串动作

# (a,(a,a))# 预备#( a, (a,a))# 进

#(a , (a,a))# 进

#(t , (a,a))# 归

#(t, (a,a))# 进 #(t,( a,a ))# 进 #(t,(a ,a ))# 进 #(t,(t ,a ))# 归 #(t,(t, a ))# 进 #(t,(t,a ))# 进 #(t,(t,s ))# 归 #(t,(t ))# 归

#(t,(t ) )# 进 #(t,s )# 归 #(t )# 归 #(t ) # 进

# s

#

success

P134–5

(1)

0.'→?S S 1.'→?S S 2.S AS →? 3.S A S →? 4.S AS →? 5.S b →? 6.S b →? 7.A SA →? 8.A S A →? 9.A SA →? 10.A a →? 11.A a →? (2)

S A ε

S

ε ε ε ε a

ε ε ε

A S ε ε

d

确定化:

S A a b {0,2,5,7,10} {1,2,5,7,8,10

} {2,3,5,7,10} {11} {6} {1,2,5,7,8,10

{2,5,7,8,10}

{2,3,5,7,9,10

{11}

{6}

0 10 5 7 6

1 11

2 3 4

8 9

} } {2,3,5,7,10} {2,4,5,7,8,10

} {2,3,5,7,10} {11} {6} {2,5,7,8,10} {2,5,7,8,10} {2,3,5,7,9,10

} {11} {6} {2,3,5,7,9,10

} {2,4,5,7,8,10

} {2,3,5,7,10} {11} {6} {2,4,5,7,8,10

}

{2,5,7,8,10}

{2,3,5,7,9,10

}

{11} {6} {11} φ φ φ φ {6}

φ

φ

φ

φ

A S

S A a

b

S a A S b S A b a A

A S

b

a a

b b a

DFA

构造LR(0)项目集规范族也可以用GO 函数来计算得到。所得到的项目集规范族与上图中的项目集一样:

0I ={'→?S S ,S AS →?,S b →?,A SA →?,A a →?} GO(0I ,a)={ A a →?}=1I GO(0I ,b)={ S b →?}=2I

GO(0I ,S)={ '→?S S ,A S A →?,A SA →?,A a →?,S AS →?,S b →?}=3I

0:'→?S S

S AS →? S b →? A SA →? A a →? 4:S A S →? S AS →? S b →?

A SA →? A a →? 3:'→?S S

A S A →? A SA →? A a →? S AS

→?S b →?

2:S b →?

1:A a →? 5:A S A →? S AS →? S b →?

A SA →? A a →? 6:A SA →?

S A S →?

S AS →? S b →?

A SA →?

A a →? 7:S AS →? A S A →?

S AS →? S b →?

A SA →?

A a →?

GO(0I ,A)={ S A S →?,S AS →?,S b →?,A SA →?,A a →?}=4I GO(3I ,a)={ A a →?}=1I GO(3I ,b)={ S b →?}=2I

GO(3I ,S)={ A S A →?,S AS →?,S b →?,A SA →?,A a →?}=5I

GO(3I ,A)={ A SA →?,S A S →?,S AS →?,S b →?,A SA →?,A a →?}=6I GO(4I ,a)={ A a →?}=1I GO(4I ,b)={ S b →?}=2I

GO(4I ,S)={ S AS →?,A S A →?,S AS →?,S b →?,A SA →?,A a →?}=7I GO(4I ,A)={ S A S →?,S AS →?,S b →?,A SA →?,A a →?}=4I GO(5I ,a)={ A a →?}=1I GO(5I ,b)={ S b →?}=2I

GO(5I ,S)={ A S A →?,S AS →?,S b →?,A SA →?,A a →?}=5I

GO(5I ,A)={ A SA →?,S A S →?,S AS →?,S b →?,A SA →?,A a →?}=6I GO(6I ,a)={ A a →?}=1I GO(6I ,b)={ S b →?}=2I

GO(6I ,S)={ S AS →?,A S A →?,S AS →?,S b →?,A SA →?,A a →?}=7I GO(6I ,A)={ S A S →?,S AS →?,S b →?,A SA →?,A a →?}=4I GO(7I ,a)={ A a →?}=1I GO(7I ,b)={ S b →?}=2I

GO(7I ,S)={ A S A →?,S AS →?,S b →?,A SA →?,A a →?}=5I

GO(7I ,A)={ A SA →?,S A S →?,S AS →?,S b →?,A SA →?,A a →?}=6I 项目集规范族为C={1I ,2I ,3I ,4I ,5I ,6I ,7I }

(3)不是SLR 文法

状态3,6,7有移进归约冲突

状态3:FOLLOW(S’)={#}不包含a,b

状态6:FOLLOW(S)={#,a,b}包含a,b,;移进归约冲突无法消解 状态7:FOLLOW(A)={a,b}包含a,b ;移进归约冲突消解 所以不是SLR 文法。

(4) 构造例如LR(1)项目集规范族 见下图: 对于状态5,因为包含项目[b a AS A / ?→],所以遇到搜索符号a 或b 时,应该用AS A →归约。又因为状态5包含项目[b a a A / ?→],所以遇到搜索符号a 时,应该移进。因此存在“移进-归约”矛盾,所以这个文法不是LR(1)文法。

b b b

A A A

S

a

a S

S a S

a a A a

A S b S A b

a a S

b b

S b

A A 0: a/b a A a/b SA A #/a/b b S #/a/b AS S S S # ?→?→?→?→?→' 2: a/b

a A a/

b SA A #/a/b b S #/a/b AS S #/a/b

S A S ?→?→?→?→?→

1: a/b b S a/b AS S a/b a A a/b SA A a/b A S A S S # ?→?→?→?→?→?→'3: a/b a A ?→4:

a/b b S /# ?→

5: a/b a A a/b SA A a/b b S a/b AS S a/b S A S a/b SA A ?→?→?→?→?→?→6:

a/b b S a/b

AS S a/b a A a/b SA A a/b A S A ?→?→?→?→?→

7: a/b b S a/b AS S a/b a A a/b SA A a/b A S A a/b AS S /# ?→?→?→?→?→?→ 9: a/b

b S a/b

AS S a/b a A a/b SA A a/b A S A a/b AS S ?→?→?→?→?→?→8: a/b

a A a/b

SA A a/b b S a/b AS S a/b S A S ?→?→?→?→?→ 10: a/b b S ?→ 3: 5:

第六章

/********************第六章会有点难

P164–5

(1)

E→E1+T {if (E1.type = int) and (T.type = int )

then E.type := int

else E.type := real}

E→T {E.type := T.type}

T→num.num {T.type := real}

T→num {T.type := int}

(2)

P164–7

L.2)}

S→L1|L2 {S.val:=L1.val+(L2.val/2length

S→L {S.val:=L.val}

L→L1B {L.val:=2*L1.val + B.val;

L.length:=L1.length+1}

L→B {L.val:=B.c;

L.length :=1}

B→0 {B.c:=0}

B→1 {B.c:=1}

***********************/

第七章

P217–1

a*(-b+c) ab@c+*

a+b*(c+d/e) abcde/+*+

-a+b*(-c+d) a@bc@d+*+

?

?∨

)

A?

(D

C

?CD

A

?

?

∧D

AB@

?

C

∧∨

(

A∨

)

(D

)

B

C

∨∧

AB@

CD

∨E

(

?

)

)

D

(E

C

A∧

B

if (x+y)*z =0 then (a+b)↑c else a↑b↑c xy+z*0= ab+c↑abc↑↑¥

或 xy+z*0= P1 jez ab+c↑ P2 jump abc↑↑

P1 P2

P217–3

-(a+b)*(c+d)-(a+b+c)的 三元式序列: (1) +, a, b (2) @, (1), - (3) +, c, d (4) *, (2), (3) (5) +, a, b (6) +, (5), c (7) -, (4), (6) 间接三元式序列: 三元式表: (1) +, a, b (2) @, (1), - (3) +, c, d (4) *, (2), (3) (5) +, (1), c (6) -, (4), (5) 间接码表: (1) (2) (3) (4) (1) (5) (6)

四元式序列: (1) +, a, b, 1T (2) @, 1T , -, 2T (3) +, c, d, 3T (4) *, 2T , 3T , 4T (5) +, a, b, 5T (6) +, 5T , c, 6T (7)

-, 4T , 6T , 7T

P218–4

自下而上分析过程中把赋值句翻译成四元式的步骤:A:=B*(-C+D) 步骤 输入串 栈 PLACE 四元式 (1) A:=B*(-C+D)

(2) :=B*(-C+D) i A (3) B*(-C+D) i:= A- (4) *(-C+D) i:=i A-B

(5) *(-C+D) i:=E A-B

(6) *(-C+D) i:=E A-B

(7) (-C+D) i:=E* A-B-

(8) -C+D) i:=E*( A-B--

(9) C+D) i:=E*(- A-B---

(10) +D) i:=E*(-i A-B---C

(11) +D) i:=E*(-E A-B---C (@,C,-, T

1)

(12) +D) i:=E*(E A-B--T

1 (13) D) i:=E*(E+ A-B--T

1-

(14) ) i:=E*(E+i A-B--T

1-D

(15) ) i:=E*(E+E A-B--T

1-D (+,T

1

,D,T

2

)

(16) ) i:=E(E A-B--T

2 (17) i:=E*(E) A-B--T

2-

(18) i:=E+E A-B-T

2(*,B,T

2

,T

3

)

(19) i:=E A-T

3(:=,T

3

,-,A)

(20) A 产生的四元式:

(@,C,-, T

1)

(+,T

1,D,T

2

)

(*,B,T

2,T

3

)

(:=,T

3

,-,A)

P218–5

/****************

设A :10*20,B、C、D:20,宽度为w=4 则T1:= i * 20

T1:=T1+j

T2:=A–84

T3:=4*T1

Tn:=T2[T3] //这一步是多余的

T4:= i + j

T5:=B–4

T6:=4*T4

T7:=T5[T6]

T8:= i * 20

T8:=T8+j

T9:=A–84

T10:=4*T8

T11:=T9[T10]

T12:= i + j

T13:=D–4

T14:=4*T12

T15:= T13[T14]

T16:=T11+T15

T17:=C–4

编译原理与实践第三章答案

The exercises of Chapter Three 3.2 Given the grammar A →AA|(A)|ε a. Describe the language it generates; b. Show that it is ambiguous. [Solution]: a. Generates a string of balanced parenthesis, including the empty string. b. parse trees of ():3.3 Given the grammar exp → exp addop term | term addop → + | - term → term mulop factor| factor mulop → * factor → ( exp ) | number Write down leftmost derivations, parse trees, and abstract syntax trees for the following expression: a. 3+4*5-6 b. 3*(4-5+6) c. 3-(4+5*6) [Solution]: a.The leftmost derivations for the expression 3+4*5-6: Exp => exp addop term =>exp addop term addop term =>term addop term addop term=> factor addop term addop term =>3 addop term addop term => 3 + term addop term =>3+term mulop factor addop term =>3+factor mulop factor addop term A ()εA A A A A ()εε

编译原理期末考试习题及答案

一、填空题|(每题4分,共20分) 1. 乔母斯基定义的3型文法(线性文法)产生式形式 A→Ba|a,或A→aB|a,A,B∈Vn, a,b∈Vt 。 2.语法分析程序的输入是单词符号,其输出是语法单位。 3 型为 B → .aB 的LR(0)项目被称为移进项目,型为 B → a.B 的LR(0) 项目被称为待约项目, 4.在属性文法中文法符号的两种属性分别为继承属性和综合属性。 5、运行时存贮管理方案有静态存储分配、动态存储分配和堆式存储分配和方案。 二.已知文法 G(S) (1) E → T | E+T (2) T → F | F*F (3) F →(E)| i (1)写出句型(T*F+i)的最右推到并画出语法树。(4分) (2)写出上述句型的短语,直接短语和句柄。(4分) 答:(1)最右推到(2分) E ==> T ==> F ==> (E) ==> (E+T) ==> (E+F) ==> (E+i) ==> (T+i) ==> (T*F+i) (2) 语法树(2分) (3)(4分) 短语:(T*F+i),T*F+i ,T*F , i 直接短语:T*F , i 句柄:T*F 三. 证明文法G(S) :S → SaS |ε是二义的。(6分) 答:句子aaa对应的两颗语法树为:

因此,文法是二义文法 四.给定正规文法G(S): (1) S → Sa | Ab |b (2) A → Sa 请构造与之等价的DFA。(6分) 答:对应的NFA为:(6分) 状态转换表: a b {F} Φ{S} {S} {S,A} Φ {S,A} {S,A} {S} 五. 构造识别正规语言b*a(bb*a)*b* 最小的DFA(要求写出求解过程)。(15分)答:(1)对应的NFA(5分) a b {0} {1,3} {0} {1,3} Φ{2,3} {2,3} {1,3} {2,3} (5分) 六. 已知文法G(S) : (1) S → ^ | a | (T) (2) T → T,S | S 试:(1)消除文法的左递归;(4分) (2)构造相应的first 和 follow 集合。(6分) 答:(1)消除文法的左递归后文法 G’(S)为: (1) S → ^ | a | (T)

编译原理课后习题答案

第1 章 1、编译过程包括哪几个主要阶段及每个 阶段的功能。 答案:编译过程包括词法分析、语法分析、语义分析和中间代码生成、优化、目标代码生成5 个阶段。词法分析的功能是对输入的高级语言源程序进行词法分析,识别其中的单词符号,确定它们的种类,交给语法分析器,即把字符串形式的源程序分解为单词符号串形式。语法分析的功能是在词法分析结果的基础上,运用语言的语法规则,对程序进行语法分析,识别构成程序的各类语法范畴及它们之间的层次关系,并把这种层次关系表达成语法树的形式。词义分析和中间代码生成的功能是在语法分析的基础上,对程序进行语义分析,“理解”其含义,产生出表达程序语义的内部表达形式(中间代码)。优化的功能是按照等价变换的原则,对语义分析器产生的中间代码序列进行等价变换,删除其中多余的操作,对耗时耗空间的代码进行优化,以期最后得到高效的可执行代码。目标代码生成的功能是把优化后的中间代码变换成机器指令代码,得到可在目标机器上执行的机器语言程序。 第2 章 1、写一上下文无关文法G,它能产生配 对的圆括号串(如:(),(()),()(())等,甚至 包括0 对括号) 文法为:S→(L)|LS|L L→S| ε 2 、已知文法G :E→E+T|E-T|T T→T*F|T/F|F F→(E) |i (1)给出i+i*i,i*(i-i)的最左推导,最右推导以及语法树。 (2)i-i+i 哪个算符优先。 【解答】 (1)最左推导:E?E+T?T+T? F+T ? i+T ? i+T*F ? i+F*F ?i+i*F ?i+i*i E?T?T*F? F*F ? i*F ? i*(E) ? i*(E-T) ? i*(T-T) ? i*(F-T) ? i*(i-T) ? i*(i-F) ?i*(i-i) 最右推导:E?E+T?E+T*F? E+T*i ? E+F*i ? E+i*i ? T+i*i ? F+i*i ? i+i*i E?T?T*F? T*(E) ? T*(E-T) ? T*(E-F) ? T*(E-i) ? T*(T-i) ? T*(F-i) ?T*(i-i) ? F*(i-i) ?i*(i-i) i+i*i 以及i*(i-i)的语法树如下所示: (2)i-i+i 的语法树如下图所示。 从上图的语法树可知:“-”的位置位 于“+”的下层,也就是前面两个i 先进 行“-”运算,再与后面的i 进行“+” 运算,所以“-”的优先级高于“+”的 优先级。 3 、文法G: E→ET+|T T→TF*|F F→FP↑|P P→E|i (1)试证明符号串TET+*i↑是G 的一 个句型(要求画出语法树). (2)写出该句型的所有短语,直接短语和句柄. 【解答】(1)采用最右推导: E?T?F? FP↑? Fi↑? Pi↑? Ei↑ ? Ti↑? TF*i↑? TP*i↑? TE*i↑? TET+*i↑ 语法树如下图所示。 从文法G 的起始符号出发,能够推导 出符号串TET+*i↑,所以给定符号串是文法G的句型。 (2) 该句型的短语有: ET+,TET+*,i ,TET+*i↑ 直接短语有:ET+, i 句柄是:ET+ 4、已知文法G:S→iSeS|iS|i ,该文法 是二义文法吗?为什么? 【解答】该文法是二义文法。 因为对于句子iiiei 存在两种不同的最 左推导: 第 1 种推导:S? iSeS? iiSeS? iiieS? iiiei 第2种推导:S?iS?iiSeS?iiieS?iiiei 第3 章 1、用正规式描述下列正规集: (1)C 语言的十六进制整数; (2)以ex 开始或以ex 结束的所有小写字母构成的符号串; (3)十进制的偶数。 【解答】 (1)C 语言十六进制整数以0x 或者0X 开头,所以一般形式应该为(+|-|ε) (0x|0X)AA*,其中前面括号表示符号, 可以有正号、负号,也可以省略(用ε表示)默认是正数,A 表示有资格出现在十六进制整数数位上的数字,AA*表示一位或者多位(一个或者多个数字的

编译原理课后习题答案(第三版)

精品文档 第二章 P36-6 (1) L G ()1是0~9组成的数字串 (2) 最左推导: N ND NDD NDDD DDDD DDD DD D N ND DD D N ND NDD DDD DD D ??????????????????0010120127334 556568 最右推导: N ND N ND N ND N D N ND N D N ND N ND N D ??????????????????77272712712701274434 886868568 P36-7 G(S) O N O D N S O AO A AD N →→→→→1357924680||||||||||| P36-8 文法: E T E T E T T F T F T F F E i →+-→→|||*|/()| 最左推导: E E T T T F T i T i T F i F F i i F i i i E T T F F F i F i E i E T i T T i F T i i T i i F i i i ?+?+?+?+?+?+?+?+??????+?+?+?+?+?+********()*()*()*()*()*()*() 最右推导: E E T E T F E T i E F i E i i T i i F i i i i i E T F T F F F E F E T F E F F E i F T i F F i F i i i i i ?+?+?+?+?+?+?+?+?????+?+?+?+?+?+?+**********()*()*()*()*()*()*()*() 语法树:/********************************

编译原理_第三版_课后答案

编译 原理 课后题答案 第二章 P36-6 (1) L G ()1是0~9组成的数字串 (2) 最左推导: N ND NDD NDDD DDDD DDD DD D N ND DD D N ND NDD DDD DD D ??????????????????0010120127334 556568 最右推导: N ND N ND N ND N D N ND N D N ND N ND N D ??????????????????77272712712701274434 886868568 P36-7 G(S) O N O D N S O AO A AD N →→→→→1357924680||||||||||| P36-8 文法: E T E T E T T F T F T F F E i →+-→→|||*|/()| 最左推导: E E T T T F T i T i T F i F F i i F i i i E T T F F F i F i E i E T i T T i F T i i T i i F i i i ?+?+?+?+?+?+?+?+??????+?+?+?+?+?+********()*()*()*()*()*()*() 最右推导:

E E T E T F E T i E F i E i i T i i F i i i i i E T F T F F F E F E T F E F F E i F T i F F i F i i i i i ?+?+?+?+?+?+?+?+?????+?+?+?+?+?+?+**********()*()*()*()*()*()*()*() 语法树:/******************************** E E F T E + T F F T +i i i E E F T E -T F F T -i i i E E F T +T F F T i i i *i+i+i i-i-i i+i*i *****************/ P36-9 句子iiiei 有两个语法树: S iSeS iSei iiSei iiiei S iS iiSeS iiSei iiiei ???????? P36-10 /************** ) (|)(|S T T TS S →→ ***************/ P36-11 /*************** L1: ε ||cC C ab aAb A AC S →→→ L2:

编译原理期末考试题目及答案

一、填空题(每空2分,共20分) 1.编译程序首先要识别出源程序中每个单词,然后再分析每个句子并翻译其意义。 2.编译器常用的语法分析方法有自底向上和自顶向下两种。 3.通常把编译过程分为分析前端与综合后端两大阶段。词法、语法和语义分析是对源程序的分析,中间代码生成、代码优化与目标代码的生成则是对源程序的综合。 4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即静态存储分配方案和动态存储分配方案。 5.对编译程序而言,输入数据是源程序,输出结果是目标程序。 1.计算机执行用高级语言编写的程序主要有两种途径:解释和编译。 2.扫描器是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。 3.自下而上分析法采用移进、归约、错误处理、接受等四种操作。 4.一个LL(1)分析程序需要用到一张分析表和符号栈。 5.后缀式abc-/所代表的表达式是a/(b-c)。 二、单项选择题(每小题2分,共20分) 1.词法分析器的输出结果是__C。 A.单词的种别编码B.单词在符号表中的位置 C.单词的种别编码和自身值D.单词自身值 2.正规式M 1 和M 2 等价是指__C_。 A.M1和M2的状态数相等 B.M1和M2的有向边条数相等 C.M1和M2所识别的语言集相等D.M1和M2状态数和有向边条数相等 3.文法G:S→xSx|y所识别的语言是_C____。 A.xyx B.(xyx)* C.xnyxn(n≥0) D.x*yx* 4.如果文法G是无二义的,则它的任何句子α_A____。 A.最左推导和最右推导对应的语法树必定相同B.最左推导和最右推导对应的语法树可能不同 C.最左推导和最右推导必定相同D.可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握____D__。 A.源程序B.目标语言C.编译方法D.以上三项都是 6.四元式之间的联系是通过__B___实现的。 A.指示器B.临时变量C.符号表D.程序变量 7.表达式(┐A∨B)∧(C∨D)的逆波兰表示为__B___。 A.┐AB∨∧CD∨B.A┐B∨CD∨∧ C.AB∨┐CD∨∧D.A┐B∨∧CD∨ 8. 优化可生成__D___的目标代码。 A.运行时间较短 B.占用存储空间较小 C.运行时间短但占用内存空间大D.运行时间短且占用存储空间小 9.下列___C___优化方法不是针对循环优化进行的。 A. 强度削弱B.删除归纳变量C.删除多余运算D.代码外提 10.编译程序使用_B_区别标识符的作用域。 A. 说明标识符的过程或函数名B.说明标识符的过程或函数的静态层次 C.说明标识符的过程或函数的动态层次 D. 标识符的行号 三、判断题(对的打√,错的打×,每小题1分,共10分) 2.一个有限状态自动机中,有且仅有一个唯一的终态。x

编译原理测试及答案

编译原理期中测试答案 三、单项选择题(每题3分,共15分) 1.设有文法G[S]: S→(AS)|(b) A→(SaA)|(a) 该文法的句型(((b)a(a))(b))有 C 个直接短语。 A.1 B. 2 C. 3 D. 4 2.如果一个文法满足 D ,则称该文法是二义性文法。 (1) 文法的某一个句子存在两个(包括两个)以上的语法树 (2) 文法的某一个句子存在两个(包括两个)以上的最左推导 (3) 文法的某一个句子存在两个(包括两个)以上的最右推导 (4) 在进行归约时,文法的某些规范句型的句柄不唯一 上述描述中的所有正确描述有: A. (1) B. (1)(2) C. (1)(2)(3) D. (1)(2)(3)(4) 3.构造一个不带回溯的自顶向下语法分析器,要求文法满足 E 。 A.对每个形如A→x1|x2|…|xn的产生式,要求FIRST(xi)与FIRST(xj)的交集为空集(i≠j) B.对每个形如A→x1|x2|…|xn的产生式,若xi* ε,则要求FIRST(xj)与FOLLOW(A)的交集为空集(i≠j) C. 不含左递归 D. A和B同时满足 E. A、B和C同时满足

4、给定文法A→bA|cc,下列符号串中,是该文法的句子的是 C 。 ① cc ② bcbc ③ bcbcc ④ bccbcc ⑤ bbbcc A① B. ①③④⑤ C. ①⑤ D. ①④⑤ 5、若一个句型中出现了某一产生式的右部,则此右部 B 是该句型的句柄。 A.一定 B. 不一定 C. 一定不 D. 无法判断 四、简述题(每题5分,共20分) 1、写一上下文无关文法,它能产生语言}0 n。 n a L m b , =m | {>= # S→A#B A→Aa|ε B→Bb|ε 2、将文法G[S] 改写为等价的G′[S],使G′[S]不含左递归和左公共因子。G[S]:S→bSAe | bA A→Ab | d 答:文法G[S] 改写为等价的不含左递归和左公共因子的 G'[S]S→bB B→SAe | A A→d A' A' →bA' | ε 3、什么是文法的二义性?下面的文法是二义的吗?为什么?

编译原理第3章 习题解答

第3章习题解答 1.构造正规式1(0|1)*101相应的DFA. [答案] 先构造NFA ============================================================== 2.将下图确定化:

[答案] 重新命名,令VQ为A、QU为B、VZ为C、V为D、QUZ为E、Z为F。 ================================================================ 3.把下图最小化: [答案] (1)初始分划得Π0:终态组{0},非终态组{1,2,3,4,5}

对非终态组进行审查: {1,2,3,4,5}a {0,1,3,5} 而{0,1,3,5}既不属于{0},也不属于{1,2,3,4,5} ∵{4} a {0},所以得新分划 (2)Π1:{0},{4},{1,2,3,5} 对{1,2,3,5}进行审查: ∵{1,5} b {4} {2,3} b {1,2,3,5},故得新分划 (3)Π2:{0},{4},{1, 5},{2,3} {1, 5} a {1, 5} {2,3} a {1,3},故状态2和状态3不等价,得新分划 (3)Π3:{0},{2},{3},{4},{1, 5} 这是最后分划了 (4)最小DFA : ======================================= 4.构造一个DFA ,它接收Σ={0,1}上所有满足如下条件的字符串:每个1都有0直接跟在右边。并给出该语言的正规式和正规文法。 [答案] 按题意相应的正规表达式是0*(100*)*0* 构造相应的DFA ,首先构造NFA 为 用子集法确定化 可最小化,终态组为G1={C, D},非终态组为G2={S, A, B} 对于G2分析:f(S,0)=A, f(A,0)=A, 后继状态均属于G2 而f(B,0)=C, 后继状态属于G1 将G2分割成G21={S ,A}, G22={B}

编译原理试题及答案3

编译原理复习题 一、填空题: 1、编译方式与解释方式的根本区别在于(是否生成目标代码)。 2、对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。 3、如果编译程序生成的目标程序是机器代码程序,则源程序的执行分为两大阶段:(编译阶段)和(运行阶段)。 4、如果编译程序生成的目标程序是汇编语言程序,则源程序的执行分成三个阶段:(编译阶段)、(汇编阶段)和(运行阶段)。 5、自顶向下语法分析方法会遇到的主要问题有(回溯)和((左递归带来的)无限循环)。 6、LL(k)分析法中,第一个L的含义是(从左到右进行分析),第二个L的含义是(每次进行最左推导),“k”的含义是(向输入串中查看K个输入符号)。 7、LL(1)分析法中,第一个L的含义是(从左到右进行分析),第二个L的含义是(每次进行最左推导),“1”的含义是(向输入串中查看1个输入符号)。 8、自顶向下语法分析方法的基本思想是:从(识别符号)出发,不断建立(直接推导),试图构造一个推导序列,最终由它推导出与输入符号相同的(符号串)。 9、自底向上语法分析方法的基本思想是:从待输入的符号串开始,利用文法的规则步步向上进行(直接归约),试图(归约)到文法的(识别符号|开始符号)。 10、LR(0)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“0”的含义是(向貌似句柄的符号串后查看0个输入符号)。 11、LR(1)分析法的名字中,“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。 12、SLR(1)分析法的名字中,“S”的含义是(简单的),“L”的含义是(从左到右进行分析),“R”的含义是(采用最右推导的逆过程---最左归约),“1”的含义是(向貌似句柄的符号串后查看1个输入符号)。 13、在编译过程中,常见的中间语言形式有(逆波兰表示)、(三元式)、(四元式)和(树形表示)。 14、在编译程序中安排中间代码生成的目的是(便于代码优化)和(便于目标程序的移植)。 15、表达式-a+b*(-c+d)的逆波兰表示为(a-bc-d+*+ )。 16、表达式a+b*(c+d/e)的逆波兰表示为(abcde/+*+ )。 17、表达式a:=a+b*c↑(d/e)/f的逆波兰表示为(aabcde/↑*f/+:= )。 18、文法符号的属性有(继承属性)和(综合属性)两种。 19、一个文法符号的继承属性是通过语法树中它的(兄弟结点与父)结点的相应文法符号的属性来计算的。 20、一个文法符号的综合属性是通过语法树中它的(子)结点的属性来计算的。

陈火旺编译原理课后习题答案

第二章 P36-6 (1) L G ()1是0~9组成的数字串 (2) 最左推导: N ND NDD NDDD DDDD DDD DD D N ND DD D N ND NDD DDD DD D ??????????????????0010120127334 556568 最右推导: N ND N ND N ND N D N ND N D N ND N ND N D ??????????????????77272712712701274434 886868568 P36-7 G(S) O N O D N S O AO A AD N →→→→→1357924680||||||||||| P36-8 文法: E T E T E T T F T F T F F E i →+-→→|||*|/()| 最左推导: E E T T T F T i T i T F i F F i i F i i i E T T F F F i F i E i E T i T T i F T i i T i i F i i i ?+?+?+?+?+?+?+?+??????+?+?+?+?+?+********()*()*()*()*()*()*() 最右推导: E E T E T F E T i E F i E i i T i i F i i i i i E T F T F F F E F E T F E F F E i F T i F F i F i i i i i ?+?+?+?+?+?+?+?+?????+?+?+?+?+?+?+**********()*()*()*()*()*()*()*() 语法树:/********************************

期末考试编译原理试卷及答案

一. 填空题(每空2分,共20分) 1. 不同的编译程序关于数据空间的存储分配策略可能不同,但大部分编译中采用的方案有两种:静 态存储分配方案和动态存储分配方案,而后者又分为(1) 和 (2) 。 2. 规范规约是最(3)规约。 3. 编译程序的工作过程一般划分为5个阶段:词法分析、(4) 、语义分析与中间代码生成,代码优化及(5) 。另外还有(6)和出错处理。 4.表达式x+y*z/(a+b)的后缀式为 (7) 。 5.文法符号的属性有综合属性和 (8)。 6.假设二位数组按行存放,而且每个元素占用一个存储单元,则数组a[1..15,1..20]某个元素a[i ,j]的地址 计算公式为(9)。 7.局部优化是局限于一个(10)范围内的一种优化。 二. 选择题(1-6为单选题,7-8为多选题,每问2分,共20分) 1. 一个上下文无关文法G 包括四个组成部分:一组终结符,一组非终结符,一个( ),以及一组 ( )。 A . 字符串 B . 产生式 C . 开始符号 D . 文法 2.程序的基本块是指( )。 A . 一个子程序 B . 一个仅有一个入口和一个出口的语句 C . 一个没有嵌套的程序段 D . 一组顺序执行的程序段,仅有一个入口和一个出口 3. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于( )分析方法。 A . 自左向右 B . 自顶向下 C . 自底向上 D . 自右向左 4.在通常的语法分析方法中,( )特别适用于表达式的分析。 A . 算符优先分析法 B . LR 分析法 C . 递归下降分析法 D . LL (1)分析法 5.经过编译所得到的目标程序是( )。 A . 四元式序列 B . 间接三元式序列 C . 二元式序列 D . 机器语言程序或汇编语言程序 6. 一个文法所描述的语言是( );描述一个语言的文法是( )。 A . 唯一的 B . 不唯一的 C . 可能唯一,也可能不唯一 7. 如果在文法G 中存在一个句子,当其满足下列条件( )之一时,则称该文法是二义文法。 A . 其最左推导和最右推导相同 B . 该句子有两个不同的最左推导 C . 该句子有两个不同的最右推导 D . 该句子有两棵不同的语法树

编译原理试题及答案

参考答案 一、单项选择题(共10小题,每小题2分,共20分) 1.语言是 A .句子的集合 B .产生式的集合 C .符号串的集合 D .句型的集合 2.编译程序前三个阶段完成的工作是 A .词法分析、语法分析和代码优化 B .代码生成、代码优化和词法分析 C .词法分析、语法分析、语义分析和中间代码生成 D .词法分析、语法分析和代码优化 3.一个句型中称为句柄的是该句型的最左 A .非终结符号 B .短语 C .句子 D .直接短语 4.下推自动机识别的语言是 A .0型语言 B .1型语言 C .2型语言 D .3型语言 5.扫描器所完成的任务是从字符串形式的源程序中识别出一个个具有独立含义的最小语法单位即 A . 字符 B .单词 C .句子 D .句型 6.对应Chomsky 四种文法的四种语言之间的关系是 A .L 0?L 1?L 2?L 3 B .L 3?L 2?L 1?L 0 C .L 3=L 2?L 1?L 0 D .L 0?L 1?L 2=L 3 7.词法分析的任务是 A .识别单词 B .分析句子的含义 C .识别句子 D .生成目标代码 8.常用的中间代码形式不含 A .三元式 B .四元式 C .逆波兰式 D .语法树 9. 代码优化的目的是 A .节省时间 B .节省空间 C .节省时间和空间 D .把编译程序进行等价交换 10.代码生成阶段的主要任务是 A .把高级语言翻译成汇编语言 B .把高级语言翻译成机器语言 C .把中间代码变换成依赖具体机器的目标代码 装 订 线

D.把汇编语言翻译成机器语言 二、填空题(本大题共5小题,每小题2分,共10分) 1.编译程序首先要识别出源程序中每个(单词),然后再分析每个(句子)并翻译其意义。2.编译器常用的语法分析方法有(自底向上)和(自顶向下)两种。 3.通常把编译过程分为分析前端与综合后端两大阶段。词法、语法和语义分析是对源程序的(分析),中间代码生成、代码优化与目标代码的生成则是对源程序的(综合)。 4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即(静态存储分配)方案和(动态存储分配)方案。 5.对编译程序而言,输入数据是(源程序),输出结果是(目标程序)。 三、名词解释题(共5小题,每小题4分,共20分) 1.词法分析 词法分析的主要任务是从左向右扫描每行源程序的符号,按照词法规则 从构成源程序的字符串中识别出一个个具有独立意义的最小语法单位, 并转换成统一的内部表示(token),送给语法分析程序。 2.LL(1)文法 若文法的任何两个产生式A →α | β都满足下面两个条件: (1)FIRST(α) ? FIRST(β ) = φ; (2)若β?* ε,那么FIRST(α) ? FOLLOW( A ) = φ。 我们把满足这两个条件的文法叫做LL(1)文法,其中的第一个L代表从左 向右扫描输入,第二个L表示产生最左推导,1代表在决定分析器的每步 动作时向前看一个输入符号。除了没有公共左因子外,LL(1)文法还有一 些明显的性质,它不是二义的,也不含左递归。 3.语法树 句子的树结构表示法称为语法树(语法分析树或语法推导树)。 给定文法G=(V N,V T,P,S),对于G的任何句型都能构造与之关联的 语法树。这棵树具有下列特征: (1)根节点的标记是开始符号S。 (2)每个节点的标记都是V中的一个符号。 (3)若一棵子树的根节点为A,且其所有直接子孙的标记从左向右的排列 次序为A1A2…A R,那么A→A1A2…A R一定是P中的一条产生式。

编译原理试题B及答案

编译原理试题B 一、单项选择题(每题1分,共20分) 1、对编译系统有关概念描述正确的是( B) A.目标程序只能是机器语言 B. 编译程序处理的对象是源语言 C.解释程序属于编译程序 D. 词法分析无法自动进行 2. 设有表达式a*b-c,将其中a*b识别为表达式的编译阶段是什么 (B) A.词法分析 B. 语法分析 C.语义分析 D. 代码生成 3. 下面不能用于对文法进行描述的是(A ) A.源语言 B. EBNF C.BNF D. 语法图 4. 设有文法G[S]: S→0S|1A|0,A→1|1S|0B,B→1A|0B,下列符号串中是该文法的句子的是 ()?A.1010001001101 B.0101001110010010 C.1101010011110111 D.1010011101101010 (可画出DFA验证) 5. 文法G[S]: S→aA|bC|a A→aS|bB B→aC|bA|b C→aB|bS ,则不是L(G)句子的是( B ) A.a100b50ab100 B. a1000b500aba C.a500b60aab2a D. a100b40ab10aa (画出DFA) 6. 哪个不是DFA的构成成分(B) A.有穷字母表 B. 初始状态集合 C.终止状态集合 D. 有限状态集合 7.词法分析器的输入是( B ) A.单词符号串 B.源程序 C.语法单位 D.目标程序 8.在词法分析阶段不能识别的是(C ) A.标识符 B. 运算符 C.四元式 D. 常数 9.设有一段C语言程序 while(i&&++j)

{ c=2.19; j+=k; i++; } ,经过词法分析后可以识别的单词个数是(B ) A.19 B.20 C.21 D.23 10.自上而下语法分析的主要动作是( B ) A.移进 B. 推导 C.规约 D. 匹配 11.下面不属于LL(1)分析器的自称部分是( D ) A.LL(1)总控程序 B. LL(1)分析表 C.分析栈 D.源程序串 12.设有文法G[S]为 S→AB|bC, A→ε|b,B→ε|aD,C→AD|b,D→aS|c 则FOLLOW(A)为(A ) A.{a,c,#} B.{c,#} C.{a,#} D.{#} 13.设有文法G[S]: S→Ap|Bq,A→a|cA,B→b|dB ,则FIRST(Ap)为( C )A.{p,q} B. {b,d} C.{a,c} D. 其他 14.自下而上语法分析的主要分析动作是(D ) A.推导 B. 规约 C.匹配 D. 移进-规约 15.算法优先分析中,可规约串是( C ) A.句柄 B.活前缀 C.最左素短语 D.素短语 16. 设有文法G={{S},{a},{S→SaS|ε},S},该文法是( B ) A.LL(1)文法 B.二义性文法 C.SLR(1)文法 D.算法优先文法 17、中间代码生成时所以据的是(C ) A.语法规则 B.词法规则 C.语义规则D.等价变换规则 18、给定文法G: E→E+T|T,T→T*F|F,F→i|(E) 则L(G)中的一个句子i+i+(i*i)*i的逆波兰表示为( C ) A.iii*i++ B.ii+iii**+ C.ii+ii*i*+ D.其他

编译原理第三版课后习题答案

目录 P36-6 (2) P36-7 (2) P36-8 (2) P36-9 (3) P36-10 (3) P36-11 (3) P64–7 (4) P64–8 (5) P64–12 (5) P64–14 (7) P81–1 (8) P81–2 (9) P81–3 (12) P133–1 (12) P133–2 (12) P133–3 (14) P134–5 (15) P164–5 (19) P164–7 (19) P217–1 (19) P217–3 (20) P218–4 (20) P218–5 (21) P218–6 (22) P218–7 (22) P219–12 (22) P270–9 (24)

P36-6 (1) L G ()1是0~9组成的数字串 (2) 最左推导: N ND NDD NDDD DDDD DDD DD D N ND DD D N ND NDD DDD DD D ??????????????????0010120127334 556568 最右推导: N ND N ND N ND N D N ND N D N ND N ND N D ??????????????????77272712712701274434 886868568 P36-7 G(S) O N O D N S O AO A AD N →→→→→1357924680||||||||||| P36-8 文法: E T E T E T T F T F T F F E i →+-→→|||*|/()| 最左推导: E E T T T F T i T i T F i F F i i F i i i E T T F F F i F i E i E T i T T i F T i i T i i F i i i ?+?+?+?+?+?+?+?+??????+?+?+?+?+?+********()*()*()*()*()*()*() 最右推导: E E T E T F E T i E F i E i i T i i F i i i i i E T F T F F F E F E T F E F F E i F T i F F i F i i i i i ?+?+?+?+?+?+?+?+?????+?+?+?+?+?+?+**********()*()*()*()*()*()*()*() 语法树:/********************************

编译原理考试试题与答案(汇总)

《编译原理》考试试题及答案(汇总) 一、是非题(请在括号,正确的划√,错误的划×)(每个2分,共20分) 1.编译程序是对高级语言程序的解释执行。(× ) 2.一个有限状态自动机中,有且仅有一个唯一的终态。(×) 3.一个算符优先文法可能不存在算符优先函数与之对应。(√ ) 4.语法分析时必须先消除文法中的左递归。(×) 5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。(√) 6.逆波兰表示法表示表达式时无须使用括号。(√ ) 7.静态数组的存储空间可以在编译时确定。(×) 8.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。(×) 9.两个正规集相等的必要条件是他们对应的正规式等价。(× ) 10.一个语义子程序描述了一个文法所对应的翻译工作。(×) 二、选择题(请在前括号选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分) 1.词法分析器的输出结果是_____。 A.( ) 单词的种别编码B.( ) 单词在符号表中的位置 C.( ) 单词的种别编码和自身值D.( ) 单词自身值 2.正规式 M 1 和 M 2 等价是指_____。 A.( ) M1和M2的状态数相等 B.( ) M1和M2的有向边条数相等C.( ) M1和M2所识别的语言集相等D.( ) M1和M2状态数和有向边条数相等

3.文法G:S→xSx|y所识别的语言是_____。 A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx* 4.如果文法G是无二义的,则它的任何句子α_____。 A.( )最左推导和最右推导对应的语法树必定相同 B.( ) 最左推导和最右推导对应的语法树可能不同 C.( ) 最左推导和最右推导必定相同 D.( )可能存在两个不同的最左推导,但它们对应的语法树相同 5.构造编译程序应掌握______。 A.( )源程序B.( ) 目标语言 C.( ) 编译方法 D.( ) 以上三项都是 6.四元式之间的联系是通过_____实现的。 A.( ) 指示器B.( ) 临时变量 C.( ) 符号表 D.( ) 程序变量 7.表达式(┐A∨B)∧(C∨D)的逆波兰表示为_____。 A. ( ) ┐AB∨∧CD∨B.( ) A┐B∨CD∨∧ C.( ) AB∨┐CD∨∧ D.( ) A┐B∨∧CD∨ 8. 优化可生成_____的目标代码。 A.( ) 运行时间较短B.( ) 占用存储空间较小C.( ) 运行时间短但占用存空间大D.( ) 运行时间短且占用存储空间小 9.下列______优化方法不是针对循环优化进行的。 A. ( ) 强度削弱 B.( ) 删除归纳变量 C.( ) 删除多余运算 D.( ) 代码外提

编译原理习题及答案(整理后)

第一章 1、将编译程序分成若干个“遍”是为了。 b.使程序的结构更加清晰 2、构造编译程序应掌握。 a.源程序b.目标语言 c.编译方法 3、变量应当。 c.既持有左值又持有右值 4、编译程序绝大多数时间花在上。 d.管理表格 5、不可能是目标代码。 d.中间代码 6、使用可以定义一个程序的意义。 a.语义规则 7、词法分析器的输入是。 b.源程序 8、中间代码生成时所遵循的是- 。 c.语义规则 9、编译程序是对。 d.高级语言的翻译 10、语法分析应遵循。 c.构词规则 二、多项选择题 1、编译程序各阶段的工作都涉及到。 b.表格管理c.出错处理 2、编译程序工作时,通常有阶段。 a.词法分析b.语法分析c.中间代码生成e.目标代码生成 三、填空题 1、解释程序和编译程序的区别在于是否生成目标程序。 2、编译过程通常可分为5个阶段,分别是词法分析、语法分析中间代码生成、代码优化和目标代码生成。 3、编译程序工作过程中,第一段输入是源程序,最后阶段的输出为标代码生成程序。 4、编译程序是指将源程序程序翻译成目标语言程序的程序。

一、单项选择题 1、文法G:S→xSx|y所识别的语言是。 a. xyx b. (xyx)* c. x n yx n(n≥0) d. x*yx* 2、文法G描述的语言L(G)是指。 a. L(G)={α|S+?α , α∈V T*} b. L(G)={α|S*?α, α∈V T*} c. L(G)={α|S*?α,α∈(V T∪V N*)} d. L(G)={α|S+?α, α∈(V T∪V N*)} 3、有限状态自动机能识别。 a. 上下文无关文法 b. 上下文有关文法 c.正规文法 d. 短语文法 4、设G为算符优先文法,G的任意终结符对a、b有以下关系成立。 a. 若f(a)>g(b),则a>b b.若f(a)

编译原理课后习题答案

第一章 1.典型的编译程序在逻辑功能上由哪几部分组成? 答:编译程序主要由以下几个部分组成:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成、错误处理、表格管理。 2. 实现编译程序的主要方法有哪些? 答:主要有:转换法、移植法、自展法、自动生成法。 3. 将用户使用高级语言编写的程序翻译为可直接执行的机器语言程序有哪几种主要的方式? 答:编译法、解释法。 4. 编译方式和解释方式的根本区别是什么? 答:编译方式:是将源程序经编译得到可执行文件后,就可脱离源程序和编译程序单独执行,所以编译方式的效率高,执行速度快; 解释方式:在执行时,必须源程序和解释程序同时参与才能运行,其不产生可执行程序文件,效率低,执行速度慢。

第二章 1.乔姆斯基文法体系中将文法分为哪几类?文法的分类同程序设计语言的设计与实现关 系如何? 答:1)0型文法、1型文法、2型文法、3型文法。 2) 2. 写一个文法,使其语言是偶整数的集合,每个偶整数不以0为前导。 答: Z→SME | B S→1|2|3|4|5|6|7|8|9 M→ε | D | MD D→0|S B→2|4|6|8 E→0|B 3. 设文法G为: N→ D|ND D→ 0|1|2|3|4|5|6|7|8|9 请给出句子123、301和75431的最右推导和最左推导。 答:N?ND?N3?ND3?N23?D23?123 N?ND?NDD?DDD?1DD?12D?123 N?ND?N1?ND1?N01?D01?301 N?ND?NDD?DDD?3DD?30D?301 N?ND?N1?ND1?N31?ND31?N431?ND431?N5431?D5431?75431 N?ND?NDD?NDDD?NDDDD?DDDDD?7DDDD?75DDD?754DD?7543D?75431 4. 证明文法S→iSeS|iS| i是二义性文法。 答:对于句型iiSeS存在两个不同的最左推导: S?iSeS?iiSes S?iS?iiSeS 所以该文法是二义性文法。 5. 给出描述下面语言的上下文无关文法。 (1)L1={a n b n c i |n>=1,i>=0 } (2)L2={a i b j|j>=i>=1} (3)L3={a n b m c m d n |m,n>=0} 答: (1)S→AB A→aAb | ab B→cB | ε (2)S→ASb |ab

相关文档
最新文档