第二章
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 删除归纳变量
编译原理课后复习题答案(陈火旺+第三版)



