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

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

《编译原理》课后习题答案第一章

第 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) <表达式>

=><表达式>+<项>

=><表达式>+<因子>

=><表达式>+(<表达式>)

=><表达式>+(<表达式>+<项>)

=><表达式>+(<表达式>+<因子>)

=><表达式>+(<表达式>+i)

=><表达式>+(<项>+i)

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

=><表达式>+(i+i)

=><项>+(i+i)

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

=>i+(i+i)

<表达式>

<表达式> + <项>

<项> * <因子>

<因子> i

<项>

<因子>

i

i

(6) <表达式>

=><表达式>+<项>

=><表达式>+<项>*<因子>

=><表达式>+<项>*i

=><表达式>+<因子>*i

=><表达式>+i*i

=><项>+i*i

=><因子>+i*i

=>i+i*i

第7 题

证明下述文法G[〈表达式〉]是二义的。

〈表达式〉∷=a|(〈表达式〉)|〈表达式〉〈运算符〉〈表达式〉〈运算符〉∷=+|-|*|/

答案:

可为句子a+a*a 构造两个不同的最右推导:

最右推导1 〈表达式〉〈表达式〉〈运算符〉〈表达式〉

〈表达式〉〈运算符〉a

〈表达式〉* a

〈表达式〉〈运算符〉〈表达式〉* a

〈表达式〉〈运算符〉a * a

〈表达式〉+ a * a

a + a * a

最右推导2 〈表达式〉〈表达式〉〈运算符〉〈表达式〉

〈表达式〉〈运算符〉〈表达式〉〈运算符〉〈表达式〉

〈表达式〉〈运算符〉〈表达式〉〈运算符〉 a

〈表达式〉〈运算符〉〈表达式〉 * a

〈表达式〉〈运算符〉a * a

〈表达式〉+ a * a

a + a * a

第8 题

文法G[S]为:

S→Ac|aB

A→ab

B→bc

该文法是否为二义的?为什么?

答案:

对于串abc

(1)S=>Ac=>abc (2)S=>aB=>abc

即存在两不同的最右推导。所以,该文法是二义的。

或者:

对输入字符串abc,能构造两棵不同的语法树,所以它是二义的。S

a B

b c

S

A c

a b

第9 题

考虑下面上下文无关文法:

S→SS*|SS+|a

(1)表明通过此文法如何生成串aa+a*,并为该串构造语法树。

S

S S *

S S + a

a a

(2)G[S]的语言是什么?

答案:

(1)此文法生成串aa+a*的最右推导如下

S=>SS*=>SS*=>Sa*=>SS+a*=>Sa+a*=>aa+a*

(2)该文法生成的语言是:*和+的后缀表达式,即逆波兰式。

第10 题

文法S→S(S)S|ε

(1) 生成的语言是什么?

(2) 该文法是二义的吗?说明理由。

答案:

(1)嵌套的括号

(2)是二义的,因为对于()()可以构造两棵不同的语法树。第11 题

令文法G[E]为:

E→T|E+T|E-T

T→F|T*F|T/F

F→(E)|i

证明E+T*F 是它的一个句型,指出这个句型的所有短语、直接短语和句柄。答案:

此句型对应语法树如右,故为此文法一个句型。

或者:因为存在推导序列: E=>E+T=>E+T*F,所

以 E+T*F 句型

此句型相对于E 的短语有:E+T*F;相对于T 的短语

有T*F

直接短语为:T*F

句柄为:T*F

第13 题

一个上下文无关文法生成句子abbaa 的推导树如下:

(1)给出串abbaa 最左推导、最右推导。

(2)该文法的产生式集合P 可能有哪些元素?

(3)找出该句子的所有短语、直接短语、句柄。

B

a

S

A B S

a

S B A

ε b b a

答案:

(1)串abbaa 最左推导:

S=>ABS=>aBS=>aSBBS=>aBBS=>abBS=>abbS=>abbAa=>abbaa

最右推导:

S=>ABS=>ABAa=>ABaa=>ASBBaa=>ASBbaa=>ASbbaa=>Abbaa=>abbaa

(2)产生式有:S→ABS |Aa|ε A→a B→SBB|b

可能元素有:ε aa ab abbaa aaabbaa ……

(3)该句子的短语有:

a 是相对A 的短语

ε是相对S 的短语

b 是相对B 的短语

εbb 是相对B 的短语

aa 是相对S 的短语

aεbbaa 是相对S 的短语

直接短语有:a ε b

句柄是:a

《编译原理》课后习题答案第四章

第1 题

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

(1) 1(0|1)*101

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

(3) a((a|b)*|ab*a)*b

(4) b((ab)*|bb)*ab

答案:

(1) 先构造NFA:

用子集法将NFA 确定化

. 0 1

X . A

A A AB

AB AC AB

AC A ABY

ABY AC AB

除X,A 外,重新命名其他状态,令AB 为B、AC 为C、ABY 为D,因为D 含有Y(NFA 的终态),所以D 为终态。

. 0 1

X . A

A A B

B C B

C A D

D C B

DFA 的状态图::

(2)先构造NFA:

X 1 A

ε B

1 C 0 D 1 E

ε

F 1

G 0

H 1

I 0

J 1 K

L

εε

Y

ε

ε

ε

ε

用子集法将NFA 确定化

ε 0 1

X X

T0=X A

A ABFL

T1= ABFL Y CG

Y Y

CG CGJ

T2= Y

T3= CGJ DH K

DH DH

K ABFKL

T4= DH EI

EI ABEFIL

T5= ABFKL Y CG

T6= ABEFIL EJY CG

EJY ABEFGJLY

T7= ABEFGJLY EHY CGK

EHY ABEFHLY

CGK ABCFGJKL

T8= ABEFHLY EY CGI

EY ABEFLY

CGI CGJI

T9= ABCFGJKL DHY CGK

DHY DHY

T10= ABEFLY EY CG

T11= CGJI DHJ K

DHJ DHJ

T12= DHY EI

T13= DHJ EIK

EIK ABEFIKL

T14= ABEFIKL EJY CG

将T0、T1、T2、T3、T4、T5、T6、T7、T8、T9、T10、T11、T12、T13、T14重新命名,分别用0、

1、2、3、4、5、6、7、8、9、10、11、12、13、14 表示。因为2、7、8、10、12 中含有Y,所以它们都为终态。

0 1

0 1

1 2 3

2

3 4 5

4 6

5 2 3

6 7 3

7 8 9

8 10 11

9 12 9

10 10 3

11 13 5

12 6

13 14

14 7 3

0 1 0

1 2

7

10 8

3

4

5

6

9

11 13 14

1

1

1

1

1

1

1

1

1

1

0 1

1

1

(3) 先构造NFA:先构造NFA:

X a A

ε B

a,b

ε

D a

E a F

C

ε

Y

ε

ε

b

b

用子集法将NFA 确定化

ε a b

X X

T0=X A

A ABCD

T1=ABCD BE BY

BE ABCDE

BY ABCDY

T2=ABCDE BEF BEY

BEF ABCDEF

BEY ABCDEY

T3=ABCDY BE BY

T4=ABCDEF BEF BEY

T5=ABCDEY BEF BEY

将T0、T1、T2、T3、T4、T5重新命名,分别用0、1、2、3、4、5 表示。因为3、5 中含有Y,

所以它们都为终态。

a b

0 1

1 2 3

2 4 5

3 2 3

4 4 5

5 4 5

0 a 1 b 3

2

a

5

a 4

b

a

b

a

b

a

b

(4) 先构造NFA:

X A

b

ε B

a

F b

G b H

ε

Y

a

ε

C D b ε

I b

ε

ε

ε

ε

用子集法将NFA 确定化:

ε a b

X X

T0=X A

A ABDEF

T1=ABDEF CI G

CI CI

G G

T2=CI DY

DY ABDEFY

T3=G H

H ABEFH

T4=ABDEFY CI G

T5=ABEFH CI G

将T0、T1、T2、T3、T4、T5重新命名,分别用0、1、2、3、4、5 表示。因为4 中含有Y,所以它为终态。

a b

0 1

1 2 3

2 4

3 5

4 2 3

5 2 3

DFA 的状态图:

0 b 1 b

2

a

4

5

3

b

b

a

a

b

第2题

已知NFA=({x,y,z},{0,1},M,{x},{z}),其中:M(x,0)={z},M(y,0)={x,y},,M(z,0)={x,z},M(x,1)={x},M(y,1)=φ,M(z,1)={y},构造相应的DFA。

答案:

先构造其矩阵

0 1

x z x

y x,y

z x,z y

用子集法将NFA 确定化:

0 1

x z x

z xz y

xz xz xy

y xy

xy xyz x

xyz xyz xy

将x、z、xz、y、xy、xyz 重新命名,分别用A、B、C、D、E、F 表示。因为B、C、F 中含有z,所以它为终态。

0 1

A B A

B C D

C C E

D E

E F A

F F E

DFA 的状态图:

A

0 1

F

E

D

B

1

1

1

C

第3 题

将下图确定化:

答案:

用子集法将NFA 确定化:

. 0 1

S VQ QU

VQ VZ QU

QU V QUZ

VZ Z Z

V Z .

QUZ VZ QUZ

Z Z Z

重新命名状态子集,令VQ 为A、QU 为B、VZ 为C、V 为D、QUZ 为E、Z 为F。. 0 1

S A B

A C B

B D E

C F F

D F .

E C E

F F F

DFA 的状态图:

第4 题

将下图的(a)和(b)分别确定化和最小化:

答案:

初始分划得

Π0:终态组{0},非终态组{1,2,3,4,5}

对非终态组进行审查:

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

而{0,1,3,5}既不属于{0},也不属于{1,2,3,4,5}

∵{4} a {0},所以得到新分划

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

对{1,2,3,5}进行审查:

∵{1,5} b {4}

{2,3} b {1,2,3,5},故得到新分划

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

{1, 5} a {1, 5}

{2,3} a {1,3},故状态2 和状态3 不等价,得到新分划

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

这是最后分划了

最小DFA:

第5 题

构造一个DFA,它接收Σ={0,1}上所有满足如下条件的字符串:每个1 都有0 直接跟在

右边。并给出该语言的正规式。

答案:

按题意相应的正规表达式是(0*10)*0*,或0*(0 | 10)*0* 构造相应的DFA,首先构造NFA 为用子集法确定化:

I I0 I1

{X,0,1,3,Y}

{0,1,3,Y}

{2}

{1,3,Y}

{0,1,3,Y}

{0,1,3,Y}

{1,3,Y}

{1,3,Y}

{2}

{2}

{2}

重新命名状态集:

S 0 1

1

2

3

4

2

2

4

4

3

3

3

DFA 的状态图:

可将该DFA 最小化:

终态组为{1,2,4},非终态组为{3},{1,2,4}0 {1,2,4},{1,2,4}1 {3},所以1,2,4 为等价状

态,可合并。

第6题

设无符号数的正规式为θ:

θ=dd*|dd*.dd*|.dd*|dd*10(s|ε)dd*

|10(s|ε)dd*|.dd*10(s|ε)dd*

|dd*.dd*10(s|ε)dd*

化简θ,画出θ的DFA,其中d={0,1,2,…,9},s={+,-}

答案:

先构造NFA:

X

d

. B

d

F G

d

H

10

d

A

ε

C

10

d

D

s

ε

E d

Y

d

s

ε

d

用子集法将NFA 确定化:

ε? s 10 d

X XA

T0=XA B F A

B B

F FG

A A

T1=B C

C C

T2=FG G H

G G

H H

T3=A B F A

T4=C D C

D DE

T5=G H

T6=H H

T7=DE E Y

E E

Y Y

T8=E Y

T9=Y Y

将XA、B、FG、A、C、G、H、DE、E、Y 重新命名,分别用0、1、2、3、4、5、6、

7、8、9 表示。终态有0、3、4、6、9。? s 10 d

0 1 2 3

1 4

2 5 6

3 1 2 3

4 7 4

5 6

6 6

7 8 9

8 9

9 9

DFA 的状态图:

?

d

6

2 5

d

3

d

d

4 7

8

9

1

10

d

s

?

10

10

d

d

s

d

d

d

第7 题

给文法G[S]:

S→aA|bQ

A→aA|bB|b

B→bD|aQ

Q→aQ|bD|b

D→bB|aA

E→aB|bF

F→bD|aE|b

构造相应的最小的DFA。

答案:

先构造其NFA:

S

a

A

a

Z

Q

b

B

D

a

E

b

F

b

b

a

b

a

a

b

b b

b

a

b

用子集法将NFA 确定化:

a b

S A Q

A A BZ

Q Q DZ

BZ Q D

DZ A B

D A B

B Q D

将S、A、Q、BZ、DZ、D、B 重新命名,分别用0、1、2、3、4、5、6 表示。因为3、

4 中含有z,所以它们为终态。

a b

0 1 2

1 1 3

2 2 4

3 2 5

4 1 6

5 1 6

6 2 5

DFA 的状态图:

a

a

5

2

b

3

a

a

b

4

1

6

b

a

a

b

b

b

a

b

令P0=({0,1,2,5,6},{3,4})用b进行分割:

P1=({0,5, 6},{1,2},{3,4})再用b进行分割:

P2=({0},{5, 6},{1,2},{3,4})再用a、b 进行分割,仍不变。再令{0}为A,{1,2}为B,{3,4}为C,{5,6}为D。

最小化为:

A

a , b

D C

a

a

B

b

a

b

b

第8题

给出下述文法所对应的正规式:

S→0A|1B

A→1S|1

B→0S|0

答案:

解方程组S 的解:

S=0A|1B

A=1S|1

B=0S|0

将A、B 产生式的右部代入S 中

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

所以:S= (01|10)*(01|10)

第9 题

将下图的DFA 最小化,并用正规式描述它所识别的语言。

1

a

2

6

c

3

c

b

5

4 7

b

b

a b

b

b

d

d

a

答案:

令P0=({1,2,3,4,5},{6,7})用b进行分割:

P1=({1,2},{3,4},{5},{6,7})再用a、b、c、d进行分割,仍不变。再令{1,2}为A,{3,4}为B,{5}为C,{6,7}为D。

最小化为:

A

a

C D

b

d

B

b

c

a

b

r=b*a(c|da)*bb*=b*a(c|da)*b+

《编译原理》课后习题答案第五章

第1 题

对文法G[S]

S→a|∧|(T)

T→T,S|S

(1) 给出(a,(a,a))和(((a,a),∧,(a)),a)的最左推导。

(2) 对文法G,进行改写,然后对每个非终结符写出不带回溯的递归子程序。

(3) 经改写后的文法是否是LL(1)的?给出它的预测分析表。

(4) 给出输入串(a,a)#的分析过程,并说明该串是否为G 的句子。

答案:

(1) 对(a,(a,a)的最左推导为:

S (T)

(T,S)

(S,S)

(a,S)

(a,(T))

(a,(T,S))

(a,(S,S))

(a,(a,S))

(a,(a,a))

对(((a,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)

(2) 改写文法为:

0) S→a

1) S→∧

2) S→( T )

3) T→S N

4) N→, S N

5) N→ε

非终结符 FIRST 集 FOLLOW 集

S {a,∧,(} {#,,,)}

T {a,∧,(} {)}....

N {,,ε}. {)}....

对左部为N 的产生式可知:

FIRST (→, S N)={,}

FIRST (→ε)={ε}

FOLLOW (N)={)}

由于SELECT(N →, S N)∩SELECT(N →ε) ={,}∩ { )}= 所以文法是LL(1)的。

预测分析表(Predicting Analysis Table)

a ∧ ( ) , #

S →a →∧→(T)

T →S N →S N →S N

N →ε→, S N

也可由预测分析表中无多重入口判定文法是LL(1)的。

(3) 对输入串(a,a)#的分析过程为:

栈(STACK)

当前输入符

(CUR_CHAR)

剩余输入符

(INOUT_STRING)

所用产生式

(OPERATION)

#S

#)T(

#)T

#)NS

#)Na

#)N

#)NS,

#)NS

#)Na

#)N

#)

#

(

(

a

a

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

精品文档 第二章 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)平

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

第一章 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分,共10分) 1. (30.25) 10 = ( ) 2 = ( ) 16 。 2 . 逻辑函数L = + A+ B+ C +D = 。 3 . 三态门输出的三种状态分别为:、和。 4 . 主从型JK触发器的特性方程= 。 5 . 用4个触发器可以存储位二进制数。 6 . 存储容量为4K×8位的RAM存储器,其地址线为条、数据线为条。 二、选择题: (选择一个正确的答案填入括号内,每题3分,共30分 ) 1.设下图中所有触发器的初始状态皆为0,找出图中触发器在时钟信号作用下,输出电压波形恒为0的是:()图。 2.下列几种TTL电路中,输出端可实现线与功能的电路是()。 A、或非门 B、与非门 C、异或门 D、OC门 3.对CMOS与非门电路,其多余输入端正确的处理方法是()。 A、通过大电阻接地(>1.5KΩ) B、悬空 C、通过小电阻接地(<1KΩ)

B、 D、通过电阻接V CC 4.图2所示电路为由555定时器构成的()。 A、施密特触发器 B、多谐振荡器 C、单稳态触发器 D、T触发器 5.请判断以下哪个电路不是时序逻辑电路()。 A、计数器 B、寄存器 C、译码器 D、触发器 6.下列几种A/D转换器中,转换速度最快的是()。 A、并行A/D转换器 B、计数型A/D转换器 C、逐次渐进型A/D转换器 B、 D、双积分A/D转换器 7.某电路的输入波形 u I 和输出波形 u O 如下图所示,则该电路为()。 A、施密特触发器 B、反相器 C、单稳态触发器 D、JK触发器 8.要将方波脉冲的周期扩展10倍,可采用()。 A、10级施密特触发器 B、10位二进制计数器 C、十进制计数器 B、D、10位D/A转换器 9、已知逻辑函数与其相等的函数为()。 A、 B、 C、 D、 10、一个数据选择器的地址输入端有3个时,最多可以有()个数据信号输出。 A、4 B、6 C、8 D、16 三、逻辑函数化简(每题5分,共10分) 1、用代数法化简为最简与或式 Y= A +

清华大学电路原理第三次仿真实验报

清华大学电路原理第三次仿真实验报

————————————————————————————————作者:————————————————————————————————日期:

[文档标题] 班级:电13 姓名:苗键强 学号:2011010645 日期:2013年1月11日

实验名称: 一、利用运算放大器的正反馈设计占空比可调的脉冲序列发生器; 二、利用运算放大器构成的脉冲序列发生器和积分器构成三角波发生器。 实验任务: 一、设计占空比可调的脉冲序列发生器 要求: (1)给出电路原理图,分析占空比可调的原因。 (2)给出仿真电路图。 (3)给出示波器 Expand 方式下整个示波器界面,分别给出占空比为 20%和70%时的脉冲序列波形和对应的电容电压波形。 二、利用运算放大器构成的脉冲序列发生器和积分器构成三角波发生器 要求: (1)给出电路原理图,分析三角波产生的原因。 (2)给出仿真电路图。 (3)给出示波器 Expand 方式下整个示波器界面,要求同时显示脉冲序列和三角波的波形。 理论分析及仿真电路: 一、设计占空比可调的脉冲序列发生器 通过Multisim仿真,设计电路图如下: 在此电路图中,通过计算可知,脉冲序列周期为:

T=2 U 滞 U 输出 CR5up+2 U 滞 U 输出 CR5down=2 U 滞 U 输出 CR5(1) 因而,占空比为: η=R5up R5 (2) 得到示波器示数如下: 当R5up R5 =0.2时,得到示波器示数如下: 其占空比为 η=46.154 223.932 =20.6% 当R5up R5 =0.7时,得到示波器示数如下:

最新编译原理(清华大学 第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

课后习题及答案

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.数据库的恢复技术有哪些 数据转储和和登录日志文件是数据库恢复的

清华考研 电路原理课件 第2章 简单电阻电路的分析方法

清华大学电路原理电子课件 江辑光版 参考教材: 《电路原理》(第2版)清华大学出版社,2007年3月江辑光刘秀成《电路原理》清华大学出版社,2007年3月于歆杰朱桂萍陆文娟《电路》(第5版)高等教育出版社,2006年5月邱关源罗先觉

简单电阻电路的分析方法简单电阻电路的分析方法 第2章 简单电阻电路的分析方法 2.1 串联电阻电路 2.1 串联电阻电路 2. 4 理想电源的串联和并联 2. 4 理想电源的串联和并联 2.5 电压源与电流源的等效转换 2.5 电压源与电流源的等效转换 2. 3 星形联接与三角形联接的电阻的等效变换 2. 3 星形联接与三角形联接的电阻的等效变换 2.6 两个电阻电路的例子 2.6 两个电阻电路的例子 本章重点 本章重点 2.2 并联电阻电路 2.2 并联电阻电路

? 本章本章重点重点重点 ? 电阻的串联、并联和串并联 返回目录

2.1 串联电阻电路 (Series Connection)

R eq =( R 1+ R 2…+R n ) =∑ R k R eq =( R 1+ R 2 + +……+R n ) =∑ R k u R R u k k eq =等效电阻等于串联的各电阻之和

例 两个电阻分压(voltage division ), 如下图所示 例 两个电阻分压(voltage division ), 如下图所示 u R R R u 2 11 1+= u R R R u 2 12 2+?=i 2 , p 2 = R 2i 2 ,? : p n = R 1 : R 2 : ?= (R 1+ R 2+ ? +R + R i 2 + ? + R i 2 返回目录

编译原理课后答案

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

2013年清华大学电路原理考研真题

2013年清华大学电路原理考研真题 1、(1)理想变压器+并联谐振:理想变压器的副边借有并联的电感与电容,告诉了电感与电容支路的电流表读数相等,由这个条件可求出电路工作的频率值,再代入原边的电感值计算得到原边电路的阻抗,最后求出原边电流;(2)卷积:是一个指数函数和一个延时正比例函数的卷积,直接用公式计算即可,可以把指数函数选作先对称后平移的项,这样只需分三个时间段进行讨论即可; 2、三相电路:(1)电源和负载均为星形连接,且三相对称,直接抽单相计算线电流;(2)共B接法的二表法测电路的三相有功功率,要画图和计算两块功率表的读数,注意的读数为负数;(3)当A相负载对中性点短路后求各相电源的有功,先用节点法求出各相电流,再计算各相电源的有功功率; 3、理想运放的问题:共有2级理想运放,其中第一级为负反馈,第二级为正反馈,解答时先要判断出这一信息,然后(1)求第一级的输出,因为第一级运放是负反馈,故可以用“虚断”和“虚短”,得到输出(实为一个反向比例放大器);(2)求第二级的输出,因为是正反馈,所以“虚断”仍成立,但“虚短”不成立,不过,由正反馈的性质,运放要么工作在正向饱和区,要么工作在反向饱和区,即输出始终为,故可以假设输出为其中一个饱和电压,比较反相输入端和非反相输入端的电压值即可确定第二级的输出(实为一个滞回比较器); 4、一阶电路的方框图问题:动态元件是电容,它接在方框左端,首先告诉了方框右端支路上的电流的零输入响应,由此可得从电容两端看入的入端电阻,即为从方框左端看入的Thevenin等效电阻,其次可得到时刻的电量,画出这个等效电路图;然后改变电容值,改变电容的初始电压值,并在方框右端的支路上接上一个冲激电压源,求电容电压的响应:可以利用叠加定理,分解为零输入响应和零状态响应分别求解,零输入响应可根据前述Thevenin等效电阻直接写出,零状态响应可以先用互易定理(因为方框内的元件全是线性电阻,满足互易定理)结合前述“时刻的电量,画出这个等效电路图”得到左端的短路电流,再由Thevenin等效电阻进而得到从电容两端向右看入的Thevenin等效电路,然后先求阶跃响应,再求导得到冲激源作用下的冲激响应;最后叠加得到全响应; 5、列写状态方程:含有一个压控电流源的受控源,有2个电容和1个电感,用直接法,最后消去非状态变量即可得解答; 6、含有互感的非正弦周期电路(15分):(1)求电感电流,互感没有公共节点,无法去耦等效,只能用一般方法解,该题的电源有2种频率,有3个网孔,2个电感和1个电容,最关键的是左下角网孔的电源是电流源,因此可以设出电感电流的值,再由KCL表示出剩余支路的电流,最后对某一个网孔列写KVL,解方程即可得到要求的电感电流的值,只需列写一个方程,但要注意正确地写出互感电压的表达式;(2)求电流源发出的功率,由第一问的解求出电流源两端的电压,即可得到解答; 7、含有理想二极管的二阶电路:需要判断理想二极管何时关断、何时导通,这是解题的关键。从0时刻开始,二极管关断,电路是一个二阶电路,求出电感电流的响应,直到二极管的端电压一直由增大到零,这就是所求临界点,即电感电流达到最大值的时间节点,此后二极管导通,左右两部分电路是2个独立的一阶电路。因此(1)电路可以分为2个工作时间段,分别画出前述的二阶等效电路

编译原理课后习题答案

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

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

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

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

编译原理第三版课后答案

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

相关文档
最新文档