最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

编译原理课后习题答案(陈火旺+第三版)

来源:动视网 责编:小OO 时间:2025-09-22 22:49:56
文档

编译原理课后习题答案(陈火旺+第三版)

第二章P36-6(1)LG()1是0~9组成的数字串(2)最左推导:NNDNDDNDDDDDDDDDDDDDNNDDDDNNDNDDDDDDDD⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒0010120127334556568最右推导:NNDNNDNNDNDNNDNDNNDNNDND⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒77272712712701274434886868568P36-7G(S)ONODNSOAOAADN→→→→→1357924680|||||||||||P36-8文法:ETETETTF
推荐度:
导读第二章P36-6(1)LG()1是0~9组成的数字串(2)最左推导:NNDNDDNDDDDDDDDDDDDDNNDDDDNNDNDDDDDDDD⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒0010120127334556568最右推导:NNDNNDNNDNDNNDNDNNDNNDND⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒77272712712701274434886868568P36-7G(S)ONODNSOAOAADN→→→→→1357924680|||||||||||P36-8文法:ETETETTF
第二章

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:

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|→→→ε ***************/

第三章习题参

P–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==== 301231240123456011011223323401234561

01

01

}{,,,}{,,}

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

{,}{}{,}{,}

{,}{}{,}{}

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

===== 0

1

0 0 1 0

0 1 0 1 1 1

P–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

P–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

P–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 FT →'

T FT →' T FT →' T FT →'

T'

'→T ε

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

F

F PF →' F PF →' F PF →' F PF →'

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)

(((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} {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:

第六章

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

P1–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)

P1–7

S →L1|L2

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

length

L .2)}

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+*+ )(D C A ⌝∨⌝∨⌝

∨⌝∨⌝⌝CD A )()(D C B A ∨⌝∨∧

∨∨∧D C AB @ )()(E D C B A ∧⌝∨∧∨

∧∨∧∨E CD AB @

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

(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–4T19:=T17[T18]

T20:=T7+T19

Tn:=T20

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

P218–6

100.(jnz, A, -, 0)

101.(j, -, -, 102)

102.(jnz, B, -, 104)

103.(j, -, -, 0)

104.(jnz, C, -, 103)

105.(j, -, -, 106)

106.(jnz, D, -, 104) --假链链首107.(j, -, -, 100) --真链链首假链:{106,104,103}

真链:{107,100}

P218–7

100.(j<, A, C, 102)

101.(j, -, -, 0)

102.(j<, B, D, 104)

103.(j, -, -, 101)

104.(j=, A, ‘1’, 106)

105.(j, -, -, 109)

106.(+, C, ‘1’, T1)

107.(:=, T1, -, C)

108.(j, -, -, 100)

109.(j≤, A, D, 111)

110.(j, -, -, 100)

111.(+, A, ‘2’, T2)

112.(:=, T2, -, A)

113.(j, -, -, 109)

114.(j, -, - 100)

P219–12

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

(1)

MAXINT – 5

MAXINT – 4

MAXINT – 3

MAXINT – 2

MAXINT – 1

MAXINT

方法1:

for E1 := E2 to E3 do S

ε→→=→→M id

I E E I F MS F S 2

11

to :For do

1 do MS F S →

{backpatch(S1.nextlist,nextquad);

backpatch(F.truelist,M.quad); emit(F.place ‘:=’F.place ‘+’1);

emit(‘j ≤,’F.place ‘,’F.end ‘,’M.quad);

S.nextlist := F.falselist; }

21 to :For E E I F =→

{F.falselist:= makelist(nextquad); emit(‘j>,’E1.place ‘,’E2.place ‘,0’);

emit(I.Place ‘:=’E1.place);

F.truelist := makelist(nextquad);

emit(‘j,-,-,-’);

F.place := I.place;

F.end := E2.place;

} id I →

{p:=lookup(id.name);

if p <> nil then I.place := p else error} ε→M

{M.quad := nextquad}

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

方法2:

S → for id:=E1 to E2 do S1

S → F S1

F → for id:=E1 to E2 do

21:toE E forid F =→do {

INITIAL=NEWTEMP;

emit(‘:=,’E1.PLACE ’, -,’ INITIAL);

FINAL=NEWTEMP;

emit(‘:=,’E2.PLACE ’, -,’ FINAL);

p:= nextquad+2; emit(‘j ,’ INITIAL ‘,’ FINAL ’,’ p);

F.nextlist:=makelist(nextquad);

F.place:=lookup(id.name);

if F.place nil then

emit(F.place ‘:=’ INITIAL)

F.quad:=nextquad;

F.final:=FINAL;

}

S

1

FS

{

backpatch(S1.nextlist, nextquad)

p:=nextquad+2;

emit(‘j,’ F.place‘,’ F.final ’,’ p );

S.nextlist := merge(F.nextlist, makelist(nextquad));

emit(‘j,-,-,-’);

emit(‘succ,’ F.place ’, -,’ F.place);

emit(‘j,-,-,’ F.quad);

}

第九章

P270–9

(1) 传名

即当过程调用时,其作用相当于把被调用段的过程体抄到调用出现处,但必须将其中出现的任一形式参数都代之以相应的实在参数。

A:=2;

B:=3;

A:=A+1;

A:=A+(A+B);

print A;

∴A=9

(2) 传地址

即当程序控制转入被调用段后,被调用段首先把实在参数抄进相应的形式参数的形式单元中,过程体对形参的任何引用或赋值都被处理成对形式单元的间接访问。当被调用段工作完毕返回时,形式单元(都是指示器)所指的实参单元就持有所希望的值。

①A:=2;B:=3;T:=A+B

②把T,A,A的地址抄进已知单元J1,J2,J3

③x:=J1;y:=J2;z:=J3 //把实参地址抄进形式单元,且J2=J3

④Y↑:=y↑+1

Z↑:=z↑+x↑ // Y↑:对y的间接访问

Z↑:对z的间接访问

⑤print A

A=8

(3) 得结果

每个形参均对应两个单元,第一个存放实参地址,第二个存放实参值,在过程体中对形参的任何引用或赋值都看成是对它的第二个单元的直接访问,但在过程工作完毕返回前必须把第二个单元的内容放到第一个单元所指的那个实参单元中

①A:=2;B:=3;T:=A+B

②把T,A,A的地址抄进已知单元J1,J2,J3

③x1:=J1;x2:=T;

y1:=J2;y2:=A;

z1:=J3;z2:=A; //将实参的地址和值分别放进两个形式单元中

④y2:=y2+1; z2:=z2+x2; //对形参第二个单元的直接访问

⑤x1↑:=x2; y1↑:=y2; z1↑:=z2 //返回前把第二个单元的内容存放到第一个单元所

指的实参地址中

⑥print A

A=7

(4) 传值

即被调用段开始工作时,首先把实参的值写进相应的形参单元中,然后就好像使用局部变量一样使用这些形式单元

A:=2;

B:=3;

x:=A+B

y:=A

z:=A

y:=y+1

z:=z+x

print A

A=2

过程调用不改变A的值

第十章

P306-1

P306-2

read A,B

F:=1

C:=A*A 1

B

D:=B*B

if C---------------------------

E:=A*A

F:=F+1

E:=E+F 2B

write E

halt

---------------------------

1L : E:=B*B

F:=F+2

E:=E+F 3B

write E

if E>100 goto 2L B B B B B

---------------------------

halt 4B

---------------------------

2L : F:=F-1

goto 1L 5B

---------------------------

基本块为1B 、2B 、3B 、4B 、5B

P307-4

B2有回路,所以{B2}是循环,B2既是入口节点,又是出口节点

(1) 代码外提:不存在不变运算,故无代码外提

(2) 强度削弱:A:=K*I B:=J*I *→+

(3) 删除基本归纳变量:I<100 可以用A<100*K 或B<100*J 代替

I:=1

read J,K A:=K*I

B:=J*I

T :=K*100

L: C:=A*B

write C

A:=A+K

B:=B+J

if AA:=0

I:=1

B:=J+1

C:=B+I

T:=B+100

L1’: A:=C+A

if C=T goto L2

C:=C+1

goto L1’

L2’:

{B2,B3}是循环,B2是入口节点,也是出口节点(1)代码外提:B:=J+1

(2)删除归纳变量

文档

编译原理课后习题答案(陈火旺+第三版)

第二章P36-6(1)LG()1是0~9组成的数字串(2)最左推导:NNDNDDNDDDDDDDDDDDDDNNDDDDNNDNDDDDDDDD⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒0010120127334556568最右推导:NNDNNDNNDNDNNDNDNNDNNDND⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒⇒77272712712701274434886868568P36-7G(S)ONODNSOAOAADN→→→→→1357924680|||||||||||P36-8文法:ETETETTF
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top