当前位置:文档之家› 《编译原理》习题解答

《编译原理》习题解答

《编译原理》习题解答
《编译原理》习题解答

《编译原理》习题解答:

第一次作业:

P14 2、何谓源程序、目标程序、翻译程序、汇编程序、编译程序和解释程序?它们之间可能有何种关系?

答:被翻译的程序称为源程序;

翻译出来的程序称为目标程序或目标代码;

将汇编语言和高级语言编写的程序翻译成等价的机器语言,实现此功能的程序称为翻译程序;

把汇编语言写的源程序翻译成机器语言的目标程序称为汇编程序;

解释程序不是直接将高级语言的源程序翻译成目标程序后再执行,而是一个个语句读入源程序,即边解释边执行;

编译程序是将高级语言写的源程序翻译成目标语言的程序。

关系:汇编程序、解释程序和编译程序都是翻译程序,具体见P4 图 1.3。

P14 3、编译程序是由哪些部分组成?试述各部分的功能?

答:编译程序主要由8个部分组成:(1)词法分析程序;(2)语法分析程序;(3)语义分析程序;(4)中间代码生成;(5)代码优化程序;(6)目标代码生成程序;(7)错误检查和处理程序;(8)信息表管理程序。具体功能见P7-9。

P14 4、语法分析和语义分析有什么不同?试举例说明。

答:语法分析是将单词流分析如何组成句子而句子又如何组成程序,看句子乃至程序是否符合语法规则,例如:对变量x:= y 符合语法规则就通过。语义分析是对语句意义进行检查,如赋值语句中x与y类型要一致,否则语法分析正确,语义分析则错误。

P15 5、编译程序分遍由哪些因素决定?

答:计算机存储容量大小;编译程序功能强弱;源语言繁简;目标程序优化程度;设计和实现编译程序时使用工具的先进程度以及参加人员多少和素质等等。

补充:1、为什么要对单词进行内部编码?其原则是什么?对标识符是如何进行内部编码的?

答:内部编码从“源字符串”中识别单词并确定单词的类型和值;原则:长度统一,即刻画了单词本身,也刻画了它所具有的属性,以供其它部分分析使用。对于标识符编码,先判断出该单词是标识符,然后在类别编码中写入相关信息,以表示为标识符,再根据具体标识符的含义编码该单词的值。

补充:2、赋值语句:A:= 5 * C的语法和语义指的是什么?

答:语法分析将检查该语句是否符合赋值语句规则,语义是指将 5 * C 的结果赋值为 A 。

第二次作业:

P38 1、设T1={11,010},T2={0,01,1001},计算:T2T1,T1*,T2+。

T2T1={011,0010,0111,01010,100111,1001010}

T1*={ε,11,010,1111,11010,01011,010010……}

T2+={0,01,1001,00,001,01001,010,0101……}

P38 3、令A={0,1,2},写出集合A+和A*的七个最短符号串。

A+:0,1,2,00,01,02,10(有多种可能)

A*:ε,0,1,2,00,01,02(有多种可能)

P38 5、试证明:A+=A A*=A*A。

证明:A+=A1∪A2∪……∪A n∪……

A*=A0(即{ε})∪A+

A A*=A(A0∪A+)=A∪A+=A+=A+∪A=(A0∪A+)A=A*A(证毕)

P38 7、设有文法G[S]:

S∷=A

A∷=B | IF A THEN A ELSE A

B∷=C | B+C | +C

C∷=D | C*D | *D

D∷=X | (A) | -D 试写出V N和V T。

V N={S,A,B,C,D}

V T={IF,THEN,ELSE,+,*,X,(,),-}

P38-39 8、设有文法G[S]:

S∷=aAb

A∷=BcA | B

B∷=idt |ε

试问下列符号串(1)aidtcBcAb (3)ab (5)aidtcidtcidtb 是否为该文法的句型或句子。

(1)S?aAb?aBcAb?aidtcAb?aidtcBcAb 句型但不是句子;

(3)S?aAb?aBb?aεb?ab 是句型也是句子;

(5)S?aAb?aBcAb?aidtcAb?aidtcBcAb?aidtcidtcBb?aidtcidtcidtb句型也是句子。

P39 10、给定文法:

S∷=aB | bA

A∷=aS | bAA | a

B∷=bS |aBB|b 该文法所描述的语言是什么?

L(G)={相同个数的a与b以任意次序连接而成的非空符号串}。

P39 11、试分别描述下列文法所产生的语言(文法开始符号为S):

(1)S∷=0S | 01

(2)S∷=aaS | bc

(1)L(G)={0n1| n≥1};

(2)L(G)={a2n bc | n≥0}。

P39 12、试分别构造产生下列语言的文法:

(1){ ab n a | n=0,1,2,3……}

(3){ aba n | n≥1}

(5){ a n b m c p | n,m,p≥0}

(1)G={V N,V T,P,S},V N={S,A },V T={a,b},

P:S∷=aAa

A∷=bA |ε

(3)G={V N,V T,P,S},V N={S,A },V T={a,b},

P:S∷=abA

A∷=aA |ε或A∷=aA | a

(5)①G={V N,V T,P,S},V N={S,A ,B,C},V T={a,b,c},P:S∷=ABC

A∷=aA |ε

B∷=bB |ε

C∷=cC |ε

②G={V N,V T,P,S},V N={S,T,C},V T={a,b,c},

P:S∷=TC

T∷=aTb |ε

C∷=cC |ε

③G={V N,V T,P,S},V N={S },V T={a,b,c},

P:S∷=aS | bS | cS |ε

第三次作业:

P39 15. 设文法G规则为:

S::=AB

B::=a|Sb

A::=Aa|bB

对下列句型给出推导语法树,并求出其句型短语,简单短语和句柄。(2)baabaab (3)bBABb

(2)S

A B

A a S

b B A B

a b B a

a

句型baabaab的短语a, ba, baa, baab,简单短语a,句柄 a

S

(3)

A B

b B

S b

A B

短语bB, AB, ABb,

简单短语bB, AB,

句柄bB

P40 18. 分别对i+i*i 和i+i+i中每一个句子构造两棵语法树,从而证明下述文法G[<表达式>]是二义的。

<表达式>::=i|(<表达式>)|<表达式><运算符><表达式>

<运算符>::=+|-|*|/

1.i+i*i

<表达式>

<表达式> <运算符> <表达式>

i + <表达式> <运算符> <表达式>

i * i

<表达式>

<表达式> <运算符> <表达式>

<表达式> <运算符> <表达式> * i

i + i

由于句子i+i*i可构造两棵不同的语法树,所以证明该文法是二义的。

2. i+i+i

<表达式>

<表达式> <运算符> <表达式>

i + <表达式> <运算符> <表达式>

i + i

<表达式>

<表达式> <运算符> <表达式>

<表达式> <运算符> <表达式> + i

i + i

由于句子i+i+i可构造两棵不同的语法树,所以证明该文法是二义的。

P40 19. 证明下述文法是二义的

1) S::=iSeS|iS|i

3) S::=A|B

A::=aCbA|a

B::=BCC|a

C::=ba

1)对于句子iiieii可构造两棵不同的语法树,所以证明该文法是二义的。

S

i S e S

i S i S

i i

S

i S

i S e S

i i S

i

2)对于句子ababa可构造两棵不同的语法树,所以证明该文法是二义的。

S

A

a C

b A

b a a

S

B

B C C

a b a b a

P41 21. 令文法N::=D|ND

D::=0|1|2|3|4|5|6|7|8|9

给出句子0127,34,568最左推导和最右推导。

解:0127的最左推导N=>ND=>NDD=>NDDD=>DDDD=>0DDD=>01DD=>012D=>0127 0127的最右推导N=>ND=>N7=>ND7=>N27=>ND27=>N127=>D127=>0127

34的最左推导N=>ND=>DD=>3D=>34

34的最右推导N=>ND=>N4=>D4=>34

568的最左推导N=>ND=>NDD=>DDD=>5DD=>56D=>568

568的最右推导N=>ND=>N8=>ND8=>N68=>D68=>568

P41 23. 设有文法如下:

<目标>::=V1

V1::=V2|V1iV2

V2::=V3|V2+V3|iV3

V3::=)V1*|(

试分析句子(, )(*, i(, (+(, (+(i(, (+)(i(*i(。

解<目标>=> V1=>V2=>V3=>(

<目标>=> V1=>V2=>V3=>)V1*=>)V2*=>)V3*=>)(*

<目标>=> V1=>V2=>iV3=>i(

<目标>=> V1=>V2=>V2+V3=>V3+V3=>(+V3=>(+(

<目标>=> V1=>V1iV2=> V1iV3=> V1i(=>V2i(=>V2+V3i(=>V2+( i(=>V3+( i(=>(+(i( <目标>=> V1=>V1iV2=> V2iV2=> V2+V3iV2=> V3+V3iV2=> (+V3iV2=>(+)V1*iV2 =>(+) V1iV2*iV2=>(+) V2iV2*iV2=>(+) V3iV2*iV2=>(+) (iV2*iV2=>(+) (iV2*iV2=>(+) (iV3*iV2=>(+) (i(*iV2=>(+) (i(*iV3=>(+) (i(*i(

P41 24. 下面文法那些是短语结构文法,上下文有关文法,上下文无关文法,及正规文法?

1.S::=aB B::= cB B::=b C::=c

2.S::=aB B::=bc C::=c C::=ε

3.S::=aAb aA::=aB aA::=aaA B::=b A::=a

4.S::=aCd aC::=B aC::=aaA B::=b

5.S::=AB A::=a B::=bC B::=b C::=c

6. S::=AB A::=a B::=bC C::=c C::=ε

7. S::=aA S::= εA::=aA A::=aB A::=a B::=b

8. S::=aA S::= εA::=bAb A::=a

正规文法 1

上下文无关文法 2 5 6 7 8

上下文有关文法 3

短语结构文法 4

P41 26. 给出产生下列语言L(G)={W|W∈{0,1}+且W不含相邻1}的正规文法。

G=({S, A, B}, {0, 1}, P, S)

P: S::=0|1|0B|1A

A::=0|0S

B::=0|1

P41 27. 给出一个产生下列语言L(G)={W|W∈{a,b}*且W中含a的个数是b个数两倍的前后文无关文法。

文法G=({S, A, B}, {a, b}, P, S)

P: S::=AAB|ABA|BAA|ε

A::=aS

B::=bS

或者

S::=Saab|aSab|aaSb|aabS|Saba|aSba|abSa|abaS|Sbaa|bSaa|baSa|baaS|ε

P42 29. 用扩充的BNF表示以下文法规则:

1.Z::=AB|AC|A

2.A::=BC|BCD|AXZ|AXY

3.S::=aABa|ab

4.A::=Aab|ε

解:

1.Z::=A(B|C|ε)::=A[B|C]

2.A::=BC(ε|D)|{X(Z|Y)}::= BC[D]|{X(Z|Y)}

3.A::=a((AB|ε)b) ::= a[AB]b

4.A::={ab|ε}::={ab}

第四次作业:

P74 2. 什么叫超前搜索?扫描缓冲区的作用是什么?

词法分析程序在识别单词的时候,为进一步判明情况,确定下一步要做什么,一般采用超前读字符的方法,称超前搜索,扫描缓冲区的作用是为了识别单词符号。

P74 4. 画出下列文法的状态图:

Z::=Be

B::=Af

A::=e|Ae 并使用该状态图检查下列句子是否该文法的合法句子:f, eeff, eefe。

由状态图可知只有eefe是该文法的合法句子。

P74 5. 设右线性文法G=({S, A, B}, {a, b}, S, P),其中P组成如下:

S::=bA A::=bB A::=aA A::=b B::=a

画出该文法的状态转换图。

第五次作业:

P74 6. 构造下述文法G[Z]的自动机,该自动机是确定的吗?它相应的语言是什么? Z ::=A0 A ::=A0|Z1|0

解:先画出该文法状态转换图:

NFA=({S ,A ,Z},{0,1},M ,{S},{Z})

其中M : M (S ,0)={A} M (S ,1)=? M (A ,0)={A ,Z} M (A ,1)=?

M (Z ,0)=? M (Z ,1)={A}

显然该文法的自动机是非确定的;它相应的语言为:{0,1}上所有满足以00开头以0

根据其转换系统可得状态转换集、状态子集转换矩阵如下表所示: 则其相应的DFA 为:

P74 7. 构造一个DFA,它接受{0,1}上所有满足下述条件的字符串,其条件是:字符串中每个1都有0直接跟在右边,然后,再构造该语言的正规文法。

解:DFA=({S,A,Z},{0,1},M,S,{Z})

其中M:M(S,0)=Z M(S,1)= A

M(A,0)=Z

M(Z,0)=Z M(Z,1)=A

该语言的正规文法G[Z]为:

右线性文法://S::=0|1A|0Z 左线性文法://S::=0|A0|Z0

A::=0|0Z A::=1|Z1

Z::=0|1A|0Z Z::=0|A0|Z0

P74 8. 设(NFA) M = ( {A, B}, {a, b}, M, {A}, {B} ),其中M定义如下:

M (A, a) = {A, B} M (A, b) = {B} M (B, a) = ? M (B, b) = {A, B}

请构造相应确定有穷自动机(DFA) M’。

解:构造一个如下的自动机(DFA) M’,(DFA) M’={K, {a, b}, M’, S, Z}

S的元素是[A] [B] [A, B]

由于M(A, a)={A, B},故有M’([A], a)=[A, B]

同样M’([A],b)=[B]

M’([B],a)=?

M’([B],b)=[A,B]

由于M({A,B},a)= M(A,a)U M(B,a)= {A,B}U ?= {A,B}

故M’([A,B],a)= [A,B]

由于M({A,B},b)= M(A,b)U M(B,b)={B}U {A,B} = {A,B}

故M’([A,B],b)= [A,B]

S={[A]},终态集Z={[A,B],[B]}

重新定义:令0=[A] 1=[B] 2=[A, B],则DFA如下所示:

可以进一步化简,把M’的状态分成终态组{1,2}和非终态组{0}

由于{1,2}a={1,2}b={2} {1,2},不能再划分。至此,整个划分含有两组{1,2}{0} 令状态1代表{1,2},化简如图:

P74 9. 设有穷自动机M = ({S, A, E}, {a, b, c}, M, S, {E}),其中M定义为

M (S, c) = A M (A, b) = A M (A, a) = E 请构造一个左线性文法。

解:先求右线性文法

S→cA A→bA A→a | aE

其左线性文法G=(V N, V T, P, S)

V N={A, S} V T={a, b, c}

P: A→c A→Ab S→Aa

P74 10. 已知正规文法G = ({S, B, C}, {a, b, c}, P, S),其中P内包含如下产生式:S::=aS | aB ……①

B::=bB | bC ……②

C::=cC | c ……③请构造一个等价的有穷自动机。

解:M=({S, B, C, T}, {a, b, c}, M, {S}, {T})

M (S, a)=S M (S, a)=B M (S, b)=?M (S, c)=?

M (B, a)=?M (B, b)=B M (B, b)=C M (B, c)=?

M (C, a)=?M (C, b)=?M (C, c)=T M (C, c)=C

第六次作业:

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

(1)1(0|1)*101

解:先构造该正规式的转换系统:

由上述转换系统可得状态转换集K={S, 1, 2, 3, 4, 5, Z},状态子集转换矩阵如下表所示:

其对应的DFA状态转换图为:

现在对该DFA 进行化简,最终得到下列化简后的状态转换图(先将其分成两组——终态组{5}和非终态组{0, 1, 2, 3, 4},再根据是否可继续划分来确定最后的组数):

P74 12. 将图3.24非确定有穷自动机NFA 确定化和最少化。

解:设(DFA)M = {K, V T , M, S, Z},其中,K={[0], [0, 1], [1]},V T ={a, b},M : M ([1], a) =[0] M ([1], b) =Ф M ([0, 1], a) =[0, 1] M ([0, 1], b) =[1] M ([0], a) =[0, 1] M ([0], b) =[1] S=[1],Z={[0], [0, 1]}

P74 13. 构造下列正规式的DFA :

a

图3.24 NFA 状态转换图

(1)b(a|b)*bab

此题的与P74第11题基本一样,见上;

P74 15. 用两种方法将(NFA) M = ({X, Y, Z}, {0, 1}, M, {X}, {Z}),构造相应的DFA,其中:M (X, 0) = {Z} M (X, 1) = {X} M (Y, 0) = {X, Y}

M (Y, 1) = ФM (Z, 0) = {X, Z} M (Z, 1) = {Y}

假设(DFA) M’=(K’, V T’, M’, S’, Z’),其中K’={[X], [Y], [Z], [X,Y], [X, Z], [Y, Z], [X, Y, Z]},

其中[Y, Z]为不可到达状态,应该删去,所以S’={[X]},Z’={[Z], [X, Z], [X, Y, Z]},再进行化简,发现4和6两状态等价,最后其DFA如下所示:

由上述转换系统可得状态转换集、状态子集转换矩阵如下表所示:

先化简,分为非终态集 {2, 4, 5, 0} 和终态集 {6, 1, 3},易于发现可划分为{0, 2},{1},{3, 6},{4},{5},其DFA

P74 16. 已知e 1= (a|b)*,e 2=(a*b*)*,试证明e 1= e 2。

证明:L(e 1)=L((a|b)*)= (L (a|b))*= (L (a)∪L(b))*={a, b}*;

L(e 2)= L((a*b*)*)= (L (a*b*))*=(L(a*)L(b*))*={{a}*{b}*}*={a, b}*; 因此e 1= e 2(得证)

P74 18. 根据下面正规文法构造等价的正规表达式:

S::=cC | a ……①

A::=cA | aB ……② B::=aB | c ……③

C::=aS | aA | bB | cC | a ……④ 解:由③式可得 B= aB + c → B=a*c 由②式可得 A= cA + aB → A= c*aa*c 由①式可得 S= cC + a

由④式可得 C= aS + aA + bB + cC + a → C= c*( aS + aA + bB + a) →

C= c*( aS + ac*aa*c + ba*c + a) → S= cc*( aS + ac*aa*c + ba*c + a) + a = cc*aS+ cc*( ac*aa*c + ba*c + a) + a = (cc*a)*( cc*( ac*aa*c + ba*c + a) + a) = (cc*a)*( cc*( ac*aa*c | ba*c | a) | a)

P74 19. Σ={a, b},写出下列正规集:

(1)(a | b)*(aa | bb)(a | b)*

解:L((a | b)*(aa | bb)(a | b)*) = L((a | b)*) L((aa | bb)) L((a | b)*) =(L (a | b))* {aa, bb} (L

(a | b))* = {a, b}*{aa, bb}{a, b}*

P75 20. 证明下列关系式成立,其中A 、B 是任意正规表达式。 (1)A | A = A (3)A* = ε| AA*

(1)解:L(A | A) = L(A)∪L(A) = L(A),所以A | A = A;

(3)解:L(A*) = (L(A))*,L(ε| AA*) = L(A)L(A*) = (L(A))*,所以A* = ε| AA*;

第七次作业:

P142 1. 试分别消除下列文法的直接左递归(采用两种方法——重复法和改写法)

(1)G[E]:

E::=T | EAT ……①

T::=F | TMF ……②

F::=(E) | i ……③

A::=+ | - ……④

M::=* | / ……⑤

解:先采用“重复法”:再采用“改写法”:

E::=T{AT} E::=TE’

T::=T{MF} E’::= ATE’ | ε

F::=(E) | I T::=FT’

A::=+ | - T’::=MFT’ | ε

M::=* | / F::=(E) | I

A::=+ | -

M::=* | /

(4)G[Z]:

Z::=V1……①

V1::=V2 | V1iV2……②

V2::=V3 | V2+V3……③

V3::=)V1*| ( ……④

解:先采用“重复法”:再采用“改写法”:

Z::=V1Z::=V1

V1::=V2 {iV2} V1::=V2 V1’

V2::=V3 {+V3} V1’::=i V2 V1’ | ε

V3::=)V1*| ( V2::=V3 V2’

V2’::=+V3 V2’ | ε

V3::=)V1*| (

P142 2. 试分别消除下列文法的间接左递归

(2)G[Z]:

Z::=AZ| b ……①

A::=Z A | a ……②

解:将②式代入①式可得,Z::=ZAZ| aZ | b 消除左递归后得到:

Z::=(aZ | b)Z’

Z’::=AZZ’ | ε

A::=ZA| a

P142 4. 试分别用两种方法(框图法和类Pascal语言或类C语言)写一个识别下面文法句子的递归子程序

文法G[A]:

A::=[B ……①

B::=X] | BA……②

X::=Xa | Xb | a | b ……③

解:消除该文法的左递归和回溯,得到文法如下:

A::=[B

B::=X]B’

B’::=AB’ |ε

X::=aX’ | bX’

X’::= aX’ | bX’ |ε

用类Pascal语言写出其递归子程序:

P(A): SCIN

IF ch=’[‘THEN READ (ch) ELSE ERROR

P(B)

SCOUT

P(B): SCIN

P(X)

IF ch=’]‘THEN READ (ch) ELSE ERROR

P(B’)

SCOUT

P(B’): SCIN

IF ch=εTHEN SCOUT

ELSE P(A)

P(B’)

SCOUT

P(X): SCIN

IF ch=’a‘THEN { READ (ch) P(X’) }

ELSE

IF ch=’b‘THEN { READ (ch) P(X’) }

ELSE ERROR

SCOUT

P(X’): SCIN

IF ch=εTHEN SCOUT

ELSE

IF ch=’a‘THEN { READ (ch) P(X’) }

ELSE

IF ch=’b‘THEN { READ (ch) P(X’) }

ELSE ERROR

SCOUT

用框图法来表述:(此处仅给出P(A)和P(X’)的框图形式,其余相似从略)

P(A): P(X ’):

第八次作业:

P143 5. 对下面的文法G[E]:

E::=TE ’

E ’::=+E |ε T ::=FT ’ T ’::=T |ε

F::=PF ’

F ’::=*F ’ |ε

P ∷=(E) |a |b |∧

(1)计算这个文法的每个非终结符号的FIRST 和FOLLOW ; (2)证明这个文法是LL (1)文法;

(3)构造它的LL (1)分析表并分析符号串a*b+b; 解:(1)构造FIRST 集:

FIRST(E ’)={+, ε}

FIRST(F ’)={*, ε}

FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P) ={ (,a ,b ,∧) FIRST(T ’)={ (,a ,b, ε,∧}

构造FOLLOW 集:

规则一

#∈FOLLOW(E) FOLLOW(E)={#}

规则二

)∈FOLLOW(E) FOLLOE(E)={ ),#}

ch=[?

<> 3

ERROR

ch=ε?

ch=b?

<> 9 ERROR

FIRST(E’)-{ε}FOLLOW(T)FOLLOW(T)={+}

FIRST(T’)-{ε}FOLLOW(F) FOLLOW(F)={ (,a,b,∧}

FIRST(F’)-{ε}FOLLOW(P) FOLLOW(P)={*}

规则三

FOLLOW(E) FOLLOW(E’) FOLLOW(E’)={#,)}

FOLLOW(E) FOLLOW(T) FOLLOW(T)={+,#,)}

FOLLOW(T) FOLLOW(T’) FOLLOW(T’)= {+,#,)}

FOLLOW(T) FOLLOW(F) FOLLOW(F)={ (,),a,b,+,#,∧} FOLLOW(F) FOLLOW(F’) FOLLOW(F’)= { (,),a,b,+,#,∧}

FOLLOW(F) FOLLOW(P) FOLLOW(P)= { (,),a,b,+,#,∧,*} 最后结果为:

FIRST(E’)={+, ε}

FIRST(F’)={*, ε}

FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P) ={ (,a,b,∧}

FIRST(T’)={ (,a,b, ε,∧)

FOLLOE(E)={ ), #}

FOLLO W(E’)={#,)}

FOLLOW(T)={+,#,)}

FOLLOW(T’)= {+,#,)}

FOLLOW(F)={ (,),a,b,+,#,∧}

FOLLOW(F’)={ (,),a,b,+,#,∧}

FOLLOW(P)= { (,),a,b,+,#,∧,*}

(2)证明该文法是LL(1)文法:

证明:对于规则E’::=+E |ε,T’::=T |ε,F’::=*F’ |ε(仅有一边能推出空串)有FIRST(+E)={+}∩FIRST(ε)= ?,FIRST(T’)={+, #, }}∩FIRST(ε)= ?

FIRST(*F’)={*}∩FIRST(ε)= ?,FIRST(+E)={+}∩FOLLOW(E’)= {#, )}=?

FIRST(T)={(, a, b, ∧}∩FOLLOW(T’)= {+, #, )}=?

FIRST(*F’)={*}∩FOLLOW(F’)= { (,),a,b,+,#,∧}=?

所以该文法是LL(1)文法。

(3)构造文法分析表

P144 6. 对下列文法,构造相应的FIRST和FOLLOW:(1)S∷=aAd

A∷=BC

B∷=b |ε

C∷=c |ε

(2)A∷=BCc | gDB

B∷=ε| bCDE

C∷=DaB | ca

D∷=ε| dD

E∷=gAf | c

解:(1)

构造FIRST集

FIRST(S)={a}

FIRST(B)={b,ε}

FIRST(C)={c,ε}

FIRST(A)={b,c,ε}

构造FOLLOW集

规则一

#∈FOLLOW(S) FOLLOW(S)={#} 规则二

d∈FOLLOW(A) FOLLOE(A)={d} FIRST(C)-{ ε}FOLLOW(B) FOLLOW(B)={c} 规则三

FOLLOW(A) FOLLOW(B) FOLLOW(B)={d,c}

FOLLOW(A) FOLLOW(C) FOLLOW(C)={d} 最后结果为:

FIRST(S)={a}

FIRST(A)={b,c,ε}

FIRST(B)={b,ε}

FIRST(C)={c,ε}

FOLLOW(S)={#}

FOLLOW(A)={d}

FOLLOW(B)={ε,c}

FOLLOW(C)={d}

(2)

构造FIRST集

规则二

FIRST(A)={g},

FIRST(B)={b,ε},

FIRST(C)={ c},

FIRST(D)={d,ε},

FIRST(E)={ g,c }.

规则三

FIRST(A)={g,b,c},

FIRST(C)={a,c,d},

FIRST(A)={ a,b,c,d,g}.

构造FOLLOW集

规则一

#∈FOLLOW(A) FOLLOW(A)={#}

规则二

f∈FOLLOW(A) FOLLOE(A)={ f,#}

c∈FOLLOW(C) FOLLOE(C)={ c}

a∈FOLLOW(D) FOLLOE(D)={ a}

FIRST(Cc)-{ ε}FOLLOW(B) FOLLOW(B)={c,d,a}

FIRST(B)-{ ε}FOLLOW(D) FOLLOW(D)={b,a}

FIRST(DE)-{ ε}FOLLOW(C) FOLLOW(C)={d,g,c}

FIRST(E) FOLLOW(D) FOLLOW(D)={b,c,a,g}

规则三

FOLLOW(A) FOLLOW(B) FOLLOW(B)={a,c,d,f,#} FOLLOW(A) FOLLOW(D)FOLLOW(D)={a,b,c,f,g,#} FOLLOW(B) FOLLOW(E) FOLLOW(E)= {a,c,d,f,#} FOLLOW(C) FOLLOW(B) FOLLOW(B)={ a,c,d,g,f,#} FOLLOW(B) FOLLOW(E) FOLLOW(E)= { a,c,d,g,f,#}

最后结果为:

FIRST(A)={ a,b,c,d,g},

FIRST(B)={b,ε},

FIRST(C)={a,c,d},

FIRST(D)={d,ε},

FIRST(E)={ g,c },

FOLLOE(A)={ f,#}

FOLLOW(B)={ a,c,d,g,f,#},

FOLLOW(C)={d,g,c},

FOLLOW(D)={a,b,c,f,g,#},

FOLLOW(E)= { a,c,d,g,f,#}.

P144 9. 设已给文法G[S]:

S∷=SaB | bB

A∷=Sa

B∷=Ac

(1)将此文法改写为LL(1)文法

(4)构造LL(1)分析表

解:此题消除左递归之后,构造LL(1)分析表存在“多重入口”问题,故采用以下方法:(1)该写为LL(1)文法:

S∷=bB{aB}

A∷=Sa

B∷=Ac

(4)

FIRST(S)={ b },

FIRST(A)={b},

FIRST(B)={b},

FOLLOE(S)={a,#},

FOLLOW(A)={ c},

FOLLOW(B)={a,#}.

第九次作业:

P144 10. 证明下述文法不是简单优先文法:

(1)S∷=bEb

E∷=E+T | T

(2)S∷=bEb

E∷=F | F+T | T | i

T∷=i | (E)

证明:

(1)画语法树:S

╱│╲

b E b

╱│╲

E + T

可以得出b=E和b>E,因此该文法不是简单优先文法。

(2)因该文法中含

E∷=i

编译原理复习题2017(含试卷)

* 编译原理复习题 一.简答题: 1) 什么是句子? 什么是语言? 解答:句子——设G 是一个给定的文法,S 是文法的开始符号,如果S x (其中x ∈V T * ),则称x 是文法的一个句子。 语言——语言是句子的集合。 或——设G[S]是给定文法,则由文法G 所定义的语言L(G)可描述为:L(G)={x │ S x,x ∈V T * } 。 2) DFA 与NFA 有何区别 ? 解答:DFA 与NFA 的区别表现为两个方面:一是NFA 可以有若干个开始状态,而DFA 仅只有一个 开始状态。另一方面,DFA 的映象M 是从K ×∑到K ,而NFA 的映象M 是从K ×∑到K 的子集,即映象M 将产生一个状态集合(可能为空集),而不是单个状态。 3) 自顶向下的语法分析方法的基本思想是什么? 解答:从文法的开始符号开始,根据给定的输入串并按照文法的产生式一步一步的向下进行直接 推导,试图推导出文法的句子,使之与给定的输入串匹配。 4) 自底向上的语法分析方法的基本思想是什么? 解答:从给定的输入串(终结符串)开始,根据文法的规则一步一步的向上进行直接归约,试图 归约到文法的开始符号。 5) 一个上下文无关文法G 包括哪四个组成部分? 解答:一组非终结符号,一组终结符号,一个开始符号,以及一组产生式。 6) 在自底向上的语法分析方法中,分析的关键是什么?

解答:关键是寻找句柄。 7)在自顶向下的语法分析方法中,分析的关键是什么? 解答:关键是选择候选式。 8)什么是属性文法? 答:是在上下文无关文法的基础上,为每个文法符号(含终结符和非终结符)配备若干个属 性值,对文法的每个产生式都配备了一组属性计算规则(称为语义规则)。在语法分析过 程中,完成语义规则所描述的动作,从而实现语义处理。 一个属性文法形式的定义为一个三元组AG,AG=(G,V,E)。 其中G为一个上下文无关文法;V为属性的有穷集;E为一组语义规则。 9)语法制导翻译 语法制导翻译:定义翻译所必须的语义属性和语义规则,一般不涉及计算顺序。 语法制导翻译(Syntax-Directed Translations): –一个句子的语义翻译过程与语法分析过程同时进行。 在文法中,文法符号有明确的意义,文法符号之间有确定的语义关系。属性描述语义信息, 语义规则描述属性间的的关系,将语义规则与语法规则相结合,在语法分析的过程中计算语义 属性值。 10)词法分析的主要任务是什么? 解答:词法分析器的任务是对构成源程序的字符串从左到右逐个字符逐个字符地进行扫 描,依次把它们识别为一个一个具有独立意义的单词,并确定其属性,再转换为长度统一的属 11)图示运行时存储空间的划分(分为哪几个区)。 解答: 一般分为静态区和动态区: 程序代码区、静态数据区、栈区和堆区 12)常用的中间语言种类有哪几种? 解答: 常用的中间语言种类有逆波兰表示、三元式、四元式和树形表示。 13)文法G所描述的语言是什么的集合? 解答:是由文法的开始符号推出的所有终结符串的集合。或说是句子的集合。 14)乔姆斯基把文法分为四种类型,即0型、1型、2型、3型。其中2型文法叫什么? 解答: 2型文法叫上下文无关文法。 15)常见的动态存贮分配策略有哪两种? 解答:常见的两种动态存贮分配策略是栈式动态分配策略和堆式动态分配策略。 16)语法分析的任务是什么?

北京邮电大学《编译原理与技术》课程教学大纲

《编译原理与技术》课程教学大纲 一、课程编号:1311020 二、课程名称:编译原理与技术(64学时) Compiler Principle and Technology 三、课程教学目的 通过本课程的学习,使学生了解并掌握程序设计语言的编译程序的设计原理与实现技术,了解编译程序的构造方法;加深学生对高级程序设计语言的理解,做到触类旁通;使学生体会到其他专业基础知识如算法与数据结构、程序设计、操作系统、形式语言与自动机、计算机组成原理、汇编语言、软件工程等综合应用,对计算机的软硬件工作原理建立比较深刻的理解,提高学生的专业素养,使学生能够利用所学的理论知识解决实际问题,培养学生分析问题、解决问题的能力。 四、课程教学基本要求 1.了解编译的基本概念和步骤,编译程序的基本组成、结构、编译环境等基本概念。 2.掌握词法分析的原理、词法分析程序的设计和实现方法。 3.掌握语法分析的原理和实现技术、简单的语法分析程序的设计和实现。 4.掌握语法制导翻译技术。 5.理解利用语法制导翻译技术进行语义分析、中间代码生成的实现。 6.理解程序运行环境、代码生成相关的基本概念和实现方法。 7.了解代码优化技术的基本概念和方法。 五、教学内容及学时分配(含实验) 第一章编译概述2学时 1.翻译和解释 2.编译的阶段 3.编译程序的前后处理器(预处理器、汇编程序、连接装配程序)第二章词法分析4学时 1.词法分析器的作用 2.词法分析器的输入与输出 3.记号的描述与识别 4.词法分析程序的设计与实现 5*.软件工具LEX(规格说明、工作原理)

1.语法分析器的作用 2.自顶向下分析(预测分析器、非递归的预测分析器) 3.自底向上分析(规范归约、移进-归约方法实现) 4.LR分析器(模型及工作过程、SLR(1)分析器、LR(1)分析器、LALR(1)分析器)5.LR分析方法对二义文法的应用 6*.软件工具YACC (规格说明、二义性处理) 第四章语法制导翻译技术8学时 1.语法制导定义与翻译方案 2.S属性定义的自底向上翻译 3.L属性的自顶向下翻译 4.L属性的自底向上翻译 第五章语义分析4学时 1.语义分析的概念 2.符号表的组织与管理 3.类型检查(类型表达式、类型等价) 4.简单类型检查器的说明(语言说明、确定标识符的类型、表达式及语句的类型检查) 5*.类型检查有关的其他主题(函数和运算符的重载、类型转换、多态函数) 第六章运行环境6学时 1.程序运行时的存储组织 2.存储分配策略(静态存储分配、栈式存储分配、堆式存储分配) 3.访问非局部名字 4.参数传递方式 第七章中间代码生成6学时 1.中间代码形式 2.赋值语句的翻译 3.布尔表达式的翻译 4.控制语句的翻译 5.过程调用语句的翻译

编译原理期末考试习题及答案

一、填空题|(每题4分,共20分) 1. 乔母斯基定义的3型文法(线性文法)产生式形式 A→Ba|a,或A→aB|a,A,B∈Vn, a,b∈Vt 。 2.语法分析程序的输入是单词符号,其输出是语法单位。 3 型为 B → .aB 的LR(0)项目被称为移进项目,型为 B → a.B 的LR(0) 项目被称为待约项目, 4.在属性文法中文法符号的两种属性分别为继承属性和综合属性。 5、运行时存贮管理方案有静态存储分配、动态存储分配和堆式存储分配和方案。 二.已知文法 G(S) (1) E → T | E+T (2) T → F | F*F (3) F →(E)| i (1)写出句型(T*F+i)的最右推到并画出语法树。(4分) (2)写出上述句型的短语,直接短语和句柄。(4分) 答:(1)最右推到(2分) E ==> T ==> F ==> (E) ==> (E+T) ==> (E+F) ==> (E+i) ==> (T+i) ==> (T*F+i) (2) 语法树(2分) (3)(4分) 短语:(T*F+i),T*F+i ,T*F , i 直接短语:T*F , i 句柄:T*F 三. 证明文法G(S) :S → SaS |ε是二义的。(6分) 答:句子aaa对应的两颗语法树为:

因此,文法是二义文法 四.给定正规文法G(S): (1) S → Sa | Ab |b (2) A → Sa 请构造与之等价的DFA。(6分) 答:对应的NFA为:(6分) 状态转换表: a b {F} Φ{S} {S} {S,A} Φ {S,A} {S,A} {S} 五. 构造识别正规语言b*a(bb*a)*b* 最小的DFA(要求写出求解过程)。(15分)答:(1)对应的NFA(5分) a b {0} {1,3} {0} {1,3} Φ{2,3} {2,3} {1,3} {2,3} (5分) 六. 已知文法G(S) : (1) S → ^ | a | (T) (2) T → T,S | S 试:(1)消除文法的左递归;(4分) (2)构造相应的first 和 follow 集合。(6分) 答:(1)消除文法的左递归后文法 G’(S)为: (1) S → ^ | a | (T)

王汝传编译原理习题答案

《编译原理》习题答案: 第一次: P14 2、何谓源程序、目标程序、翻译程序、汇编程序、编译程序和解释程序?它们之间可能有何种关系? 答:被翻译的程序称为源程序; 翻译出来的程序称为目标程序或目标代码; 将汇编语言和高级语言编写的程序翻译成等价的机器语言,实现此功能的程序称为翻译程序; 把汇编语言写的源程序翻译成机器语言的目标程序称为汇编程序; 解释程序不是直接将高级语言的源程序翻译成目标程序后再执行,而是一个个语句读入源程序,即边解释边执行; 编译程序是将高级语言写的源程序翻译成目标语言的程序。 关系:汇编程序、解释程序和编译程序都是翻译程序,具体见P4 图 1.3。 P14 3、编译程序是由哪些部分组成?试述各部分的功能? 答:编译程序主要由8个部分组成:(1)词法分析程序;(2)语法分析程序;(3)语义分析程序;(4)中间代码生成;(5)代码优化程序;(6)目标代码生成程序;(7)错误检查和处理程序;(8)信息表管理程序。具体功能见P7-9。 P14 4、语法分析和语义分析有什么不同?试举例说明。 答:语法分析是将单词流分析如何组成句子而句子又如何组成程序,看句子乃至程序是否符合语法规则,例如:对变量x:= y 符合语法规则就通过。语义分析是对语句意义进行检查,如赋值语句中x与y类型要一致,否则语法分析正确,语义分析则错误。 P15 5、编译程序分遍由哪些因素决定? 答:计算机存储容量大小;编译程序功能强弱;源语言繁简;目标程序优化程度;设计和实现编译程序时使用工具的先进程度以及参加人员多少和素质等等。 补充: 1、为什么要对单词进行内部编码?其原则是什么?对标识符是如何进行内部编码的? 答:内部编码从“源字符串”中识别单词并确定单词的类型和值;原则:长度统一,即刻画了单词本身,也刻画了它所具有的属性,以供其它部分分析使用。对于标识符编码,先判断出该单词是标识符,然后在类别编码中写入相关信息,以表示为标识符,再根据具体标识符的含义编码该单词的值。 补充: 2、赋值语句:A:= 5 * C的语法和语义指的是什么? 答:语法分析将检查该语句是否符合赋值语句规则,语义是指将 5 * C 的结果赋值为 A 。第二次作业: P38 1、设T1={11,010},T2={0,01,1001},计算:T2T1,T1*,T2+。 T2T1={011,0010,0111,01010,100111,1001010} T1*={ε,11,010,1111,11010,01011,010010……} T2+={0,01,1001,00,001,01001,010,0101……}

编译原理课程设计

《编译原理》课程设计大纲 课程编号: 课程名称:编译原理/Compiler Principles 周数/学分:1周/1学分 先修课程:高级程序设计语言、汇编语言、离散数学、数据结构 适用专业:计算机科学与技术专业、软件工程专业 开课学院,系或教研室:计算机科学与技术学院 一、课程设计的目的 课程设计是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,设计题中的问题比平时的练习题要复杂,也更接近实际。编译原理这门课程安排的课程设计的目的是旨在要求学生进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容,选择合适的数据逻辑结构表示问题,然后编制算法和程序完成设计要求,从而进一步培养学生独立思考问题、分析问题、解决实际问题的动手能力。 要求学生在上机前应认真做好各种准备工作,熟悉机器的操作系统和语言的集成环境,独立完成算法编制和程序代码的编写。 设计时间: 开发工具: (1) DOS环境下使用Turbo C; (2) Windows环境下使用Visual C++ 。 (3) 其它熟悉语言。 二、课程设计的内容和要求 设计题一:算术表达式的语法分析及语义分析程序设计。 1.目的

通过设计、编制、调试一个算术表达式的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词 法检查和分析。 2.设计内容及要求: 算术表达式的文法: 〈无符号整数〉∷= 〈数字〉{〈数字〉} 〈标志符〉∷= 〈字母〉{〈字母〉|〈数字〉} 〈表达式〉∷= [+|-]〈项〉{〈加法运算符〉〈项〉} 〈项〉∷= 〈因子〉{〈乘法运算符〉〈因子〉} 〈因子〉∷= 〈标志符〉|〈无符号整数〉|‘(’〈表达式〉‘)’ 〈加法运算符〉∷= +|- 〈乘法运算符〉∷= *|/ (1) 分别选择递归下降法、算符优先分析法(或简单优 先法)完成以上任务,中间代码选用逆波兰式。 (2) 分别选择LL(1)、LR法完成以上任务,中间代码选 用四元式。 (3) 写出算术表达式的符合分析方法要求的文法,给出 分析方法的思想,完成分析程序设计。 (4) 编制好分析程序后,设计若干用例,上机测试并通 过所设计的分析程序。 设计题二:简单计算器的设计 1.目的 通过设计、编制、调试一个简单计算器程序,加深对语法及语 义分析原理的理解,并实现词法分析程序对单词序列的词法检 查和分析。 2.设计内容及要求 算术表达式的文法:

编译原理习题及答案(整理后)

第一章 1、将编译程序分成若干个“遍”就是为了。 a.提高程序得执行效率 b.使程序得结构更加清晰 c.利用有限得机器内存并提高机器得执行效率 d.利用有限得机器内存但降低了机器得执行效率 2、构造编译程序应掌握。 a.源程序b.目标语言 c.编译方法d.以上三项都就是 3、变量应当。 a.持有左值b.持有右值 c.既持有左值又持有右值d.既不持有左值也不持有右值 4、编译程序绝大多数时间花在上。 a.出错处理b.词法分析 c.目标代码生成d.管理表格 5、不可能就是目标代码。 a.汇编指令代码b.可重定位指令代码 c.绝对指令代码d.中间代码 6、使用可以定义一个程序得意义。 a.语义规则b.语法规则 c.产生规则d.词法规则 7、词法分析器得输入就是。 a.单词符号串b.源程序 c.语法单位d.目标程序 8、中间代码生成时所遵循得就是- 。 a.语法规则b.词法规则 c.语义规则d.等价变换规则 9、编译程序就是对。 a.汇编程序得翻译b.高级语言程序得解释执行 c.机器语言得执行d.高级语言得翻译 10、语法分析应遵循。 a.语义规则b.语法规则 c.构词规则d.等价变换规则 二、多项选择题 1、编译程序各阶段得工作都涉及到。 a.语法分析b.表格管理c.出错处理 d.语义分析e.词法分析 2、编译程序工作时,通常有阶段。 a.词法分析b.语法分析c.中间代码生成 d.语义检查e.目标代码生成 三、填空题 1、解释程序与编译程序得区别在于。 2、编译过程通常可分为5个阶段,分别就是、语法分析、代码优化与目标代码生成。 3、编译程序工作过程中,第一段输入就是,最后阶段得输出为程序。

编译原理课程设计报告(一个完整的编译器)

编译原理程序设计报告 一个简单文法的编译器的设计与实现专业班级:计算机1406班 组长姓名:宋世波 组长学号: 20143753 指导教师:肖桐 2016年12月

设计分工 组长学号及姓名:宋世波20143753 分工:文法及数据结构设计 词法分析 语法分析(LL1) 基于DAG的中间代码优化 部分目标代码生成 组员1学号及姓名:黄润华20143740 分工:中间代码生成(LR0) 部分目标代码生成 组员2学号及姓名:孙何奇20143754 分工:符号表组织 部分目标代码生成

摘要 编译器是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能解读、运行的低阶机器语言的程序。编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。 一.编译器的概述 1.编译器的概念 编译器是将便于人编写,阅读,维护的高级计算机语言翻译为计算机能解读、运行的低阶机器语言的程序。编译器将原始程序作为输入,翻译产生使用目标语言的等价程序。源代码一般为高阶语言如Pascal、C++、Java 等,而目标语言则是汇编语言或目标机器的目标代码,有时也称作机器代码。 2.编译器的种类 编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成用来在其它平台上运行的目标代码,这种编译器又叫做交叉编译器。交叉编译器在生成新的硬件平台时非常有用。“源码到源码编译器”是指用一种高阶语言作为输入,输出也是高阶语言的编译器。例如: 自动并行化编译器经常采用一种高阶语言作为输入,转换其中的代码,并用并行代码注释对它进行注释(如OpenMP)或者用语

编译原理试题(卷)汇总-编译原理期末试题(卷)(8套含答案解析-大题集)

编译原理考试题及答案汇总 一、选择 1.将编译程序分成若干个“遍”是为了_B__。 A . 提高程序的执行效率 B.使程序的结构更加清晰 C. 利用有限的机器内存并提高机器的执行效率 D.利用有限的机器内存但降低了机器的执行效率 2.正规式 MI 和 M2 等价是指__C__。 A . MI 和 M2 的状态数相等 B.Ml 和 M2 的有向弧条数相等。 C .M1 和 M2 所识别的语言集相等 D. Ml 和 M2 状态数和有向弧条数相等 3.中间代码生成时所依据的是 _C_。 A.语法规则 B.词法规则 C.语义规则 D.等价变换规则 4.后缀式 ab+cd+/可用表达式__B_来表示。 A. a+b/c+d B.(a+b)/(c+d) C. a+b/(c+d) D. a+b+c/d 6.一个编译程序中,不仅包含词法分析,_A____,中间代码生成,代码优化,目标代码生成等五个部分。 A.( ) 语法分析 B.( )文法分析 C.( )语言分析 D.( )解释分析 7.词法分析器用于识别__C___。 A.( ) 字符串 B.( )语句 C.( )单词 D.( )标识符 8.语法分析器则可以发现源程序中的___D__。 A.( ) 语义错误 B.( ) 语法和语义错误 C.( ) 错误并校正 D.( ) 语法错误 9.下面关于解释程序的描述正确的是__B___。 (1) 解释程序的特点是处理程序时不产生目标代码 (2) 解释程序适用于 COBOL 和 FORTRAN 语言 (3) 解释程序是为打开编译程序技术的僵局而开发的 A.( ) (1)(2) B.( ) (1) C.( ) (1)(2)(3) D.( ) (2)(3) 10.解释程序处理语言时 , 大多数采用的是__B___方法。 A.( ) 源程序命令被逐个直接解释执行 B.( ) 先将源程序转化为中间代码 , 再解释执行 C.( ) 先将源程序解释转化为目标程序 , 再执行 D.( ) 以上方法都可以 11.编译过程中 , 语法分析器的任务就是__B___。 (1) 分析单词是怎样构成的 (2) 分析单词串是如何构成语句和说明的 (3) 分析语句和说明是如何构成程序的 (4) 分析程序的结构 A.( ) (2)(3) B.( ) (2)(3)(4)C.( ) (1)(2)(3) D.( ) (1)(2)(3)(4) 12.编译程序是一种___C__。 A. ( ) 汇编程序 B.( ) 翻译程序 C.( ) 解释程序 D.( ) 目标程序 13.文法 G 所描述的语言是_C____的集合。 A. ( ) 文法 G 的字母表 V 中所有符号组成的符号串 B.( ) 文法 G 的字母表 V 的闭包 V* 中的所有符号串 C.( ) 由文法的开始符号推出的所有终极符串 D. ( ) 由文法的开始符号推出的所有符号串 14.文法分为四种类型,即 0 型、1 型、2 型、3 型。其中 3 型文法是___B__。 A. ( ) 短语文法 B.( ) 正则文法 C.( ) 上下文有关文法 D.( ) 上下文无关文法15.一个上下文无关文法 G 包括四个组成部分,它们是:一组非终结符号,一组终结符号,一个开始符号,以及一组 __D___。 A.( ) 句子 B.( ) 句型 C.( ) 单词 D.( ) 产生式 16.通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括_C____。

编译原理习题解答

第二章:习题2-4 Table表 var x,y; procedure p; var a; procedure q; var b; begin b:=10; end; procedure s; var c,d; procedure r; var e,f; begin call q; end; begin call r; end; begin call s; end; begin call p; end 根据:Page289,变量table:array[0..txmax] of record 结构体以及block函数得到下表,而表中各部分的含义,

第三章文法和语言 5. 写一文法,使其语言是偶正整数的集合 要求: (1)允许0打头 (2)不允许0打头 解: (1)G[S]=({S,P,D,N},{0,1,2,…,9},P,S) P: S→PD|D P->NP|N D→0|2|4|6|8 N->0|1|2|3|4|5|6|7|8|9 (2)G[S]=({S,P,R,D,N,Q },{0,1,2,…,9},P,S) P: S→PD|P0|D P->NR|N R->QR|Q D→2|4|6|8 N->1|2|3|4|5|6|7|8|9 Q->0|1|2|3|4|5|6|7|8|9 6. 已知文法G: <表达式>::=<项>|<表达式>+<项>|<表达式>-<项> <项>::=<因子>|<项>*<因子>|<项>/<因子> <因子>::=(<表达式>)|i。 试给出下述表达式的推导及语法树。 (1)i; (2)(i) (3)i*i; (4)i*i+i; (5)i+(i+i); (6)i+i*i。 解: (1)v=<表达式>=><项>=><因子>=>i=w (2)v=<表达式>=><项>=><因子>=>(<表达式>)=>(<项>)=>(<因子>)=>(i)=w (3)v=<表达式>=><项>=><项>*<因子>=><因子>*<因子>=>i*i=w (4)v=<表达式>=><表达式>+<项>=><项>+<项>=><项>*<因子>+<项> =><因子>*<因子>+<因子>=>i*i+i=w (5)v=<表达式>=><表达式>+<项>=><项>+<项>=><因子>+<因子>=>i+(<表达式>) => i+(<表达式>+<项>)=>i+(<项>+<项>)=> i+(<因子>+<因子>)=>i+(i+i)=w (6)v=<表达式>=><表达式>+<项>=><项>+<项>=><因子>+<项>=>i+<项> =>i+<项>*<因子>=> i+<因子>*<因子>=> i+i*i=w 语法树见下图:

最新编译原理复习题及答案

编译原理复习题及答案 一、选择题 1.一个正规语言只能对应(B) A 一个正规文法 B 一个最小有限状态自动机 2.文法G[A]:A→εA→aB B→Ab B→a是(A) A 正规文法 B 二型文法 3.下面说法正确的是(A) A 一个SLR(1)文法一定也是LALR(1)文法 B 一个LR(1)文法一定也是LALR(1)文法 4.一个上下文无关文法消除了左递归,提取了左公共因子后是满足LL(1)文法的(A) A 必要条件 B 充分必要条件 5.下面说法正确的是(B) A 一个正规式只能对应一个确定的有限状态自动机 B 一个正规语言可能对应多个正规文法 6.算符优先分析与规范归约相比的优点是(A) A 归约速度快 B 对文法限制少 7.一个LR(1)文法合并同心集后若不是LALR(1)文法(B) A 则可能存在移进/归约冲突 B 则可能存在归约/归约冲突 C 则可能存在移进/归约冲突和归约/归约冲突 8.下面说法正确的是(A) A Lex是一个词法分析器的生成器 B Yacc是一个语法分析器 9.下面说法正确的是(A) A 一个正规文法也一定是二型文法 B 一个二型文法也一定能有一个等价的正规文法 10.编译原理是对(C)。 A、机器语言的执行 B、汇编语言的翻译 C、高级语言的翻译 D、高级语言程序的解释执行 11.用高级语言编写的程序经编译后产生的程序叫(B)

A.源程序 B.目标程序C.连接程序D.解释程序 12.(C)不是编译程序的组成部分。 A.词法分析程序 B.代码生成程序 C.设备管理程序 D.语法分析程序 13.通常一个编译程序中,不仅包含词法分析,语法分析,语义分析,中间代码生成,代码优化,目标代码生成等六个部分,还应包括(C)。 A.模拟执行器B.解释器 C.表格处理和出错处理D.符号执行器14.源程序是句子的集合,(B)可以较好地反映句子的结构。 A. 线性表 B. 树 C. 完全图 D. 堆栈 15.词法分析器的输出结果是(D)。 A、单词自身值 B、单词在符号表中的位置 C、单词的种别编码 D、单词的种别编码和自身值 16.词法分析器不能(D) A. 识别出数值常量 B. 过滤源程序中的注释 C. 扫描源程序并识别记号 D. 发现括号不匹配 17.文法:G:S→xSx | y所识别的语言是(D)。 A、xyx B、(xyx)* C、x*yx* D、x n yx n (n≥0) 18.如果文法G是无二义的,则它的任何句子α(A) A.最左推导和最右推导对应的语法树必定相同 B.最左推导和最右推导对应的语法树可能不同 C.最左推导和最右推导必定相同 D.可能存在两个不同的最左推导,但它们对应的语法树相同 19.正则文法(A)二义性的。 A. 可以是 B. 一定不是 C. 一定是 20.(B)这样一些语言,它们能被确定的有穷自动机识别,但不能用正则表达式表示。 A. 存在 B. 不存在 C. 无法判定是否存在 21.给定文法A→bA | ca,为该文法句子的是(C) A. bba B. cab C. bca D. cba 22.设有文法G[S]:S S1|S0|Sa|Sc|a|b|c,下列符号串中是该文法的句子有(D) A. ab0 B. a0c01 C. a0b0a D. bc10 23.描述一个语言的文法是(B) A.唯一的 B. 不唯一的 C. 可能唯一 24.一个文法所描述的语言是(A) A.唯一的 B. 不唯一的 C. 可能唯一

编译原理结课论文

目录

1.绪论 概述 “编译原理”是一门研究设计和构造编译程序原理课程,是计算机各专业的一门重要的专业课。编译原理这门课程蕴含着计算机学科中解决问题的思路和解决问题的方法,对应用软件和系统软件的设计与开发有一定的启发和指导作用。“编译原理”是一门实践性很强的课程,要掌握这门课程中的思想,就必须要把所学到的知识应用于实践当中。而课程设计是将理论与实践相互联系的一种重要方式。 设计目的 课程设计是对学生的一种全面综合素质训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,设计题中的问题比平时的练习题要复杂很多,但也更接近实际。编译原理这门课程安排的课程设计的目的是旨在要求学生进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容,选择合适的数据逻辑结构解决问题,然后编制算法和程序完成设计要求,从而进一步培养学生独立思考问题、分析问题、解决实际问题的能力。 设计题目及要求 基于这个学期所学习的内容以及自己所掌握到的知识,本次我所要设计的题目是赋值语句的四元式生成。

要求: (1)设计语法制导生成赋值语句的四元式的算法; (2)编写代码并上机调试运行通过; (3)输入一赋值语句; (4)输出相应的表达式的四元式; 2.背景知识 语法制导翻译方法 语法制导翻译的方法就是为每个产生式配上一个翻译子程序(称语义动作或语义子程序),并在语法分析的同时执行这些子程序。语义动作是为产生式赋予具体意义的手段,它一方面指出了一个产生式所产生的符号串的意义,另一方面又按照这种意义规定了生成某种中间代码应做哪些基本动作。在语法分析的过程中,当一个产生式获得匹配(对于自顶向下分析)或用于规约(对于自底向上分析)时,此产生式相应的语义子程序就进入工作,完成既定的翻译任务。语法制导翻译分为自底向上语法制导翻译和自顶向下语法制导翻译。 属性文法 属性文法是编译技术中用来说明程序语言语义的工具,也是当前实际应用中比较流行的一种语义描述方法。属性是指与文法符号的类型和值等有关的一些信息,在编译中用属性描述处理对象的特征。属性文法是一种

(精选)编译原理期末考试题目及答案

一、填空题(每空2分,共20分) 1.编译程序首先要识别出源程序中每个单词,然后再分析每个句子并翻译其意义。 2.编译器常用的语法分析方法有自底向上和自顶向下两种。 3.通常把编译过程分为分析前端与综合后端两大阶段。词法、语法和语义分析是对源程序的分析,中间代码生成、代码优化与目标代码的生成则是对源程序的综合。 4.程序设计语言的发展带来了日渐多变的运行时存储管理方案,主要分为两大类,即静态存储分配方案和动态存储分配方案。 5.对编译程序而言,输入数据是源程序,输出结果是目标程序。 1.计算机执行用高级语言编写的程序主要有两种途径:解释和编译。 2.扫描器是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。 3.自下而上分析法采用移进、归约、错误处理、接受等四种操作。 4.一个LL(1)分析程序需要用到一张分析表和符号栈。 5.后缀式abc-/所代表的表达式是a/(b-c)。 二、单项选择题(每小题2分,共20分) 1.词法分析器的输出结果是__C。 A.单词的种别编码B.单词在符号表中的位置 C.单词的种别编码和自身值D.单词自身值 2.正规式 M 1 和 M 2 等价是指__C_。 A. M1和M2的状态数相等B. M1和M2的有向边条数相等 C. M1和M2所识别的语言集相等 D. M1和M2状态数和有向边条数相等 3.文法G:S→xSx|y所识别的语言是_C____。 A. xyx B. (xyx)* C.xnyxn(n≥0) D. x*yx* 4.如果文法G是无二义的,则它的任何句子α_A____。 A.最左推导和最右推导对应的语法树必定相同B.最左推导和最右推导对应的语法树可能不同 C.最左推导和最右推导必定相同D.可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握____D__。 A.源程序B.目标语言 C.编译方法 D.以上三项都是 6.四元式之间的联系是通过__B___实现的。 A.指示器B.临时变量C.符号表 D.程序变量 7.表达式(┐A∨B)∧(C∨D)的逆波兰表示为__B___。 A.┐AB∨∧CD∨B.A┐B∨CD∨∧C. AB∨┐CD∨∧ D.A┐B∨∧CD∨8. 优化可生成__D___的目标代码。 A.运行时间较短B.占用存储空间较小 C.运行时间短但占用内存空间大 D.运行时间短且占用存储空间小 9.下列___C___优化方法不是针对循环优化进行的。 A. 强度削弱 B.删除归纳变量C.删除多余运算 D.代码外提 10.编译程序使用_B_区别标识符的作用域。 A. 说明标识符的过程或函数名B.说明标识符的过程或函数的静态层次 C.说明标识符的过程或函数的动态层次 D. 标识符的行号 三、判断题(对的打√,错的打×,每小题1分,共10分) 2.一个有限状态自动机中,有且仅有一个唯一的终态。x

编译原理复习题及参考答案

中南大学网络教育课程考试复习题及参考答案 编译原理 一、判断题: 1.一个上下文无关文法的开始符,可以是终结符或非终结符。 ( ) 2.一个句型的直接短语是唯一的。 ( ) 3.已经证明文法的二义性是可判定的。 ( ) 4.每个基本块可用一个DAG表示。 ( ) 5.每个过程的活动记录的体积在编译时可静态确定。 ( ) 6.2型文法一定是3 型文法。 ( ) 7.一个句型一定句子。 ( ) 8.算符优先分析法每次都是对句柄进行归约。 ( ) 9.采用三元式实现三地址代码时,不利于对中间代码进行优化。 ( ) 10.编译过程中,语法分析器的任务是分析单词是怎样构成的。 ( ) 11.一个优先表一定存在相应的优先函数。 ( ) 12.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。 ( ) 13.递归下降分析法是一种自下而上分析法。 ( ) 14.并不是每个文法都能改写成 LL(1)文法。 ( ) 15.每个基本块只有一个入口和一个出口。 ( ) 16.一个 LL(1)文法一定是无二义的。 ( ) 17.逆波兰法表示的表达试亦称前缀式。 ( ) 18.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。 ( ) 19.正规文法产生的语言都可以用上下文无关文法来描述。 ( ) 20.一个优先表一定存在相应的优先函数。 ( ) 21.3型文法一定是 2型文法。 ( ) 22.如果一个文法存在某个句子对应两棵不同的语法树,则文法是二义性的。 ( ) 二、填空题: 1.( )称为规范推导。 2.编译过程可分为(),(),(),()和()五个阶段。 3.如果一个文法存在某个句子对应两棵不同的语法树,则称这个文法是()。 4.从功能上说,程序语言的语句大体可分为()语句和()语句两大类。 5.语法分析器的输入是(),其输出是()。 6.扫描器的任务是从()中识别出一个个()。 7.符号表中的信息栏中登记了每个名字的有关的性质,如()等等。 8.一个过程相应的DISPLAY表的内容为()。 9.一个句型的最左直接短语称为句型的()。 10.常用的两种动态存贮分配办法是()动态分配和()动态分配。 11.一个名字的属性包括( )和( )。 12.常用的参数传递方式有(),()和()。 13.根据优化所涉及的程序范围,可将优化分成为(),()和()三个级别。 14.语法分析的方法大致可分为两类,一类是()分析法,另一类是()分析法。 15.预测分析程序是使用一张()和一个()进行联合控制的。 16.常用的参数传递方式有(),()和()。 17.一张转换图只包含有限个状态,其中有一个被认为是()态;而且实际上至少要有一个()态。 18.根据优化所涉及的程序范围,可将优化分成为(),()和()三个级别。 19.语法分析是依据语言的()规则进行。中间代码产生是依据语言的()规则进行的。 20.一个句型的最左直接短语称为句型的()。 21.一个文法G,若它的预测分析表M不含多重定义,则该文法是()文法。 22.对于数据空间的存贮分配, FORTRAN采用( )策略, PASCAL采用( )策略。

编译原理课程设计 C语言编译器的实现

编译原理课程设计报告 设计题目编译代码生成器设计 学生姓名 班级 学号 指导老师 成绩

一、课程设计的目的 编译原理课程兼有很强的理论性和实践性,是计算机专业的一门非常重要的专业基础课程,它在系统软件中占有十分重要的地位,是计算机专业学生的一门主修课。为了让学生能够更好地掌握编译原理的基本理论和编译程序构造的基本方法和技巧,融会贯通本课程所学专业理论知识,提高他们的软件设计能力,特设定该课程的课程设计,通过设计一个简单的PASCAL语言(EL语言)的编译程序,提高学生设计程序的能力,加深对编译理论知识的理解与应用。 二、课程设计的要求 1、明确课程设计任务,复习编译理论知识,查阅复印相关的编译资料。 2、按要求完成课程设计内容,课程设计报告要求文字和图表工整、思路清晰、算法正 确。 3、写出完整的算法框架。 4、编写完整的编译程序。 三、课程设计的内容 课程设计是一项综合性实践环节,是对平时实验的一个补充,课程设计内容包括课程的主要理论知识,但由于编译的知识量较复杂而且综合性较强,因而对一个完整的编译程序不适合平时实验。通过课程设计可以达到综合设计编译程序的目的。本课程的课程设计要求学生编写一个完整的编译程序,包括词法分析器、语法分析器以及实现对简单程序设计语言中的逻辑运算表达式、算术运算表达式、赋值语句、IF语句、While语句以及do…while语句进行编译,并生成中间代码和直接生汇编指令的代码生成器。 四、总体设计方案及详细设计 总体设计方案: 1.总体模块 主程序 词法分析程序语法分析 程序 中间代码 生成程序

2. 表2.1 各种单词符号对应的种别码 单词符号种别码单词符号种别码bgin 1 :17 If 2 := 18 Then 3 < 20 wile 4 <> 21 do 5 <= 22 end 6 > 23 lettet(letter|digit)* 10 >= 24 dight dight* 11 = 25 + 13 ;26 —14 ( 27 * 15 ) 28 / 16 # 0 详细设计: 4.1界面导入设计 (1)一共三个选项: ①choice 1--------cifafenxi ②choice 2--------yufafenxi ③choice 3--------zhongjiandaima (2)界面演示 图一

期末考试编译原理试卷及答案

一. 填空题(每空2分,共20分) 1. 不同的编译程序关于数据空间的存储分配策略可能不同,但大部分编译中采用的方案有两种:静 态存储分配方案和动态存储分配方案,而后者又分为(1) 和 (2) 。 2. 规范规约是最(3)规约。 3. 编译程序的工作过程一般划分为5个阶段:词法分析、(4) 、语义分析与中间代码生成,代码优化及(5) 。另外还有(6)和出错处理。 4.表达式x+y*z/(a+b)的后缀式为 (7) 。 5.文法符号的属性有综合属性和 (8)。 6.假设二位数组按行存放,而且每个元素占用一个存储单元,则数组a[1..15,1..20]某个元素a[i ,j]的地址 计算公式为(9)。 7.局部优化是局限于一个(10)范围内的一种优化。 二. 选择题(1-6为单选题,7-8为多选题,每问2分,共20分) 1. 一个上下文无关文法G 包括四个组成部分:一组终结符,一组非终结符,一个( ),以及一组 ( )。 A . 字符串 B . 产生式 C . 开始符号 D . 文法 2.程序的基本块是指( )。 A . 一个子程序 B . 一个仅有一个入口和一个出口的语句 C . 一个没有嵌套的程序段 D . 一组顺序执行的程序段,仅有一个入口和一个出口 3. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于( )分析方法。 A . 自左向右 B . 自顶向下 C . 自底向上 D . 自右向左 4.在通常的语法分析方法中,( )特别适用于表达式的分析。 A . 算符优先分析法 B . LR 分析法 C . 递归下降分析法 D . LL (1)分析法 5.经过编译所得到的目标程序是( )。 A . 四元式序列 B . 间接三元式序列 C . 二元式序列 D . 机器语言程序或汇编语言程序 6. 一个文法所描述的语言是( );描述一个语言的文法是( )。 A . 唯一的 B . 不唯一的 C . 可能唯一,也可能不唯一 7. 如果在文法G 中存在一个句子,当其满足下列条件( )之一时,则称该文法是二义文法。 A . 其最左推导和最右推导相同 B . 该句子有两个不同的最左推导 C . 该句子有两个不同的最右推导 D . 该句子有两棵不同的语法树

编译原理习题及答案(整理后)

第一章 1、将编译程序分成若干个“遍”是为了。 b.使程序的结构更加清晰 2、构造编译程序应掌握。 a.源程序b.目标语言 c.编译方法 3、变量应当。 c.既持有左值又持有右值 4、编译程序绝大多数时间花在上。 d.管理表格 5、不可能是目标代码。 d.中间代码 6、使用可以定义一个程序的意义。 a.语义规则 7、词法分析器的输入是。 b.源程序 8、中间代码生成时所遵循的是- 。 c.语义规则 9、编译程序是对。 d.高级语言的翻译 10、语法分析应遵循。 c.构词规则 二、多项选择题 1、编译程序各阶段的工作都涉及到。 b.表格管理c.出错处理 2、编译程序工作时,通常有阶段。 a.词法分析b.语法分析c.中间代码生成e.目标代码生成 三、填空题 1、解释程序和编译程序的区别在于是否生成目标程序。 2、编译过程通常可分为5个阶段,分别是词法分析、语法分析中间代码生成、代码优化和目标代码生成。 3、编译程序工作过程中,第一段输入是源程序,最后阶段的输出为标代码生成程序。 4、编译程序是指将源程序程序翻译成目标语言程序的程序。

一、单项选择题 1、文法G:S→xSx|y所识别的语言是。 a. xyx b. (xyx)* c. x n yx n(n≥0) d. x*yx* 2、文法G描述的语言L(G)是指。 a. L(G)={α|S+?α , α∈V T*} b. L(G)={α|S*?α, α∈V T*} c. L(G)={α|S*?α,α∈(V T∪V N*)} d. L(G)={α|S+?α, α∈(V T∪V N*)} 3、有限状态自动机能识别。 a. 上下文无关文法 b. 上下文有关文法 c.正规文法 d. 短语文法 4、设G为算符优先文法,G的任意终结符对a、b有以下关系成立。 a. 若f(a)>g(b),则a>b b.若f(a)

编译原理论文

《编译原理》课程论文 编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都配有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。从功能上讲,一个编译程序就是一个语言翻译程序。语言翻译程序把一种源语言书写的程序翻译成另一种目标语言的等价程序,所以总的说编译程序是一种翻译程序,其源程序是高级语言,目标语言程序是低级语言。 编译程序完成从源程序到目标程序的翻译工作,是一个复杂的整体的过程。从概念上来讲,一个编译程序的整个工作过程是划分成几个阶段进行的,每个阶段将源程序的一种表示形式转换成另一种表示形式,各个阶段进行的操作在逻辑上是紧密连接在一起的。一般一个编译过程是词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成。 编写编译器的原理和技术具有十分普遍的意义,以至于在每个计算机工作者的职业生涯中,本书中的原理和技术都会反复用到。在这本书中,向我们介绍了文法的概念,在讲词法分析的章节中讲述了构造一个有穷自动机的方法,以及如何将一个不确定的有穷自动机转化成确定的有穷自动机和有穷自动机的最小化等方法。 词法分析相对来说比较简单。可能是词法分析程序本身实现起来很简单吧,很多没有学过编译原理的人也同样可以写出各种各样的词法分析程序。不过编译原理在讲解词法分析的时候,重点把正则表达式和自动机原理加了进来,然后以一种十分标准的方式来讲解词法分析程序的产生。这样的做法道理很明显,就是要让词法分析从程序上升到理论的地步。 词法分析中的重点是有穷自动机DFA的生成以及DFA和正规式与正规文法的关系。还要熟练掌握NFA转换为DFA的方法及DFA的化简。 词法分析的核心应该是构建DFA,最后维护一个状态转移表。通过转态转移的结果来识别词性。DFA的思想和字典树很像。NFA通过求每个状态的闭包后构造出的自动机与DFA等价。正则表达式闭包,连接,或三种操作都有相应的NFA与其等价。所以正则表达式==NFA==DFA。DFA状态最小化算法化简DFA。LL(1)文法主要就是根据FIRST集判断向哪条路径走,来避免回溯;LR(0)文法构造项

相关主题
文本预览
相关文档 最新文档