好文档 - 专业文书写作范文服务资料分享网站

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

天下 分享 时间: 加入收藏 我要投稿 点赞

第二章

P36-6

(1)

L(Gi)是o~9组成的数字串

(2) 最左推导 :

N N N

ND ND ND

NDD DD NDD

NDDD DDDD

0DDD

01DD

012D 0127

3D 34 DDD 5DD

56D

568

最右推导 :

N N N

ND ND

ND

N7 N4 N8

ND7 N27 D4 34 ND8 N68

ND27

N127

D127

0127

D68 568

P36-7

G(S)

O 1|3|5|7|9 N 2|4|6|8|O D 0|N S O|AO A AD|N

P36-8

文法:

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

最左推导 :

EE ET i*( i

最右推导

T T T F T*F T) i

T

F*F

i *F

iT

i T* F i *( E) i*( E

i F* F i T)

i* F i i *i T) i*( F T)

i*( T

*( i F) i *( i i

)

EE TE T*F E T*i

E F*i E

i*i F *( E

T i * i F i*i i i* F)

F*( E i)

ET F*T F*F F *( T i) F*( F i) F *( E) F *( E T)

F *(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 TS |T T (S)|()

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

P36-11

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

S AC

A aAb | ab C cC |

L2:

S AB A aA| B bBc|bc

L3:

E

E

T

i

i+i*i

i-i-i

S AB A aAb| B aBb|

L4:

S A| B A 0A1| B 1B0| A

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

第三章习题参考答案

P64 - 7

1(01)*101

0

7

确定化: 0 {X} 1 {1,2,3} 0 {1,2,3} {2,3} {2,3,4} {2,3,5} {2,3,4,Y}

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

最小化:

{0,1,2,3,4,5},{6}

{0,123,4,5}。 {1,3,5} {0,1,2,3,4,5}1 {1,2,4? {0,1,2,3,4},{ 5},{6} {0,1,2,34}。{1,3,5} {0,1,23,{4},{ 5},{6} {0,1,23。 {1,3} {0,123^ {1,2,4} {0,1},{2,0}{4},{ $,{6 {0,1} 0 {1} {0,1} 1 {1,2} {2,3}0 B 门匡{4}

{0},{1},{2,3},{ 4},{ 5},{ 6}

0

P64 — 8

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

0 1(0|10 1) |1 0(0 |10 1)

P64 - 12

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

0 0 0 给状态编号: a 0 1 2 3 1 1 0 3 b 2 2 3 3 最小化:

{0,1},{ 2,3}

{0,1} a {1} {0,1}b {2} {2,3}a {0,3} {2,3}b {3} {0,1},{ 2},{ 3}

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

最小化:

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

{0,1}a {1} {0,1}b {2,4} {2,3,4,5爲{1,3,0,5} {2,3,4,5}b {2,3,4,5}

{2,4}a {1,0} {2,4}b {3,5}

{3,5}a {3,5} {3,5}b {2,4} {{0,1},{ 2,4},{ 3,5}}

{0,1}a

{2,4}a

{3,5}a ⑵:

确定化: {1} {1,0}

{3,5}

{0,叽{2,4} {2,4}b {3,5}b

{3,5} {2,4}

0

{X,1,Y} 0 {1,Y} 1 {2} {1,Y} {2} {1,Y} {1,Y} {2} 0 给状态编号: 0 0 0 0 0 1 2 3 1 1 1 3 1 2 2 3 3

最小化:

{0,1},{2,3 {0,1}0 {1} {0,1}1 {2} {2,3}o {1,3} {0,1},{2},{3}

{2,3}i {3}

P81 - 1

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

G(S) S aF|(T) T ST T ,ST |

递归子程序: procedure S; begin

if sym='a' or sym='人'

the n abva nee else if sym='('

the n begi n

advance;T;

if sym=')' the n adva nee; else error; end else error

en d; procedure T; begin

S;T en d; procedure T ; begin

if sym=','

the n begi n

advanee; S;T end

en d; 其中:

sym:是输入串指针IP所指的符号

advanee:是把IP调至下一个输入符号 error:是出错诊察程序

FIRST(S)={a],(} FIRST(T)={af,(} FIRST(T )={,, FOLLOW(T)={)} FOLLOWT )={)} 预测分析表

}

FOLLOW(S)={),,,#}

a S T A ( ) J # S a S A r T ST r T ST S (T) T ST T 是 LL(1)文法 T T ,ST P81 - 2

文法:

E TE E T T

E | FT T |

F F

PF *F |

P (E)|a|b$

(1)

FIRST(E)={(,a,bf} FIRST(E')={+,

} £

} £

FIRST(T)={(,a,b]} FIRST(T')={(,a,b,A, FIRST(F)={(,a,b,A} FIRST(F')={*,

} £

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

考虑下列产生式:

E E| T F P

T| *F | (E)|A|a|b

FIRST(+E) A FIRST( £ )={+} n { £ }= $ FIRST(+E) A FOLLOW(E')={+} A {#,)}= $ FIRST(T) A FIRST( £ )={(,a,b,A}

A { £ }= $

$

$

FIRST(T) A FOLLOW(T')={(,a,b,A} A {+,),#}= FIRST(*F') A FIRST( £ )={*} A { £ }= $

FIRST(*F') A FOLLOW(F')={*} A {(,a,b,A,+,),#}=

FIRST((E)) A FIRST(a) A FIRST(b) A FIRST(A)= $ 所以,该文法式LL(1)文法.

+ * ( ) a b A # E E TE' E TE' E TE' E TE' E' T E E E E T FT T FT T FT T FT T' F F' P T T T F PF F *F T F T T PF F a T T F P T F T T PF F PF F F P (E) F F P F : b P A ⑷

procedure E; begin

if sym='(' or sym='a' or sym='b' or sym='人' the n beg in T; E' end else error end

procedure E: begin

if sym='+'

the n beg in adva nee; E end

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

procedure T; begin

if sym='(' or sym='a' or sym='b' or sym='人' the n beg in F; T' end else error end

procedure T'; begin

if sym='(' or sym='a' or sym='b' or sym='人' the n T else if sym='*' then error

end procedure F; begin

if sym='(' or sym='a' or sym='b' or sym='人' the n beg in P; F' end else error end

procedure F'; begin

if sym='*'

the n beg in adva nee; F' end

end

procedure P; begin

if sym='a' or sym='b' or sym='A' the n adva nee else if sym='(' the n

begin

advanee; E;

if sym=')' the n adva

nee else error end else error

en d; /*************** (1) 是,满足三个条件。

(2) 不是,对于A不满足条件3。 (3) 不是,A B均不满足条件3。

P81 — 3

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

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

E E T E 短语:

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

文法:

第五章

P133- 1

T* F

P133-2

S afl(T)

T T,S|S (1)

最左推导:

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

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

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

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

(((a,a)T ,(a)), a) 最右推导:

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

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

S (T,S)

((T,(a)), a)

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

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

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

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

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

(T,(a,a))

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

A

(T,a) (S,a)

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

((T,S,(a)), a) ((T\(((T,S)“ ,(a)), a) (((T,a)\

((S“ ,(a)), a) (((S,a)“ ,(a)), a)

(((a,a)“ ,(a)), a)

(((a,a),A,(a)),a)

(((S0],(a)),a)

(((T, a),A,(a)),a) (((LSV,(a)),a) (((TL,A,(a)),a)

((S,A,(a)),a) ((T,A,(a)),a) ((TS,(a)),a) ((T,( a)),a) ((T,( S)),a) ((T,( T)),a) ((TS),a) ((IL,a) (S,a) (TS) (T)_ S

步栈

输入串 骤0

# (((a,a),A,(a)),a)# 1 #( ((a,a),A,(a)),a)# 2 #(( (a,a),A,(a)),a)#

3 #((( a,a),A, 4 #(((a (a)),a)#

,a),A,(a)),a)#

5 #(((S ,a),A,(a)),a)# 6 #(((T ,a),A,(a)),a)# 7 #(((T, a),A,(a)),a)# 8 #(((T,a ),A,(a)),a)# 9

#(((T,S

),A,(a)),a)# 10 #(((T ),A,(a)),a)# 11 #(((T) ,A,(a)),a)# 12 #((S ,A,(a)),a)# 13 #((T ,A,(a)),a)# 14 #((T, A,(a)),a)# 15 #((T,A ,(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,),a)# 24 (T) #((T,S

),a)#

动作

预备进 进 进 进 归 归 进 进 归 归

进 归 归

进 进 归 归 进 进 进 归 归

进 归 -归约”过程:

“移进 25 #((T ),a)#

26 #((T) 27 #(S 28 #(T 29 #(T, 30 #(T,a 31 #(T,S 32 #(T 33 #(T) 34

#S

,a)# ,a)# ,a)#

进 归 归 进 进 归

a)# )#

)#

)#

归 #

#

P133-3

(1)

FIRSTVT(S)={a],(} FIRSTVT(T)={,,a】,(} LASTVT(S)={a],)} LASTVT(T)={,,a】,)} ⑵

a a A ( ) 5 A ( ) > > 5 > > < > > < < < < = > > < < G 6是算符文法,并且是算符优先文法

(3)优先函数 a f

A 4 5 ( 2 5 ) 4 2 5 4 5 4 3 g

(4) 栈 # #( #(a #(t

输入字符串 (a,(a,a) ) #

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

,(a,a))#

动作

预备 进 进 归

# (t, # (t,( # ( t, ( a # ( t, ( t # ( t, ( t, # (t, (t,a # (t, (t,s # ( t, ( t # ( t, ( t ) # (t,s # (t # (t # s

success

)

(a,a) ) #

a,a)) #

,a )) # ,a )) # a)) # ))# ))# ))# )# )# )# # #

进 进

进 归 进

进 归

进 归

归 进 归

P134-5

(1) 0. S 4. S 8. A

1S S S 2. S .

AS 5. S b 6. S b S A9. A SA 10. A a

3. S AS A S

SA 7. A

11. A a

确定化:

S {0,2,5,7,10} {1,2,5,7,8,10 } {2,5,7,8,10} A {2,3,5,7,10} a {11} {11} b {6} {1,2,5,7,8,10 {2,3,5,7,9,10 ⑹ } {2,3,5,7,10} {2,5,7,8,10} {2,3,5,7,9,10 } {2,4,5,7,8,10 } {11} {6} {2,4,5,7,8,10 } {2,5,7,8,10} {2,4,5,7,8,10 } {2,5,7,8,10} } {2,3,5,7,10} {2,3,5,7,9,10 } {2,3,5,7,10} {11} {11} {11} {11} {6} {6} {6} {6} {2,3,5,7,9,10 } 0 0 0 0 0 0 0 0 SA Sas Asb ss SA Abi a s Asb SAa A 1 SAs b A SAa As SAa s A A 7 AA As s s A SA

DFA

构造LR(O)项目集规范族也可以用 项目集 ?样:

GO函数来计算得到。所得到的项目集规范族与上图中的

s,s ={ s

GO(I a)={ A o, GO(I b)={ S o, GO(I S)={ S ,

10

AS, S b, A

a }= Ii

b }= 12

SA,A a}

S,A S A,A

SA,A a,S AS, S b}= 13

GO(I 0 , A)S ={ (I 3 , a)A GO={ GO(I 3 , b)S ={ GO(I 3 , S)A ={ GO(I 3 , A)

A S, S

a

I1 }= ,

I2

AS

S

b, A

SA

A

a }= I 4

b }=

S A , S

A

={ GO(I 4 , a)A ={ GO(I 4 , b)S ={ GO(I 4 , S)S ={ GO(I 4 , A)S ={ GO(I 5 , a)A ={ GO(I 5 , b)S ={ GO(I 5 , S)A

={ GO(I 5, A)={ A GO(I 6 , a)={ A GO(I 6 , b)={ S GO(I 6 , S)S ={ GO(I 6, A)={ S GO(I 7, a)={ A GO(I 7, b)={ S GO(I 7, S)={ A GO(I 7, A)={

SA , S a }= I1

b }= AS , A A S, S

I2

AS, S b, A SA, A a}= I 5

bA SA, A A S, S AS, S

a}= I 6

S

A , AS

I2

S

S

AS, S b, A b, A SAA

SA , A

a }= I 4

a }= I 7

a

b

}= I1 }=

S A , S

SA , S a }= I1

b }= AS , A A S, S

I2

AS, S b, A SA, A a}= I 5

bA SA, A A S, S AS, S

a}= I 6

S

A , AS

I2

S

S

AS, S b, A b, A SA, A

SA, A a}= I 4

a}= I 7

a

b

}= I1 }=

S A , S

A

SA , S

AS, S b, A SA, A a }= I 5 A S, S AS, S bA SA , A

I3 , I

4,

a }= I 6

项目集规范族为 C={ I1 , I 2,

I5, I 6, I7}

⑶不是SLR文法

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

状态 3:FOL LOW('S )={#} 不包含 a,b

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

(4) 构造例如 LR(1) 项目集规范族 见下图:

对于状态5,因为包含项目[A AS a/b],所以遇到搜索符号a或b时,应该用A AS 归约。又因为状态 5包含项目[A a a/b],所以遇到搜索符号 a时,应该移进。因此 存在“移进-归约”矛盾,所以这个文法不是

LR(1)文法。

5: 8: A S S S A A SA A S AS b SA a a/b a/b a/b a/b a/b a/b S S S A A A S AS b SA a a/b a/b a/b a/b a/b 0: a S S S A A S # AS #/a/b b S6: 9: #/a/b 4:

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

2: 7: S S A S AS SA a #/a/b #/a/b #/a/b a/b a/b S A AS #/a/b S A a/b SA a AS b S A A b --------- ■ A A S S a/b a/b a/b a/b A 第六章

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

第六章会有点难

P164— 5

(1)

E E1 + T {if (El.type = in t) a nd (「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}

P164-7

S S L L

L1|L2 L L1B B

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

L2.length ?

{S.val:=L.val}

{L.val:=2*L1.val + B.val; L.le ngth:=L1.le ngth+1} {L.val:=B.c; L.le ngth :=1}

B 0 {B.c:=0}

B 1 {B.c:=1} ***********************/

第七章

P217- 1

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

ab@c+* abcde/+*+ a@bc@d+*+

A (A (A

(C D) B) ( C D) B) (C

D E)

A CD

AB C@D AB CD@E

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

或 xy+z*O= P1 jez ab+c f P2 jump abc ff

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, T1 (2) @, T1, -, T2 (3) +, c, d,

T3 (4) *, T2, T3 , T4 (5) +, a, b, T5 (6) +, T5, c, T6

(7) -, T4, T6 , T7

P218-4

自下而上分析过程中把赋值句翻译成四元式的步骤 步骤 输入串

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

:A:=B*(-C+D) 四元式

(6) (7) (8) (9)

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

(11) +D) i:=E*(-E

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

i:=E*(E+

A-B-- T1

-

)

(14)

i:=E*(E+i

A-B-- T 1

-D

(15) =E*(E+E A-B-- T 1

(16) =E(E (17) T

1

-D A-B--

(18) =E*(E) A-B-- 2

=E+E A-B- T T2 -

(19) =E

A-T

2 (20) A

3

产生的四元式: (@,C,-, T )

1 (+,

T1,D, T2 ) (*,B, 1T , T2

) 23 (:=, T3 ,-,A)

P218-5

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

设 A :10*20,B、 CD:宽度为w= 4则

T1:= i * 20 、 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

(@,C,-, T1 )

(+, T1,D, T2)

(*,B, T 2 ,

T3)

(:=, T 3

,-,A)

T18:=4*T16 T19:=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) 103. (j, -, -, 101)

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

,

104. (j=, A, ‘1'

106)

105. (j, -, -, 109)

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

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

(j, -, -, 100) 108.

109. (j < , A, D, 11 1) 110. (j, -, -, 100) 112. (:=, T2, -, A) 113. (j, -, -, 109) 114. (j, -, - 100)

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

P219- 12

/******************** (1)

MAXINT - 5 MAXINT - 4 MAXINT - 3 MAXINT - 2 MAXINT - 1 MAXINT

(2)翻译模式 方法1:

for E1 := :E2 to E3 do S

S F do MS!

F For I : E1 to E2

I id M

S F do MS!

{backpatch(S1.nextlist,nextquad); backpatch(F.truelist,M.quad);

emit(F.place ‘ := ' F.place ‘ +' 1);

emit( ‘ j , ' F.place ‘, ' F.end ‘, ' M.quad); S.n extlist := F.falselist; }

F For I : E! to E2 {F.falselist:= makelist(nextquad);

emit( ' j>, ' El.place ', ' E2.place ' ,0 '); emit(I.Place El.place);

F.truelist := makelist (n extquad); emit( ‘j,-,-,- '); F.place := I.place; F.e nd := E2.place; }

I id

{p:=lookup(id. name);

if p <> nil the n

I.place := p else error}

M

{M.quad := nextquad}

****************/ 方法2:

ST for id:=E1 to E2 do S1 ST F S1

FT for id:=E1 to E2 do

F forid : EltoE 2do

{

INITIAL=NEWTEMP;

emit( ' :=,‘ E1.PLACE,-,‘ INITIAL); FINAL=NEWTEMP; emit( ' :=,‘ E2.PLACE,-,‘ FINAL); p:= n extquad+2; emit( 'j , ' INITIAL ' , ' FINAL ' F.n p); extlist:=makelist (n extquad);

:= ' ‘ emit( ‘ j,—,—,—');

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

nil the n

' :=' INITI

AL)

F.quad:=n extquad; F.fi nal:=FINAL; }

S FS1

{

backpatch(S1. nextlist, n extquad) p:=n extquad+2;

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

S.n extlist := merge(F. nextlist, makelist (n extquad)); emit( ' j,—,—,—'); emit( ' succ,‘ F.place emit( ' j, — , —, ' F.quad); }

-,‘ F.place);

第九章

P270-9

(1) 传名

即当过程调用时,其作用相当于把被调用段的过程体抄到调用出现处, 任一形式参数都代之以相应的实在参数。 A:=2; B:=3; A:=A+1;

A:=A+(A+B); print A; ??? A=9 ⑵传地址

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

② 把T,A,A的地址抄进已知单元 ③ x: = J1;y:=J2;z:=J3 ④ Yf :=y f +1 Z f :=z f +x f

Z

⑤ print A A=8 (3)得结果

每个形参均对应两个单元, 第一个存放实参地址, 第二个存放实参值, 在过程体中对形参的

// Y //

J1,J2,J3

把实参地址抄进形式单元,且

J2=J3

当被调用段工作完 但必须将其中出现的

f:对y的间接访问 f:对z的间接访问

任何引用或赋值都看成是对它的第二个单元的直接访问, 但在过程工作完毕返回前必须把第 二个单元的内容放到第一个单元所指的那个实参单元中 ① 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; //

T :=z2 // 返回前把第二个单元的内容存放到第一个单元所

⑤ x1 f:= x2; y1 T :=y2; z1

指的实参地址中 ⑥ 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

然后就好像使用局部变量 一样

reaflC

halt

A:=0

B4

B:=l

BL

B2

P306-2

read A,B F:=1 C:=A*A B1

D:=B*B if

C

E:=A*A F:=F+1

E:=E+F write

B2

E

halt

L 1: E:=B*B F:=F+2 E:=E+F write B3

E

if E>100 goto

L2

B3

B4

L2 : F:=F-1

goto

L1 B5

基本块为 B1、B2、B3、B4、B5

P307-4

B2有回路,所以{B2}是循环,B2既是入口节点,又是出口节点 (1) (2) (3)

代码外提:不存在不变运算,故无代码外提 强度削弱:A:=K*I B:=J*I * T +

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

P307-5

halt

B4

{B2,B3}是循环,B2是入口节点,也是出口节点 (1) (2)

代码外提:B:=J+1 删除归纳变量

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

第二章P36-6(1)L(Gi)是o~9组成的数字串(2)最左推导:NNNNDNDNDNDDDDNDDNDDDDDDD0DDD01DD
推荐度:
点击下载文档文档为doc格式
4bw8895nuv92i2p9mey92mdyx4233001cd4
领取福利

微信扫码领取福利

微信扫码分享