编译原理(清华大学-第2版)课后习题答案

编译原理(清华大学-第2版)课后习题答案
编译原理(清华大学-第2版)课后习题答案

第三章

N=>D=> {0,1,2,3,4,5,6,7,8,9}

N=>ND=>NDD

L={a |a(0|1|3..|9)n且 n>=1}

(0|1|3..|9)n且 n>=1

{ab,}

a n

b n n>=1

第6题.

(1) <表达式> => <项> => <因子> => i

(2) <表达式> => <项> => <因子> => (<表达式>) => (<项>)

=> (<因子>)=>(i)

(3) <表达式> => <项> => <项>*<因子> => <因子>*<因子> =i*i

(4) <表达式> => <表达式> + <项> => <项>+<项> => <项>*<因子>+<项>

=> <因子>*<因子>+<项> => <因子>*<因子>+<因子> = i*i+i (5) <表达式> => <表达式>+<项>=><项>+<项> => <因子>+<项>=i+<项> => i+<因子> => i+(<表达式>) => i+(<表达式>+<项>)

=> i+(<因子>+<因子>)

=> i+(i+i)

(6) <表达式> => <表达式>+<项> => <项>+<项> => <因子>+<项> => i+<项> => i+<项>*<因子> => i+<因子>*<因子> = i+i*i

第7题

第9题

语法树

s

s s* s s+a

a a

推导: S=>SS*=>SS+S*=>aa+a*

11. 推导:E=>E+T=>E+T*F

语法树:

E

+T

*

短语: T*F E+T*F

直接短语: T*F

句柄: T*F

12.

短语:

直接短语:

句柄:

13.(1)最左推导:S => ABS => aBS =>aSBBS => aBBS

=> abBS => abbS => abbAa => abbaa 最右推导:S => ABS => ABAa => ABaa => ASBBaa

=> ASBbaa => ASbbaa => Abbaa => a1b1b2a2a3 (2) 文法:S → ABS

S → Aa

S →ε

A → a

B → b

(3) 短语:a1 , b1 , b2, a2 , , bb , aa , abbaa,

直接短语: a1 , b1 , b2, a2 , ,

句柄:a1

14 (1)

S → AB

A → aAb | ε

B → aBb | ε

(2)

S → 1S0

S → A

A → 0A1 |ε

第四章

1. 1. 构造下列正规式相应的DFA

(1)1(0|1)*101

NFA

(2) 1(1010*|1(010)*1)*0

NFA

(3)NFA

(4)NFA

2.解:构造DFA 矩阵表示

b

其中0 表示初态,*表示终态

用0,1,2,3,4,5分别代替{X} {Z} {X,Z} {Y} {X,Y} {X,Y,Z} 得DFA状态图为:

3.解:构造DFA矩阵表示

构造DFA的矩阵表示

其中表示初态,*表示终态

替换后的矩阵

4.(1)解

构造状态转换矩阵:

{2,3} {0,1}

{2,3}a={0,3}

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

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

(2)解:首先把M的状态分为两组:终态组{0},和非终态组{1,2,3,4,5} 此时G=( {0},{1,2,3,4,5} ) {1,2,3,4,5}a={1,3,0,5}

{1,2,3,4,5}b={4,3,2,5}

由于{4}a={0} {1,2,3,5}a={1,3,5}

因此应将{1,2,3,4,5}划分为{4},{1,2,3,5}

G=({0}{4}{1,2,3,5})

{1,2,3,5}a={1,3,5}

{1,2,3,5}b={4,3,2}

因为{1,5}b={4} {23}b={2,3}

所以应将{1,2,3,5}划分为{1,5}{2,3}

G=({0}{1,5}{2,3}{4})

{1,5}a={1,5} {1,5}b={4} 所以{1,5} 不用再划分

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

因为 {2}a={1} {3}a={3} 所以{2,3}应划分为{2}{3}

所以化简后为G=( {0},{2},{3},{4},{1,5})

7.去除多余产生式后,构造NFA如下

G={(0,1,3,4,6),(2,5)} {0,1,3,4,6}a={1,3}

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

所以将{0,1,3,4,6}划分为 {0,4,6}{1,3} G={(0,4,6),(1,3),(2,5)}

{0,4,6}b={3,6,4} 所以 划分为{0},{4,6} G={(0),(4,6),(1,3),(2,5)}

不能再划分,分别用 0,4,1,2代表各状态,构造DFA 状态转换图如下;

b

8.代入得

S = 0(1S|1)| 1(0S|0) = 01(S|ε) | 10(S|ε) = (01|10)(S|ε)

= (01|10)S | (01|10)

= (01|10)*

(01|10)

构造NFA

由NFA可得正规式为(01|10)*(01|10)=(01|10)+

9.状态转换函数不是全函数,增加死状态8,

G={(1,2,3,4,5,8),(6,7)}

(1,2,3,4,5,8)a=(3,4,8) (3,4)应分出

(1,2,3,4,5,8)b=(2,6,7,8)

(1,2,3,4,5,8)c=(3,8)

(1,2,3,4,5,8)d=(3,8)

所以应将(1,2,3,4,5,8)分为(1,2,5,8), (3,4)

G={(1,2,5,8),(3,4),(6,7)}

(1,2,5,8)a=(3,4,8) 8应分出

(1,2,5,8)b=(2,8)

(1,2,5,8)c=(8)

(1,2,5,8)d=(8)

G={(1,2,5),(8),(3,4),(6,7)}

(1,2,5)a=(3,4,8) 5应分出

G={(1,2), (3,4),5, (6,7) ,(8) }

去掉死状态8,

最终结果为 (1,2) (3,4) 5,(6,7) 以1,3,5,6代替,最简DFA为

b

正规式:b*a(da|c)*bb*

第五章

1.

S->a | ^ |( T )

(a,(a,a))

S => ( T ) => ( T , S ) => ( S , S ) => ( a , S) => ( a, ( T )) =>(a , ( T , S ) ) => (a , ( S , S )) => (a , ( a , a ) ) S=>(T) => (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->a | ^ |( T )

T -> T , S

T -> S

消除直接左递归:

S->a | ^ |( T )

T -> S T’

T’ -> , S T’ | ξ

SELECT ( S->a) = {a}

SELECT ( S->^) = {^}

SELECT ( S->( T ) ) = { ( }

SELECT ( T -> S T’) = { a , ^ , ( }

SELECT ( T’ -> , S T’ ) = { , }

SELECT ( T’ ->ξ) = FOLLOW ( T’ ) = FOLLOW ( T ) = { )}

构造预测分析表

分析符号串( a , a )#

分析栈剩余输入串所用产生式

#S ( a , a) # S -> ( T )

# ) T ( ( a , a) # ( 匹配

# ) T a , a ) # T -> S T’

# ) T’ S a , a ) # S -> a

# ) T’ a a , a ) # a 匹配

# ) T’,a) # T’ -> , S T’

# ) T’ S , , a ) # , 匹配

# ) T’ S a ) # S->a

# ) T’ a a ) # a匹配

# ) T’) # T’ ->ξ

# ) ) # )匹配

# # 接受

2.

E->TE’E’->+E E’->ξT->FT’T’->T T’->ξF->PF’F’->*F’F’->ξP->(E) P->a P->b P->∧

SELECT(E->TE’)=FIRST(TE’)=FIRST(T)= {(,a,b,^)

SELECT(E’->+E)={+}

SELECT(E’->ε)=FOLLOW(E’)= {#,)}

SELECT(T->FT’)=FIRST(F)= {(,a,b,^}

SELECT(T’ —>T)=FIRST(T)= {(,a,b,^)

SELECT(T’->ε)=FOLLOW(T’)= {+,#,)}

SELECT(F ->P F’)=FIRST(F)= {(,a,b,^}

SELECT(F’->*F’)={*}

SELECT(F’->ε)=FOLLOW(F’)= {(,a,b,^,+,#,)}

3. S->MH S->a H->Lso H->ξK->dML K->ξL->eHf M->K M->bLM FIRST ( S ) =FIRST(MH)= FIRST ( M ) ∪FIRST ( H ) ∪{ξ} ∪{a}= {a, d , b , e ,ξ} FIRST( H ) = FIRST ( L ) ∪{ξ}= { e , ξ}

FIRST( K ) = { d , ξ}

FIRST( M ) = FIRST ( K ) ∪{ b } = { d , b ,ξ}

FOLLOW ( S ) = { # , o }

FOLLOW ( H ) = FOLLOW ( S ) ∪{ f } = { f , # , o }

FOLLOW ( K ) = FOLLOW ( M ) = { e , # , o }

FOLLOW ( L ) ={ FIRST ( S ) –{ξ} } ∪{o} ∪FOLLOW ( K )

∪{ FIRST ( M ) –{ξ} } ∪FOLLOW ( M )

= {a, d , b , e , # , o }

FOLLOW ( M ) ={ FIRST ( H ) –{ξ} } ∪FOLLOW ( S )

∪{ FIRST ( L ) –{ξ} } = { e , # , o }

SELECT ( S-> M H) = ( FIRST ( M H) –{ξ} ) ∪FOLLOW ( S )

= ( FIRST( M ) ∪FIRST ( H ) –{ξ} ) ∪FOLLOW ( S )

= { d , b , e , # , o }

SELECT ( S-> a ) = { a }

SELECT ( H->L S o ) = FIRST(L S o) = { e }

SELECT ( H ->ξ) = FOLLOW ( H ) = { f , # , o }

SELECT ( K->ξ) = FOLLOW ( K ) = { e , # , o }

SELECT ( L-> e H f ) = { e }

SELECT ( M->K ) = ( FIRST( K ) –{ξ} ) ∪FOLLOW ( M ) = {d,e , # , o }

SELECT ( M -> b L M )= { b }

4 . 文法含有左公因式,变为

S->C $ { b, a }

C-> b A { b }

C-> a B { a }

A -> b A A { b }

A-> a A’ { a }

A’-> ξ{ $ , a, b }

A’-> C { a , b }

B->a B B { a }

B -> b B’ { b }

B’->ξ{ $ , a , b }

B’-> C { a, b }

5. <程序> --- S <语句表>――A <语句>――B <无条件语句>――C <条件语句>――D <如果语句>――E

<如果子句> --F

S->begin A end S->begin A end { begin }

A-> B A-> B A’ { a , if }

A-> A ; B A’-> ; B A’ { ; }

A’->ξ{ end }

B-> C B-> C { a } B-> D B-> D { if }

C-> a C-> a { a }

D-> E D-> E D’ { if }

D-> E else B D’-> else B { else }

D’->ξ{; , end } E-> FC E-> FC { if }

F-> if b then F-> if b then { if }

非终结符是否为空

S-否A-否A’-是B-否C-否D-否D’-是E-否F-否

FIRST(S) = { begin }

FIRST(A) = FIRST(B) ∪FIRST(A’) ∪{ξ} = {a , if , ; , ξ} FIRST(A’) ={ ; , ξ}

FIRST(B) = FIRST(C) ∪FIRST(D) ={ a , if }

FIRST(C) = {a}

FIRST(D) = FIRST(E)= { if }

FIRSR(D’) = {else , ξ}

FIRST(E) = FIRST(F) = { if }

FIRST(F) = { if }

FOLLOW(S) = {# }

FOLLOW(A) = {end}

FOLLOW(A’) = { end }

FOLLOW(B) = {; , end }

FOLLOW (C) = {; , end , else }

FOLLOW(D) = {; , end }

FOLLOW( D’ ) = { ; , end }

FOLLOW(E) = { else , ; end }

FOLLOW(F) = { a }

S A A’ B C D D’ E F if then else begin end a b ;

6. 1.

(1) S -> A | B

(2) A -> aA|a

(3)B -> bB |b

提取(2),(3)左公因子

(1) S -> A | B

(2) A -> aA’

(3) A’-> A|ξ

(4) B -> bB’

(5) B’-> B |ξ

2.

(1) S->AB

(2) A->Ba|ξ

(3) B->Db|D

(4) D-> d|ξ

提取(3)左公因子

(1) S->AB

(2) A->Ba|ξ

(3) B->DB’

(4) B’->b|ξ

(5) D-> d|ξ

3.

(1) S->aAaB | bAbB

(2) A-> S| db

(3) B->bB|a

4

(1)S->i|(E)

(2)E->E+S|E-S|S

提取(2)左公因子

(1)S->i|(E)

(2)E->SE’

(3)E’->+SE’|-SE’ |ξ

5

(1)S->SaA | bB

(2)A->aB|c

(3)B->Bb|d

消除(1)(3)直接左递归

(1)S->bBS’

(2)S’->aAS’|ξ

(3)A->aB | c

(4) B -> dB’

(5)B’->bB’|ξ

6.

(1) M->MaH | H

(2) H->b(M) | (M) |b

消除(1)直接左递归,提取(2)左公因子

(1)M-> HM’

(2)M’-> aHM’ |ξ

(3)H->bH’ | ( M )

(4)H’->(M) |ξ

7. (1)

1)A->baB

4)B->a

将1)、2)式代入3)式

1)A->baB

2)A->ξ

3)B->baBbb

4)B->bb

5)B->a

提取3)、4)式左公因子

1)A->baB

2)A->ξ

3)B->bB’

4)B’->aBbb | b

5)B->a

(3)

1)S->Aa

2)S->b

3)A->SB

4)B->ab

将3)式代入1)式

1)S->SBa

2)S->b

3)A->SB

4)B->ab

消除1)式直接左递归

1)S->bS’

2)S’->BaS’ |ξ

3)S->b

4)A->SB

5)B->ab

删除多余产生式4)

1)S->bS’

2)S’->BaS’ |ξ

3)S->b

4)B->ab

(5)

1)S->Ab

2)S->Ba

3)A->aA

4)A->a

5)B->a

提取3)4)左公因子1)S->Ab

4)A’-> A |ξ

5)B->a

将3)代入1)5)代入2

1)S->aA’b

2)S->aa

3)A->aA’

4)A’-> A |ξ

5)B->a

提取1)2)左公因子

1)S-> aS’

2)S’->A’b | a

3)A->aA’

4)A’-> A |ξ

5)B->a

删除多余产生式5)

1)S-> aS’

2)S’->A’b | a

3)A->aA’

4)A’-> A |ξ

A A’S’S

将3)代入4)

1)S-> aS’

2)S’->A’b | a

3)A->aA ’

4)A’-> aA’ |ξ

将4)代入2)

1)S-> aS’

2)S’->aA’b

3)S’->a

4)S’->b

5)A->aA ’

6)A’-> aA’ |ξ

对2)3)提取左公因子

1)S->aS’

2)S’->aS’’

3)S’’->A’b|ξ

4)S’->b

5)A->aA ’

6)A’-> aA’ |ξ

删除多余产生式5)

1)S->aS’

2)S’->aS’’

3)S’’->A’b|ξ

4)S’->b

第六章

1

S → a | ∧ | ( T )

T → T , S | S

解:(1) 增加辅助产生式 S’→#S#

求 FIRSTVT集

FIRSTVT(S’)= {#}

FIRSTVT(S)= {a ∧ ( }= { a ∧ ( }

FIRSTVT (T) = {,} ∪ FIRSTVT( S ) = { , a ∧ ( }

求 LASTVT集

LASTVT(S’)= { # }

LASTVT(S)= { a ∧ )}

LASTVT (T) = { , a ∧ )}

(2)

因为任意两终结符之间至多只有一种优先关系成立,所以是算符优先文法

(3)

a ∧( ) , #

F 1 1 1 1 1 1

g 1 1 1 1 1 1

f 2 2 1 3 2 1

g 2 2 2 1 2 1

f 3 3 1 3 3 1

g 4 4 4 1 2 1

f 3 3 1 3 3 1

g 4 4 4 1 2 1

(4)

栈优先关系当前符号剩余输入串移进或规约

#<·( a,a)# 移进

#( <· a ,a)# 移进

#(T <·, a)# 移进

#(T,<· a )# 移进

#(T,a ·> ) # 规约

#(T,T ·> ) # 规约

#(T =·) # 移进

#(T) ·> #规约

#T =·#接受

4.扩展后的文法

S’→#S# S→S;G S→G G→G(T) G→H H→a H→(S)

T→T+S T→S

(1)

FIRSTVT(S)={;}∪FIRSTVT(G) = {; , a , ( }

FIRSTVT(G)={ ( }∪FIRSTVT(H) = {a , ( }

FIRSTCT(H)={a , ( }

FIRSTVT(T) = {+} ∪FIRSTVT(S) = {+ , ; , a , ( }

LASTVT(S) = {;} ∪LASTVT(G) = { ; , a , )}

LASTVT(G) = { )} ∪LASTVT(H) = { a , )}

LASTVT(H) = {a, )}

LASTVT(T) = {+ } ∪LASTVT(S) = {+ , ; , a , ) }

构造算符优先关系表

因为任意两终结符之间至多只有一种优先关系成立,所以是算符优先文法(2)

句型a(T+S);H;(S)的

短语有:a(T+S);H;(S) a(T+S);H a(T+S) a T+S (S) H

直接短语有: a T+S H (S)

句柄: a

素短语:a T+S (S)

最左素短语:a

(3)

(4)

不能用最右推导推导出上面的两个句子。

第七章

1、已知文法:

A → aAd|aAb|ξ

判断该文法是否是SLR(1)文法,若是构造相应分析表,并对输入串ab#给出分析过程。解:(0) A’→ A

(1) A → aAd

(2) A → aAb

(3) A →ξ

构造该文法的活前缀DFA:

由上图可知该文法是SLR (1)文法。 输入串ab#的分析过程:

3、考虑文法:

S →AS|b A →SA|a (1) 列出这个文法的所有LR (0)项目 (2) 按(1)列出的项目构造识别这个文法活前缀的NFA ,把这个NFA 确定化为DFA ,说明这个DFA

的所有状态全体构成这个文法的LR (0)规范族。

(3) 这个文法是SLR 的吗?若是,构造出它的SLR 分析表。 (4) 这个文法是LALR 或LR (1)的吗? 解:(0)S ’→S (1)S →AS (2)S →b (3)A →SA (4)A →a (1)列出所有LR (0)项目:

S ’→·S S →·b A →·a S ’→ S · S →b · A →a · S →·AS A →·SA S →A ·S A →S ·A S →AS · A →SA ·

(3)构造该文法的活前缀NFA :

a

由上可知:I1 I3 I5 中存在着移进和归约冲突

在I1中含项目:S’→ S·归约项 Follow(S’)={#}

A →·a 移进项 Follow(S’)∩{a}=∮

S →·b 移进项 Follow(S’)∩{b}=∮

在I3中含项目:A →SA·归约项 Follow(A)={a,b}

S →·b 移进项 Follow(A) ∩ {b}≠∮

A →·a 移进项 Follow(A) ∩ {a}≠∮

在I5中含项目:S →AS·归约项 Follow(S)={#,a,b}

A →·a 移进项 Follow(S) ∩ {a}≠∮

S →·b 移进项 Follow(S) ∩ {b}≠∮

由此可知,I3、I5的移进与归约冲突不能解决,所以这个文法不是SLR(1)文法。(4)做LR(1)项目集规范族

I1:

S’→ S· ,#

A →S·A ,a/b

A →·SA ,a/b

A →·a ,a/b

S →·AS ,a/b

S →·b ,a/b

编译原理(清华大学第2版)课后习题答案

第三章 N=>D=> {0,1,2,3,4,5,6,7,8,9} N=>ND=>NDD L={a |a(0|1|3..|9)n且 n>=1} (0|1|3..|9)n且 n>=1 {ab,} a n b n n>=1 第6题. (1) <表达式> => <项> => <因子> => i (2) <表达式> => <项> => <因子> => (<表达式>) => (<项>) => (<因子>)=>(i) (3) <表达式> => <项> => <项>*<因子> => <因子>*<因子> =i*i (4) <表达式> => <表达式> + <项> => <项>+<项> => <项>*<因子>+<项> => <因子>*<因子>+<项> => <因子>*<因子>+<因子> = i*i+i (5) <表达式> => <表达式>+<项>=><项>+<项> => <因子>+<项>=i+<项> => i+<因子> => i+(<表达式>) => i+(<表达式>+<项>) => i+(<因子>+<因子>) => i+(i+i) (6) <表达式> => <表达式>+<项> => <项>+<项> => <因子>+<项> => i+<项> => i+<项>*<因子> => i+<因子>*<因子> = i+i*i 第7题

第9题 语法树 s s s* s s+a a a 推导: S=>SS*=>SS+S*=>aa+a* 11. 推导:E=>E+T=>E+T*F 语法树: E +T * 短语: T*F E+T*F 直接短语: T*F 句柄: T*F 12.

短语: 直接短语: 句柄: 13.(1)最左推导:S => ABS => aBS =>aSBBS => aBBS => abBS => abbS => abbAa => abbaa 最右推导:S => ABS => ABAa => ABaa => ASBBaa => ASBbaa => ASbbaa => Abbaa => a1b1b2a2a3 (2) 文法:S → ABS S → Aa S →ε A → a B → b (3) 短语:a1 , b1 , b2, a2 , , bb , aa , abbaa, 直接短语: a1 , b1 , b2, a2 , , 句柄:a1 14 (1) S → AB A → aAb | ε B → aBb | ε (2) S → 1S0 S → A A → 0A1 |ε 第四章 1. 1. 构造下列正规式相应的DFA (1)1(0|1)*101 NFA (2) 1(1010*|1(010)*1)*0 NFA

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

精品文档 第二章 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 ?+?+?+?+?+?+?+?+?????+?+?+?+?+?+?+**********()*()*()*()*()*()*()*() 语法树:/********************************

清华大学编译原理第二版课后习答案

《编译原理》课后习题答案第一章 第 4 题 对下列错误信息,请指出可能是编译的哪个阶段(词法分析、语法分析、语义分析、代码生成)报告的。 (1) else 没有匹配的if (2)数组下标越界 (3)使用的函数没有定义 (4)在数中出现非数字字符 答案: (1)语法分析 (2)语义分析 (3)语法分析 (4)词法分析 《编译原理》课后习题答案第三章 第1 题 文法G=({A,B,S},{a,b,c},P,S)其中P 为: S→Ac|aB A→ab B→bc 写出L(G[S])的全部元素。 答案: L(G[S])={abc} 第2 题 文法G[N]为: N→D|ND D→0|1|2|3|4|5|6|7|8|9 G[N]的语言是什么? 答案: G[N]的语言是V+。V={0,1,2,3,4,5,6,7,8,9} N=>ND=>NDD.... =>NDDDD...D=>D......D 或者:允许0 开头的非负整数? 第3题 为只包含数字、加号和减号的表达式,例如9-2+5,3-1,7等构造一个文法。 答案: G[S]: S->S+D|S-D|D D->0|1|2|3|4|5|6|7|8|9 第4 题 已知文法G[Z]: Z→aZb|ab 写出L(G[Z])的全部元素。 答案: Z=>aZb=>aaZbb=>aaa..Z...bbb=> aaa..ab...bbb L(G[Z])={anbn|n>=1}

第5 题 写一文法,使其语言是偶正整数的集合。要求: (1) 允许0 打头; (2)不允许0 打头。 答案: (1)允许0 开头的偶正整数集合的文法 E→NT|D T→NT|D N→D|1|3|5|7|9 D→0|2|4|6|8 (2)不允许0 开头的偶正整数集合的文法 E→NT|D T→FT|G N→D|1|3|5|7|9 D→2|4|6|8 F→N|0 G→D|0 第6 题 已知文法G: <表达式>::=<项>|<表达式>+<项> <项>::=<因子>|<项>*<因子> <因子>::=(<表达式>)|i 试给出下述表达式的推导及语法树。 (5)i+(i+i) (6)i+i*i 答案: <表达式> <表达式> + <项> <因子> <表达式> <表达式> + <项> <因子> i <项> <因子> i <项> <因子> i ( ) (5) <表达式> =><表达式>+<项> =><表达式>+<因子> =><表达式>+(<表达式>)

课后习题答案

第一章 液压传动概述 液压传动系统由哪几部分组成各组成部分的作用是什么 解答:液压传动由以下四部分组成: (1)动力元件(液压泵):它是把原动机输出的机械能转换成油液压力能的元件。作用:给液压系统提供压力油,是液压系统的心脏。 (2)执行元件:包括液压缸和液压马达等。 作用:把油液的压力能转换成机械能以驱动工作机构的元件。 (3)控制元件:包括压力、方向、流量控制阀。作用:是对液压系统中油液的压力、流量和流动方向进行控制和调节的元件。 (4)辅助元件:除上述三项以外的、液压系统中所需的其它装置。如油箱、滤油器、油管、管接头等。作用:保证液压系统有效工作,寿命长。 第二章 液压泵和液压马达 要提高齿轮泵的压力需解决哪些关键问题通常都采用哪些措施 解答:(1)困油现象: 采取措施:在两端盖板上开卸荷槽。(2)径向不平衡力:采取措施:缩小压油口直径;增大扫膛处的径向间隙; 过渡区连通;支撑上采用滚针轴承或滑动轴承。(3)齿轮泵的泄漏: 采取措施:采用断面间隙自动补偿装置。 齿轮泵的模数 mm m 4=,齿数9=z ,齿宽mm B 18=,在额定压力下,转速min 2000r n =时,泵的 实际输出流量min 30L Q =,求泵的容积效率。 解答:()() 2 2630 0.876.6~7 6.69418200010v t q q q zm bn η-= ===????? YB63型叶片泵的最高压力MPa P 3.6max =,叶片宽度mm B 24=,叶片厚度mm 25.2=δ,叶片数 12=Z ,叶片倾角?=13θ,定子曲线长径mm R 49=,短径mm r 43=,泵的容积效率9.0=v η,机械效率 90.0=m η,泵轴转速min 960r n =,试求:(1) 叶片泵的实际流量是多少(2)叶片泵的输出功率是多少 解答: (1) ()()()()() 22 223 322cos 20.0490.04320.0490.0430.024120.0249600.9cos131.0210v R r q R r bz Bn m s πηφπ-??=--???? ?-?? =--?????????? =? (2) 633 6.310 1.0210 6.4210N pq -==???=?出 斜盘式轴向柱塞泵的斜盘倾角?=20β,柱塞直径mm d 22=,柱塞分布圆直径mm D 68=,柱塞数7=z ,机械效率90.0=m η,容积效率97.0=v η,泵转速min 1450r n =,泵输出压力MPa p 28=,试计算:(1)平

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

编译 原理 课后题答案 第二章 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:

(完整版)编译原理课后习题答案

第一章 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

清华大学版编译原理答案

《编译原理》课后习题 第1 章引论 第1 题解释下列术语: (1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。 (2)源程序:源语言编写的程序称为源程序。 (3)目标程序:目标语言书写的程序称为目标程序。 (4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶 段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符 号表管理等工作。 (5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。 (6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。 第2 题 一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程 序的总体结构图。 答案:一个典型的编译程序通常包含8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。其各部分的主要功能简述如下。 词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。 语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。 中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式 的中间语言代码,如三元式或四元式。 中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。 目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。 表格管理程序:负责建立、填写和查找等一系列表格工作。表格的作用是记录源程序的 各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。可以说整个编译过程就是造表、查表的工作过程。需要指出的是,这里的“表格管理程序”并不意味着它就是一个独立的表格管理模块,而是指编译程序具有的表格管理功能。 错误处理程序:处理和校正源程序中存在的词法、语法和语义错误。当编译程序发现源 程序中的错误时,错误处理程序负责报告出错的位置和错误性质等信息,同时对发现的错误进行适当的校正(修复),目的是使编译程序能够继续向下进行分析和处理。 第3 题何谓翻译程序、编译程序和解释程序?它们三者之间有何种关系? 答案:翻译程序是指将用某种语言编写的程序转换成另一种语言形式的程序的程序,如编译程序和汇编程序等。 编译程序是把用高级语言编写的源程序转换(加工)成与之等价的另一种用低级语言编 写的目标程序的翻译程序。 解释程序是解释、执行高级语言源程序的程序。解释方式一般分为两种:一种方式是, 源程序功能的实现完全由解释程序承担和完成,即每读出源程序的一条语句的第一个单词,则依据这个单词把控制转移到实现这条语句功能的程序部分,该部分负责完成这条语句的功

图论 张先迪 李正良 课后习题答案

习题一 作者---寒江独钓 1.证明:在n 阶连通图中 (1) 至少有n-1条边; (2) 如果边数大于n-1,则至少有一条闭迹; (3) 如果恰有n-1条边,则至少有一个奇度点。 证明: (1) 若G 中没有1度顶点,由握手定理: ()2()21v V G m d v n m n m n ∈= ≥?≥?>-∑ 若G 中有1度顶点u ,对G 的顶点数作数学归纳。 当n=2时,结论显然;设结论对n=k 时成立。 当n=k+1时,考虑G-u,它仍然为连通图,所以,边数≥k-1.于是G 的边数≥k. (2) 考虑G 中途径: 121:n n W v v v v -→→→→L 若W 是路,则长为n-1;但由于G 的边数大于n-1,因此,存在v i 与v j ,它们相异,但邻接。于是: 1i i j i v v v v +→→→→L 为G 中一闭途径,于是 也就存在闭迹。 (3) 若不然,G 中顶点度数至少为2,于是由握手定理: ()2()21v V G m d v n m n m n ∈= ≥?≥?>-∑ 这与G 中恰有n-1条边矛盾! 2.(1)2n ?12n 2?12n ?1 (2)2n?2?1 (3) 2n?2 。 证明 :u 1的两个邻接点与v 1的两个邻接点状况不同。所以, 两图不同构。 4.证明下面两图同构。 u 1 v 1

证明:作映射f : v i ? u i (i=1,2….10) 容易证明,对?v i v j ∈E ((a)),有f (v i v j,),=,u i,u j,∈,E,((b)) (1≤ i ≤ 10, 1≤j ≤ 10 ) 由图的同构定义知,图(a)与(b)是同构的。 5.指出4个顶点的非同构的所有简单图。 分析:四个顶点的简单图最少边数为0,最多边数为6,所以 可按边数进行枚举。 (a) v 2 v 3 u 4 u (b)

课后习题及答案

1 文件系统阶段的数据管理有些什么缺陷试举例说明。 文件系统有三个缺陷: (1)数据冗余性(redundancy)。由于文件之间缺乏联系,造成每个应用程序都有对应的文件,有可能同样的数据在多个文件中重复存储。 (2)数据不一致性(inconsistency)。这往往是由数据冗余造成的,在进行更新操作时,稍不谨慎,就可能使同样的数据在不同的文件中不一样。 (3)数据联系弱(poor data relationship)。这是由文件之间相互独立,缺乏联系造成的。 2 计算机系统安全性 (1)为计算机系统建立和采取的各种安全保护措施,以保护计算机系统中的硬件、软件及数据; (2)防止其因偶然或恶意的原因使系统遭到破坏,数据遭到更改或泄露等。 3. 自主存取控制缺点 (1)可能存在数据的“无意泄露” (2)原因:这种机制仅仅通过对数据的存取权限来进行安全控制,而数据本身并无安全性标记 (3)解决:对系统控制下的所有主客体实施强制存取控制策略 4. 数据字典的内容和作用是什么 数据项、数据结构 数据流数据存储和加工过程。 5. 一条完整性规则可以用一个五元组(D,O,A,C,P)来形式化地表示。 对于“学号不能为空”的这条完整性约束用五元组描述 D:代表约束作用的数据对象为SNO属性; O(operation):当用户插入或修改数据时需要检查该完整性规则; A(assertion):SNO不能为空; C(condition):A可作用于所有记录的SNO属性; P(procdure):拒绝执行用户请求。 6.数据库管理系统(DBMS)

:①即数据库管理系统(Database Management System),是位于用户与操作系统之间的 一层数据管理软件,②为用户或应用程序提供访问DB的方法,包括DB的建立、查询、更 新及各种数据控制。 DBMS总是基于某种数据模型,可以分为层次型、网状型、关系型、面 向对象型DBMS。 7.关系模型:①用二维表格结构表示实体集,②外键表示实体间联系的数据模型称为关系模 型。 8.联接查询:①查询时先对表进行笛卡尔积操作,②然后再做等值联接、选择、投影等操作。 联接查询的效率比嵌套查询低。 9. 数据库设计:①数据库设计是指对于一个给定的应用环境,②提供一个确定最优数据模 型与处理模式的逻辑设计,以及一个确定数据库存储结构与存取方法的物理设计,建立起 既能反映现实世界信息和信息联系,满足用户数据要求和加工要求,又能被某个数据库管 理系统所接受,同时能实现系统目标,并有效存取数据的数据库。 10.事务的特征有哪些 事务概念 原子性一致性隔离性持续性 11.已知3个域: D1=商品集合=电脑,打印机 D3=生产厂=联想,惠普 求D1,D2,D3的卡尔积为: 12.数据库的恢复技术有哪些 数据转储和和登录日志文件是数据库恢复的

编译原理课后习题答案-清华大学-第二版

第1章引论 第1题 解释下列术语: (1)编译程序 (2)源程序 (3)目标程序 (4)编译程序的前端 (5)后端 (6)遍 答案: (1) 编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。 (2) 源程序:源语言编写的程序称为源程序。 (3) 目标程序:目标语言书写的程序称为目标程序。 (4) 编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶 段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符 号表管理等工作。 (5) 后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。 (6) 遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。 第2题 一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。 答案: 一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。其各部分的主要功能简述如下。 词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。 语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。 语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。

目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。 表格管理程序:负责建立、填写和查找等一系列表格工作。表格的作用是记录源程序的各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。可以说整个编译过程就是造表、查表的工作过程。需要指出的是,这里的“表格管理程序”并不意味着它就是一个独立的表格管理模块,而是指编译程序具有的表格管理功能。 错误处理程序:处理和校正源程序中存在的词法、语法和语义错误。当编译程序发现源程序中的错误时,错误处理程序负责报告出错的位置和错误性质等信息,同时对发现的错误进行适当的校正(修复),目的是使编译程序能够继续向下进行分析和处理。 注意:如果问编译程序有哪些主要构成成分,只要回答六部分就可以。如果搞不清楚,就回答八部分。 第3题 何谓翻译程序、编译程序和解释程序?它们三者之间有何种关系? 答案: 翻译程序是指将用某种语言编写的程序转换成另一种语言形式的程序的程序,如编译程序和汇编程序等。 编译程序是把用高级语言编写的源程序转换(加工)成与之等价的另一种用低级语言编写的目标程序的翻译程序。 解释程序是解释、执行高级语言源程序的程序。解释方式一般分为两种:一种方式是,源程序功能的实现完全由解释程序承担和完成,即每读出源程序的一条语句的第一个单词,则依据这个单词把控制转移到实现这条语句功能的程序部分,该部分负责完成这条语句的功

编译原理课后答案

第二章 2.3叙述由下列正规式描述的语言 (a) 0(0|1)*0 在字母表{0, 1}上,以0开头和结尾的长度至少是2的01 串 (b) ((ε|0)1*)* 在字母表{0, 1}上,所有的01串,包括空串 (c) (0|1)*0(0|1)(0|1) 在字母表{0, 1}上,倒数第三位是0的01串 (d) 0*10*10*10* 在字母表{0, 1}上,含有3个1的01串 (e) (00|11)*((01|10)(00|11)*(01|10)(00|11)*)* 在字母表{0, 1}上,含有偶数个0和偶数个1的01串 2.4为下列语言写正规定义 C语言的注释,即以 /* 开始和以 */ 结束的任意字符串,但它的任何前缀(本身除外)不以 */ 结尾。 [解答] other → a | b | … other指除了*以外C语言中的其它字符 other1 → a | b | … other1指除了*和/以外C语言中的其它字符 comment → /* other* (* ** other1 other*)* ** */ (f) 由偶数个0和偶数个1构成的所有0和1的串。 [解答]由题目分析可知,一个符号串由0和1组成,则0和1的个数只能有四种情况: x 偶数个0和偶数个1(用状态0表示); x 偶数个0和奇数个1(用状态1表示); x 奇数个0和偶数个1(用状态2表示); x 奇数个0和奇数个1(用状态3表示);所以, x 状态0(偶数个0和偶数个1)读入1,则0和1的数目变为:偶数个0和奇数个1(状态1) x 状态0(偶数个0和偶数个1)读入0,则0和1的数目变为:奇数个0和偶数个1(状态2) x 状态1(偶数个0和奇数个1)读入1,则0和1的数目变为:偶数个0和偶数个1(状态0) x 状态1(偶数个0和奇数个1)读入0,则0和1的数目变为:奇数个0和奇数个1(状态3) x 状态2(奇数个0和偶数个1)读入1,则0和1的数目变为:奇数个0和奇数个1(状态3) x 状态2(奇数个0和偶数个1)读入0,则0和1的数目变为:偶数个0和偶数个1(状态0) x 状态3(奇数个0和奇数个1)读入1,则0和1的数目变为:奇数个0和偶数个1(状态2) x 状态3(奇数个0和奇数个1)读入0,则0和1的数目变为:偶数个0和奇数个1(状态1) 因为,所求为由偶数个0和偶数个1构成的所有0和1的串,故状态0既为初始状态又为终结状态,其状态转换图: 由此可以写出其正规文法为: S0 → 1S1 | 0S2 | ε S1 → 1S0 | 0S3 | 1 S2 → 1S3 | 0S0 | 0 S3 → 1S2 | 0S1 在不考虑S0 →ε产生式的情况下,可以将文法变形为: S0 = 1S1 + 0S2 S1 = 1S0 + 0S3 + 1 S2 = 1S3 + 0S0 + 0 S3 = 1S2 + 0S1 所以: S0 = (00|11) S0 + (01|10) S3 + 11 + 00 (1) S3 = (00|11) S3 + (01|10) S0 + 01 + 10 (2) 解(2)式得: S3 = (00|11)* ((01|10) S0 + (01|10)) 代入(1)式得: S0 = (00|11) S0 + (01|10) (00|11)*((01|10) S0 + (01|10)) + (00|11) => S0 = ((00|11) + (01|10) (00| 11)*(01|10))S0 + (01|10) (00|11)*(01|10) + (00|11) => S0 = ((00|11)|(01|10) (00|11)*(01|10))*((00|1

编译原理教程课后习题答案——第四章

第四章语义分析和中间代码生成 4.1 完成下列选择题: (1) 四元式之间的联系是通过实现的。 a. 指示器 b. 临时变量 c. 符号表 d. 程序变量 (2) 间接三元式表示法的优点为。 a. 采用间接码表,便于优化处理 b. 节省存储空间,不便于表的修改 c. 便于优化处理,节省存储空间 d. 节省存储空间,不便于优化处理 (3) 表达式(┐A∨B)∧(C∨D)的逆波兰表示为。 a. ┐AB∨∧CD∨ b. A┐B∨CD∨∧ c. AB∨┐CD∨∧ d. A┐B∨∧CD∨ (4) 有一语法制导翻译如下所示: S→bAb {print″1″} A→(B {print″2″} A→a {print″3″} B→Aa) {print″4″} 若输入序列为b(((aa)a)a)b,且采用自下而上的分析方法,则输出序列为。a. 32224441 b. 34242421 c. 12424243 d. 34442212 【解答】 (1) b (2) a (3) b (4) b 4.2 何谓“语法制导翻译”?试给出用语法制导翻译生成中间代码的要点,并用一简例予以说明。 【解答】语法制导翻译(SDTS)直观上说就是为每个产生式配上一个翻译子程序(称语义动作或语义子程序),并且在语法分析的同时执行这些子程序。也即在语法分析过程中,当一个产生式获得匹配(对于自上而下分析)或用于归约(对于自下而上分析)时,此产生式相应的语义子程序进入工作,完成既定的翻译任务。 用语法制导翻译(SDTS)生成中间代码的要点如下: (1) 按语法成分的实际处理顺序生成,即按语义要求生成中间代码。 (2) 注意地址返填问题。 (3) 不要遗漏必要的处理,如无条件跳转等。 例如下面的程序段: if (i>0) a=i+e-b*d; else a=0; 在生成中间代码时,条件“i>0”为假的转移地址无法确定,而要等到处理“else”时方可确定,这时就存在一个地址返填问题。此外,按语义要求,当处理完(i>0)后的语句(即“i>0”为真时执行的语句)时,则应转出当前的if语句,也即此时应加入一条无条件跳转指令,并且这个转移地址也需要待处理完else之后的语句后方可获得,就是说同样存在着地址返填问题。对于赋值语句a=i+e-b*d,其处理顺序(也即生成中间代码顺序)是先生成i+e的代码,再生成b*d的中间代码,最后才产生“-”运算的中间代码,这种顺序不能颠倒。 4.3 令S.val为文法G[S]生成的二进制数的值,例如对输入串101.101,则S.val= 5.625。按照语法制导翻译方法的思想,给出计算S.val的相应的语义规则,G(S)如下: G[S]: S→L.L|L

编译原理课后习题答案

第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*表示一位或者多位(一个或者多个数字的

张清华图论课后题答案.

第1章 图论预备知识 1.1 解:(1) p={φ,{a},{b},{c},{a,b},{a,c},{b,c},{a,b,c}} (2) p={,{a},{{b,c}},{a,{b,c}}} (3) p={,{}} (4) p={,{},{{}},{,{}}} (5)p={,{{a,b}},{{a,a,b}},{{a,b,a,b}},{{a,b},{a,a,b}},{{a,b},{a,b,a,b}},{{a,b},{a,a,b},{a,b,a,b}}} 1.2 解:(1) 真 (2) 假 (3)假 (4)假 1.3 解:(1) 不成立,A={1} B={1,2} C={2} (2) 不成立,A={1} B={1,2} C={1,3} 1.4 证明:设(x,y)∈(A ∩B)X(C ∩D) 说明x ∈A ∩B,y ∈C ∩D 由于 x ∈A,y ∈C 所以 (x,y) ∈A X C 由于x ∈B,y ∈D 所以 (x,y) ∈B X D 所以 (x,y) ∈(A X C )∩(B X D ) 反过来,如果(x,y )∈(A X C) ∩(B X D ) 由于 (x,y) ∈(A X C )所以 x ∈A,y ∈C 由于 (x,y) ∈(B X D )所以x ∈B,y ∈D 所以x ∈(A ∩B) y ∈(C ∩D) 所以 (x,y) ∈(A ∩B)X(C ∩D) 所以(A ∩B)X(C ∩D)= (A X C) ∩(B X D ) 1.5 解:Hasse 图 φφφφφφφφφ

极大元{9,24,10,7} 极小元{3,2,5,7} 最大元{24} 最小元{2} 1.6 解 (2)关系图为: (3)不存在最大元,最小元为{2} 1.7 解:(1)R={<1,1>,<2,2>,<3,3>,<4,4>,<1,2>,<2,1>,<2,3>,<3,2>} (2)略 (3)I A ?R 故R 是自反的。 <1,2>∈R <2,3>R 但是<1,3> ?R 故不满足传递性 1.8 解:(1) 不成立 A={1} B={2} C={3} D={4} 则左式={<1,3>,<1,4>,<2,3>,<2,4>} 右式={<1,3>,<2,4>} (2) 不成立 A={1,3} B={1} C={2,4} D={2} 则左式={<3,4>} 右式={<1,4>,<3,2>,<3,4>} (3) 不成立 A={1} B={2} C={3} D={4} 则左式={<1,3>,<1,4>,<2,3>,<2,4>} 右式={<1,3>,<2,4>} (4) 成立 证明:设 ∈(A-B)X C ?x (A-B)∧ y C ?x A ∧x B ∧ y C A X C ∧ B X C (A X C)-(B XC) 故得 (A-B )X C=(A X C )-(B X C ) ∈∈∈∈∈∈?∈∈?∈

编译原理课后习题答案+清华大学出版社第二版

第 1 章引论 第1 题 解释下列术语: (1)编译程序 (2)源程序 (3)目标程序 (4)编译程序的前端 (5)后端 (6)遍 答案: (1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。 (2)源程序:源语言编写的程序称为源程序。 (3)目标程序:目标语言书写的程序称为目标程序。 (4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶 段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符 号表管理等工作。 (5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。 (6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。 第2 题 一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程序的总体结构图。 答案: 一个典型的编译程序通常包含8个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。其各部分的主要功能简述如下。 词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机内表达形式。 语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。 语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。 中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式的中间语言代码,如三元式或四元式。 中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。

1 《邓稼先》课后习题参考答案

1 《邓稼先》课后习题参考答案 思考探究 一、通读全文,把握文意,回答下列问题。 1.初读课文时,哪些句段最让你感动?反复细读后,再想想这些内容是否最 能体现全文所要表达的思想情感。 2.找出文中表现奥本海默与邓稼先两人不同个性、品质的词语及细节,思考 作者为什么要进行对比,通过对比得出了怎样的结论。 参考答案:1.作者饱含真情,于字里行间高度赞扬了邓稼先深沉的爱国主义精神和将个人生命奉献给祖国国防事业的崇高情怀。这样的句段很多,如:“对这一转变做出了巨大贡献的,有一位长期以来鲜为人知的科学家——邓稼先。”“一次井下突然有一个信号测不到了,大家十分焦虑,人们劝他回去,他只说了一句话:‘我不能走。’”…… 2.文中的奥本海默与邓稼先两人的个性、品质截然不同。奥本海默是 锋芒毕露,读研究生时就常打断别人的报告,即便到了中年,成了名人,有时还会这样。而邓稼先“是一个最不要引人注目的人物”“忠厚平实”“真诚坦白,从不骄人”“没有小心眼儿,一生喜欢‘纯’字所代表的品格”“最有中国农民的朴实气质”;“他没有私心,人们绝对相信他”,“文革”中能说服两派群众组织,能说服工宣队、军宣队。作者把奥本海默与邓稼先进行对比,鲜明地突出邓稼先的精神品质,自然而然地得出结论:“邓稼先是中国几千年传统文化孕育出来的有最高奉献精神的儿子”“邓稼先是中国共产党的理想党员”。 二、有感情地朗读课文第五部分,想一想:这部分开头引用《吊古战场文》, 有什么作用?结尾处又引用儿时学到的“‘五四’时代的一首歌”,表达了怎样的情感? 参考答案:课文第五部分开头引用《吊古战场文》,把读者引入中国历史的深处,让人从中国传统文化的角度去思考。结尾处引用自己儿时学到的“‘五四’时代的一首歌”,说明了邓稼先就是一个典型的中国男儿,他有着为祖国而献身的崇高的精神品质。

编译原理第三版课后答案

编译原理课后题答案 第二章 P36-6 (1) L G () 1是0~9组成的数字串 (2) 最左推导: 最右推导: P36-7 G(S) P36-8 文法: 最左推导: 最右推导: 语法树:/******************************** *****************/ P36-9 句子iiiei有两个语法树: P36-10 /************** ***************/ P36-11 /*************** L1: L2: L3: L4: ***************/ 第三章习题参考答案P64–7 (1)

最小化: P64–8 (1) (2) (3) P64–12 (a) a a,b a 0

给状态编号: a a a b b b 最小化: a a b b a b (b) 已经确定化了, 进行最小化 最小化: P64 –14 (1) 0 1 0 (2): (|)*010 1 εε 0 0 0 Y Y

最小化: 0 1 1 1 0 0 第四章 P81–1 (1) 按照T,S 的顺序消除左递归 递归子程序: 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)={)} 预测分析表 是LL(1)文法 P81–2 文法: (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)

相关文档
最新文档