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

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


2024年4月29日发(作者:)

课后答案网

第二章

P36-6

(1)

L(G

1

)

是0~9组成的数字串

(2)

最左推导:

NNDNDDNDDDDDDD0DDD01DD012D0127

NNDDD3D34

NNDNDDDDD5DD56D568

最右推导:

NNDN7ND7N27ND27N127D1270127

NNDN4D434

NNDN8ND8N68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

最左推导:

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

+T

E+TF

TFi

Fi

i

i+i+i

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

P36-9

句子iiiei有两个语法树:

S

S

iSeS

iS

iiSeS

iSei

iiSei

iiSei

iiiei

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

E+T

E

-T

T

T*F

E-TF

F

Fi

TFi

i

i

Fi

i

i-i-ii+i*i

课后答案网

S

AB

AaAb|

BaBb|

L4:

S

A|B

A0A1|

B1B0|A

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

第三章习题参考答案

P64–7

(1)

1(01|)101

X

*

Y

0

1

1 0 1

X 1 2 3 4 5

1

确定化:

{X}

φ

{1,2,3}

{2,3}

{2,3,4}

{2,3,5}

{2,3,4,Y}

0

φ

φ

{2,3}

{2,3}

{2,3,5}

{2,3}

{2,3,5}

1

{1,2,3}

φ

{2,3,4}

{2,3,4}

{2,3,4}

Y

{2,3,4,Y}

{2,3,4,}

0

1 0

0 2 3

0 0 1 1 0

0 1

1

4 5

6

0

1

1 1

最小化:

课后答案网

课后答案网

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

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

0

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

1

{1,2,4,6}

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

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

0

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

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

01

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

{0,1}{1} {0,1}{1,2}

01

{2,3}{3} {2,3}{4}

01

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

0

1

2

0

0 0 1 0

0 1

1

3 4

5

0

1

1 1

P64–8

(1)

(1|0)

*

01

(2)

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

*

(0|5)|(0|5)

(3)

0

*

1(0|10

*

1)

*

|1

*

0(0|10

*

1)

*

P64–12

(a)

a

a,b

0

a

确定化:

{0}

{0,1}

{1}

1

a

{0,1}

{0,1}

{0}

b

{1}

{1}

φ

课后答案网

课后答案网

φ

给状态编号:

0

1

2

3

a

1

1

0

3

b

2

2

3

3

φ φ

a

a

0 1

a b b b

b

2 3

a

最小化:

{0,1},{2,3}

{0,1}{1} {0,1}{2}

ab

{2,3}{0,3} {2,3}{3}

ab

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

a a

b b

1 2

0

a

b

(b)

b b a

2 3

0

a b

a

a b

b a

4 5

1

a a

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

课后答案网

课后答案网

最小化:

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

{0,1}

a

{1} {0,1}

b

{2,4}

{2,3,4,5}

a

{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

{1} {0,1}

b

{2,4}

{2,4}

a

{1,0} {2,4}

b

{3,5}

{3,5}

a

{3,5} {3,5}

b

{2,4}

b b a

1 2

0

a b

a

P64–14

(1) 0

1

0

0

(2):

X

(010|)

*

1

Y

2

0

1

1

X

0

确定化:

{X,1,Y}

0

{1,Y}

Y

1

{2}

课后答案网

课后答案网

{1,Y}

{2}

φ

给状态编号:

0

1

2

3

0

1

1

1

3

1

2

2

3

3

{1,Y}

{1,Y}

φ

{2}

φ

φ

0

0 1

0

1 0

1 1

1

2 3

0

最小化:

{0,1},{2,3}

{0,1}

0

{1} {0,1}

1

{2}

{2,3}

0

{1,3} {2,3}

1

{3}

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

0

1 1 1

1

3

0

0

0

第四章

P81–1

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

G

(S)

Sa|^|(T)

TST

T

,ST

|

递归子程序:

procedure S;

begin

if sym='a' or sym='^'

then abvance

else if sym='('

课后答案网

课后答案网

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

)={)}

预测分析表

S

T

a ^ ( )

,

#

S(T)

Sa

S^

TST

TST

TST

T

是LL(1)文法

T

T

,ST

P81–2

文法:

课后答案网

课后答案网

ETE

E

E|

TFT

T

T|

FPF

F

*F

|

P(E)|a|b|^

(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)

E

E'

T

T'

+

*

( )

a

b

^

#

ETE'

ETE'

ETE'

ETE'

E

E

E

E

TFT

TFT

TFT

TFT

T

T

T

T

T

T

T

T

T

T

T

课后答案网

课后答案网

F

F'

P

FPF

FPF

FPF

FPF

F

F

*F

F

F

F

F

F

F

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

课后答案网

课后答案网

end;

begin

advance; E;

if sym=')' then advance

else error

end

else error

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

27

28

29

30

31

32

33

34

#((T)

#(S

#(T

#(T,

#(T,a

#(T,S

#(T

#(T)

#S

,a)#

,a)#

,a)#

a)#

)#

)#

)# 归

#

# 归

P133–3

(1)

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

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

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

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

(2)

a

^

(

)

,

a

<

<

^

<

<

(

<

<

)

>

>

=

>

>

,

>

>

<

>

>

G

6

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

(3)优先函数

f

g

f

f

f

a^

a

4

5

^

4

5

(

2

5

)

4

2

,

4

3

f

f

)(,

g

a

g

g

g

g

^

(),

输入字符串

(a,(a,a))#

a, (a,a))#

, (a,a))#

, (a,a))#

动作

预备

(4)

#

#(

#(a

#(t

课后答案网

课后答案网

#(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

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)

1

S A

8

7

9

S

a

10

0

A S

2 3

d

5

确定化:

{0,2,5,7,10}

{1,2,5,7,8,10

S

{1,2,5,7,8,10

}

{2,5,7,8,10}

A

{2,3,5,7,10}

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

11

4

6

a

{11}

{11}

b

{6}

{6}

课后答案网

课后答案网

}

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

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

}

φ

φ

{11}

{11}

{11}

{11}

φ

φ

{6}

{6}

{6}

{6}

φ

φ

A S

5:

ASA

6:

ASA

3:

S

S

S

AS

SAS

S A a

SAS

ASA

Sb

ASA

ASA

Sb

b

Aa

ASA

Aa

Aa

SAS

Sb

S a A S b S A b

a A

4:

SAS

7:

SAS

0:

S

S

SAS

SAS

ASA

A S

SAS

Sb

Sb

ASA

ASA

Sb

b

ASA

Aa

Aa

Aa

a a b b a

1:

Aa

2:

Sb

DFA

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

项目集一样:

I

0

={

S

S

SAS

Sb

ASA

Aa

}

GO(

I

0

,a)={

Aa

}=

I

1

GO(

I

0

,b)={

Sb

}=

I

2

GO(

I

0

,S)={

S

S

ASA

ASA

Aa

SAS

Sb

}=

I

3

课后答案网

课后答案网

GO(

I

0

,A)={

SAS

SAS

Sb

ASA

Aa

}=

I

4

GO(

I

3

,a)={

Aa

}=

I

1

GO(

I

3

,b)={

Sb

}=

I

2

GO(

I

3

,S)={

ASA

SAS

Sb

ASA

Aa

}=

I

5

GO(

I

3

,A)={

ASA

SAS

SAS

Sb

ASA

Aa

}=

I

6

GO(

I

4

,a)={

Aa

}=

I

1

GO(

I

4

,b)={

Sb

}=

I

2

GO(

I

4

,S)={

SAS

ASA

SAS

Sb

ASA

Aa

}=

I

7

GO(

I

4

,A)={

SAS

SAS

Sb

ASA

Aa

}=

I

4

GO(

I

5

,a)={

Aa

}=

I

1

GO(

I

5

,b)={

Sb

}=

I

2

GO(

I

5

,S)={

ASA

SAS

Sb

ASA

Aa

}=

I

5

GO(

I

5

,A)={

ASA

SAS

SAS

Sb

ASA

Aa

}=

I

6

GO(

I

6

,a)={

Aa

}=

I

1

GO(

I

6

,b)={

Sb

}=

I

2

GO(

I

6

,S)={

SAS

ASA

SAS

Sb

ASA

Aa

}=

I

7

GO(

I

6

,A)={

SAS

SAS

Sb

ASA

Aa

}=

I

4

GO(

I

7

,a)={

Aa

}=

I

1

GO(

I

7

,b)={

Sb

}=

I

2

GO(

I

7

,S)={

ASA

SAS

Sb

ASA

Aa

}=

I

5

GO(

I

7

,A)={

ASA

SAS

SAS

Sb

ASA

Aa

}=

I

6

项目集规范族为C={

I

1

I

2

I

3

I

4

I

5

I

6

I

7

}

(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,因为包含项目[

AAS a/b

],所以遇到搜索符号a或b时,应该用

AAS

归约。又因为状态5包含项目[

Aa a/b

],所以遇到搜索符号a时,应该移进。因此

存在“移进-归约”矛盾,所以这个文法不是LR(1)文法。

课后答案网

课后答案网

b b b

1:

5: 8:

S

S #

ASA a/b

S

AS a/b

A

ASA a/b

SAS a/b

SAS a/b

A A

ASA a/b

SAS a/b

Sb a/b

Aa a/b

Sb

a/b

ASA a/b

SAS

a/b

ASA a/b

Aa a/b

S

Sb a/b

A

a a/b

a

a

S

S a S

3:

0: 3:

a a A a

Aa a/b

A

S

S #

SAS #/a/b

9:

6:

Sb #/a/b

SAS a/b

ASA a/b

S

ASA a/b

ASA a/b

ASA a/b

b

4:

ASA a/b

Aa a/b

Sb #/a/b

Aa a/b

Aa a/b

SAS a/b

S

SAS a/b

Sb a/b

A b

Sb a/b

a a S b b

2: 7:

SAS #/a/b

SAS #/a/b

ASA a/b

SAS #/a/b

ASA a/b

Sb #/a/b

10:

S b

Aa a/b

Sb a/b

ASA a/b

SAS a/b

Aa a/b

Sb a/b

A

A

5:

课后答案网

课后答案网

第六章

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

P164–5

(1)

E

E1+T {if ( = int) and ( = int )

then := int

else := real}

E

T { := }

T

{ := real}

T

num { := int}

(2)

P164–7

S

L1|L2 {:=+(/2

)}

S

L {:=}

L

L1B {:=2* + ;

:=+1}

L

B {:=B.c;

:=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(CD)

ACD

ABC@D

ABCD@E

(AB)(CD)

(AB)(CDE)

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)

(2)

(3)

(4)

(5)

(6)

(7)

+, a, b,

T

1

@,

T

1

, -,

T

2

+, c, d,

T

3

*,

T

2

,

T

3

,

T

4

+, a, b,

T

5

+,

T

5

, c,

T

6

-,

T

4

,

T

6

,

T

7

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)

(7)

(8)

(9)

(10)

(11)

(12)

(13)

(14)

(15)

(16)

(17)

(18)

(19)

*(-C+D) i:=E

(-C+D) i:=E*

-C+D) i:=E*(

C+D) i:=E*(-

+D) i:=E*(-i

+D)

+D)

D)

)

i:=E*(-E

i:=E*(E

i:=E*(E+

A-B

A-B-

A-B--

A-B---

A-B---C

A-B---C

A-B--

T

A-B--

T

-

1

1

(@,C,-,

T

)

1

i:=E*(E+i A-B--

T

-D

1

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

T

-D (+,

T

,D,

T

)

11

2

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

T

i:=E*(E)

i:=E+E

i:=E

A-B--

T

-

A-B-

T

A-

T

3

(20)

A

2

2

2

(*,B,

T

,

T

)

3

2

(:=,

T

,-,A)

3

产生的四元式:

(@,C,-,

T

)

(+,

T

,D,

T

)

1

2

(*,B,

T

,

T

)

(:=,

T

,-,A)

3

2

3

1

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

课后答案网

课后答案网

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)

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

课后答案网

课后答案网

(2)翻译模式

方法1:

for E1 := E2 to E3 do S

SF do MS

1

FFor I:E

1

to E

2

Iid

M

SF do MS

1

{backpatch(st,nextquad);

backpatch(st,);

emit( ‘:=’ ‘+’1);

emit(‘j

,’ ‘,’ ‘,’);

st := ist;

}

{ist:= makelist(nextquad);

FFor I:E

1

to E

2

Iid

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

方法2:

S→ for id:=E1 to E2 do S1

S→ F S1

F→ for id:=E1 to E2 do

Fforid:E1toE2

do

M

emit(‘j>,’ ‘,’ ‘,0’);

emit( ‘:=’);

st := makelist(nextquad);

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

:= ;

:= ;

}

{p:=lookup();

if p <> nil then

:= p

else error}

{ := nextquad}

{

INITIAL=NEWTEMP;

emit(‘:=,’’, -,’ INITIAL);

FINAL=NEWTEMP;

emit(‘:=,’’, -,’ FINAL);

p:= nextquad+2;

emit(‘j,’ INITIAL ‘,’ FINAL ’,’ p);

st:=makelist(nextquad);

课后答案网

课后答案网

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

:=lookup();

if il then

emit( ‘:=’ INITIAL)

:=nextquad;

:=FINAL;

}

SFS1

{

backpatch(st, nextquad)

p:=nextquad+2;

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

st := merge(st, makelist(nextquad));

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

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

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

}

第九章

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

B

1

D:=B*B

if C

L

1

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

E:=A*A

F:=F+1

E:=E+F

B

2

write E

halt

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

L

1

: E:=B*B

F:=F+2

E:=E+F

B

3

write E

if E>100 goto

L

2

课后答案网

B

BB

BB

课后答案网

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

halt

B

4

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

L

2

: F:=F-1

goto

L

1

B

5

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

基本块为

B

1

B

2

B

3

B

4

B

5

P307-4

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 A

halt

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

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

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

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

课后答案网

课后答案网

P307-5

A:=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) 删除归纳变量

课后答案网


发布者:admin,转转请注明出处:http://www.yc00.com/web/1714370208a2433796.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信