编译原理汇总 2.docx

上传人:b****3 文档编号:5268154 上传时间:2022-12-14 格式:DOCX 页数:25 大小:154.28KB
下载 相关 举报
编译原理汇总 2.docx_第1页
第1页 / 共25页
编译原理汇总 2.docx_第2页
第2页 / 共25页
编译原理汇总 2.docx_第3页
第3页 / 共25页
编译原理汇总 2.docx_第4页
第4页 / 共25页
编译原理汇总 2.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

编译原理汇总 2.docx

《编译原理汇总 2.docx》由会员分享,可在线阅读,更多相关《编译原理汇总 2.docx(25页珍藏版)》请在冰豆网上搜索。

编译原理汇总 2.docx

编译原理汇总2

《编译原理》考试试题及答案(汇总)

2.考虑文法G[S]:

S→(T)|a+S|a

T→T,S|S

消除文法的左递归及提取公共左因子。

解:

消除文法G[S]的左递归:

S→(T)|a+S|a

T→ST′

T′→,ST′|ε

提取公共左因子:

S→(T)|aS′

S′→+S|ε

T→ST′

T′→,ST′|ε

3.试为表达式w+(a+b)*(c+d/(e-10)+8)写出相应的逆波兰表示。

解:

wab+cde10-/+8+*+

4.按照三种基本控制结构文法将下面的语句翻译成四元式序列:

while(A

{

if(A≥1)C=C+1;

elsewhile(A≤D)

A=A+2;

}。

解:

该语句的四元式序列如下(其中E1、E2和E3分别对应A<C∧B<D、A≥1和A≤D,并且关系运算符优先级高):

100(j<,A,C,102)

101(j,_,_,113)

102(j<,B,D,104)

103(j,_,_,113)

104(j=,A,1,106)

105(j,_,_,108)

106(+,C,1,C)

107(j,_,_,112)

108(j≤,A,D,110)

109(j,_,_,112)

110(+,A,2,A)

111(j,_,_,108)

112(j,_,_,100)

113

五.计算题(10分)

四、简答题:

1.写一个文法G,使其语言为不以0开头的偶数集。

3.已知文法G(S)

S→bAa

  A→(B|a

B→Aa)

 写出句子b(aa)b的规范归约过程。

4.考虑下面的程序:

procedure p(x,y,z);

begin

y:

=x+y;

z:

=z*z;

end

begin

A:

=2;

B:

=A*2;

P(A,A,B);

PrintA,B

end.

试问,若参数传递的方式分别采用传地址和传值时,程序执行后输出A,B的值是什么?

7.已知文法G(S)

S→BA

A→BS|d

B→aA|bS|c

的预测分析表如下

a

b

c

d

#

S

S→BA

S→BA

S→BA

A

A→BS

A→BS

A→BS

A→d

B

B→aA

B→bS

B→c

给出句子adccd的分析过程。

8.写一个文法G,使其语言为L(G)={albmclanbn|l>=0,m>=1,n>=2}

9.已知文法G(S):

S→a|(T)

T→T,S|S

的优先关系表如下:

关系

a

a

-

-

.>

.>

<.

<.

=.

<.

-

-

.>

.>

<.

<.

.>

.>

请计算出该优先关系表所对应的优先函数表。

15.考虑下面的程序:

procedurep(x,y,z);

begin

y:

=y+z;

z:

=y*z+x

end;

begin

a:

=2;

b:

=3;

p(a+b,b,a);

printa

end.

试问,若参数传递的方式分别采用传地址和传值时,程序执行后输出a的值是什么?

16.写出表达式a+b*(c-d)/e的逆波兰式和三元序列。

20.考虑下面的程序:

procedure p(x,y,z);

begin

y:

=y+2;

z:

=z+x;

end

begin

a:

=5;

b:

=2;

p(a+b,a-b,a);

printa

end.

试问,若参数传递的方式分别采用传地址和传值时,程序执行后输出a的值是什么?

22.写出表达式a:

=(b+c)*e+(b+c)/f的逆波兰式和三元序列。

24.已知文法G[S]

S→S*aF|aF|*aF

F→+aF|+a

消除文法左递归和提公共左因子。

25.符号表的作用是什么?

符号表查找和整理技术有哪几种?

五、计算题:

1.设文法G(S):

S→^|a|(T)

T→T,S|S

⑴消除左递归;

⑵构造相应的FIRST和FOLLOW集合;

⑶构造预测分析表

3.设文法G(S):

S→(T)|a

T→T+S|S

(1)计算FIRSTVT和LASTVT;

(2)构造优先关系表。

5.把语句

whilea<10do

ifc>0thena:

=a+1

elsea:

=a*3-1;

翻译成四元式序列。

6.设有基本块

  D:

=A-C

  E:

=A*C

  F:

=D*E

  S:

=2

  T:

=A-C

Q:

=A*C

  G:

=2*S

  J:

=T*Q

K:

=G*5

  L:

=K+J

M:

=L

  假设基本块出口时只有M还被引用,请写出优化后的四元序列。

7.已知文法G(S)

S→a|^|(T)

T→T,S|S

(1)给出句子(a,(a,a))的最左推导;

(2)给出句型((T,S),a)的短语,直接短语,句柄。

9.已知文法G(S)

  S→aAcBe

  A→Ab|b

  B→d

  

(1)给出句子abbcde的最左推导及画出语法树;

  

(2)给出句型aAbcde的短语、素短语。

10.设文法G(S):

S→(T)|aS|a

T→T,S|S

⑴消除左递归和提公共左因子;

⑵构造相应的FIRST和FOLLOW集合;

⑶构造预测分析表。

11.把语句

ifX>0∨Y<0

thenwhileX>0doX:

=A*3

elseY:

=B+3;

翻译成四元式序列。

12.已知文法G(S)

 E→E+T|T

 T→T*F|F

 F→(E)|i

 

(1)给出句型(i+i)*i+i的最左推导及画出语法树;

 

(2)给出句型(E+T)*i+F的短语,素短语和最左素短语。

13.设文法G(S):

S→T|S∨T

T→U|T∧U

U→i|-U

(1)计算FIRSTVT和LASTVT;

(2)构造优先关系表。

《编译原理》期末试题(三)

2、写出表达式a=b*c+b*d对应的逆波兰式、四元式序列和三元式序列。

答:

逆波兰式:

abc*bd*+:

=

四元式序列:

三元式序列:

OPARG1ARG2

(1)(*,b,c,t1)

(1)(*b,c)

(2)(*,b,d,t2)

(2)(*b,d)

(3)(+,t1,t2,t3)(3)(+

(1),

(2))

(4)(:

=,t3,/,a)(4)(:

=(3),a)

3、对于文法G(S):

答:

1)

2)短语:

Ma),(Ma),b(Ma)b

直接短语:

Ma)句柄:

Ma)

2233

 

三、

设将文法G改写成等价的LL

(1)文法,并构造预测分析表。

G:

S→S*aT|aT|*aT;

T→+aT|+a

解:

消除左递归后的文法G’:

S→aTS’|*aTS’

S’→*aTS’|ε

T→+aT|+a

提取左公因子得文法G’’:

S→aTS’|*aTS’

S’→*aTS’|ε

T→+aT’

T’→T|ε

Select(S→aTS’)={a}

Select(S→*aTS’)={*}

Select(S→aTS’)∩Select(S→*aTS’)=Ф

Select(S’→*aTS’)={*}

Select(S’→ε)=Follow(s’)={#}

Select(S’→*aTS’)∩Select(S’→ε)=Ф

Select(T→+aT’)={+}

Select(T’→T)=First(T)={+}

Select(T’→ε)=Follow(T’)={*,#}

Select(T’→T)∩Select(T’→ε)=Ф

所以该文法是LL

(1)文法。

预测分析表:

*

+

a

#

S

→*aTS’

→aTS’

S’

→*aTS’

→ε

T

→+aT’

T’

→ε

→T

→ε

四、对文法G(S):

S→a|^|(T);T→T,S|S

答:

(1)

a

^

#

a

>

>

>

^

>

>

>

<

<

<

=

<

>

>

>

<

<

<

>

>

#

<

<

<

=

(2)是算符优先文法,因为任何两个终结符之间至多只有一种优先关系。

(2分)

(3)给出输入串(a,a)#的算符优先分析过程。

步骤

当前输入字符

剩余输入串

动作

1

#

a,a#

#<(移进

2

#(

a

a)#

3

#(a

a)#

a>,归约

4

#(N

a)#

(<,移进

5

#(N,

a

)#

6

#(N,a

#

a>)归约

7

#(N,N

#

>)归约

8

#(N

#

(=)移进

9

#(N)

#

 

)>#归约

10

#N

#

接受

四、对下面的文法G:

S→a|b|(T)

T→T,S|S

(1)消去文法的左递归,得到等价的文法G2;

(2)判断文法G2是否LL

(1)文法,如果是,给出其预测分析表。

(15)

G2:

S→a|b|(T)

T→ST’

T’→,ST’|ε

G2是LL

(1)文法。

a

b

#

S

S→a

S→b

S→(T)

T

T→ST’

T→ST’

T→ST’

T’

T’→ε

T’→,ST’

五、设有文法G[A]:

A→BCc|gDB

B→bCDE|ε

C→DaB|ca

D→dD|ε

E→gAf|c

(1)计算该文法的每一个非终结符的FIRST集和FOLLOW集;

(2)试判断该文法是否为LL

(1)文法。

(15)

FIRST

FOLLOW

A

B

C

D

E

A,b,c,d,g

b

A,c,d

D

C,g

A,c,d

C,d,g

A,b,c,g

是LL

(1)文法。

六、对表达式文法G:

E→E+T|T

T→T*F|F

F→(E)|I

(1)造各非终结符的FIRSTVT和LASTVT集合;

(2)构造文法的算符优先关系表。

(15)

FIRSTVT

LASTVT

E

T

F

*,+,(,i

*,(,i

(,i

*,+,),i

*,),i

),i

算符优先关系表

+

*

I

#

+

*

I

#

>

>

>

<

>

<

<

>

>

<

>

<

<

<

<

<

<

<

<

<

>

>

>

=

>

>

>

>

>

=

《编译原理》期末试题(六)

六对文法G[S]

 S→aSb|P

P→bPc|bQc

Q→Qa|a

(1)它是否是算符优先文法?

请构造算符优先关系表

(2)文法G[S]消除左递归、提取左公因子后是否是LL

(1)文法?

请证实。

答:

1.求出G[S]的FIRSTVT集和LASTVT集:

FIERSTVT(S)={a,b}LASTBVT(S)={b,c}

FIERSTVT(P)={b}LASTBVT(P)={c}

FIERSTVT(Q)={a}LASTBVT(Q)={a}

构造优先关系表为:

a

b

c

a

<>

<

>

b

<>

c

>

>

由于在优先关系中同时出现了aa以及bb,所以该文法不是算符优先文法。

2.消除左递归和提取左公因子后的文法为:

S→aSb|P

P→bP’

P’→Pc|Qc

Q→aQ’

Q’→aQ’|ε

求具有相同左部的两个产生式的Select集的交集:

Select(S→aSb)∩Select(S→P)={a}∩First(P)={a}∩{b}=Ф

Select(P’→Pc)∩Select(P’→Qc)=First(P)∩First(Q)={b}∩{a}=Ф

Select(Q’→aQ’)∩Select(Q’→ε)={a}∩Follow(Q)={a}∩{c}=Ф

所以修改后的文法是LL

(1)文法。

八已知源程序如下:

prod:

=0;

i:

=1;

whilei≤20do

begin

prod:

=prod+a[i]*b[i];

i:

=i+1

end;

试按语法制导翻译法将源程序翻译成四元式序列(设A是数组a的起始地址,B是数组b的起始地址;机器按字节编址,每个数组元素占四个字节)。

【答案:

九设有以下程序段

procedureP(x,y,z)

begin

Y:

=y*3;

Z:

=X+z;

end;

begin

a:

=5;b:

=2;

p(a*b,a,a);

print(a);

end

若参数传递的方法分别为

(1)传值、

(2)传地址、(3)传名,试问结果分别什么?

(1)传值5;

(2)传地址25;(3)传名45

《编译原理》期末试题(七)

5.(6分)对下列四元式序列生成目标代码:

A:

=B*C

D:

=E+F

G:

=A+D

H:

=G*2

其中,H是基本块出口的活跃变量,R0和R1是可用寄存器

答:

LDR0,B

MULR0,C

LDR1,E

ADDR1,F

ADDR0,R1

MULR0,2

STR0,H

四、对于文法G(E):

(8分)

ET|E+T

TF|T*F

F(E)|i

1.写出句型(T*F+i)的最右推导并画出语法树。

2.写出上述句型的短语,直接短语、句柄和素短语。

 

答:

1.(4分)

ETF(E)(E+T)(E+F)

(E+i)(T+i)(T*F+i)

2.(4分)

短语:

(T*F+i),T*F+i,T*F,i

直接短语:

T*F,i

句柄:

T*F

素短语:

T*F,i

五、设文法G(S):

(12分)

1.构造各非终结符的FIRSTVT和LASTVT集合;

2.构造优先关系表和优先函数。

(12分)

答:

(6分)

FIRSTVT(S)={i,+,),(}

FIRSTVT(A)={+,),(}

FIRSTVT(B)={),(}

LASTVT(S)={i,+,*,(}

LASTVT(A)={+,*,(}

LASTVT(B)={*,(}

优先关系表:

(3分)

i

+

*

i

>

<

<

<

+

>

>

<

<

>

>

>

>

<

<

<

*

>

>

>

优先函数:

(3分)

i

+

*

f

2

6

6

1

6

g

1

4

6

6

1

七、(8分)将语句

if(A0)thenwhileC>0doC:

=C+D

翻译成四元式。

(8分)

答:

100(j<,A,X,102)

101(j,-,-,109)

102(j>,B,0,104)

103(j,-,-,109)

104(j>,C,0,106)

105(j,-,-,109)

106(+,C,D,T1)

107(:

=,T1,-,C)

108(j,-,-,104)

109

(控制结构3分,其他5分)

八、(10分)设有基本块如下:

T1:

=S+R

T2:

=3

T3:

=12/T2

T4:

=S/R

A:

=T1-T4

T5:

=S+R

B:

=T5

T6:

=T5*T3

B:

=T6

(2)设A,B是出基本块后的活跃变量,请给出优化后的四元式序列。

答:

(2)四元式序列:

(4分)

T1:

=S+R

T4:

=S/R

A:

=T1-T4

B:

=T1*4

《编译原理》期末大题

1.设有如下文法G(S),试消除其左递归。

G(S):

S—>Ac|c

A—>Bb|b

B—>Sa|a

解:

S→abcS′|bcS′|cS′,S′→abcS′|

2.试构造与下面G(S)等价的无左递归的文法。

G(S):

S—>Sa|Nb|c

N—>Sd|Ne|f

解:

S→fN′bS′|cS′,S′→aS′|dN′bS′|

N′→eN′|

3.设有文法G(S):

S—>aBc|bAB

A—>aAb|b

B—>b|ε

①求各产生式的FIRST集,FOLLOW(A)和FOLLOW(B),以及各产生式的SELECT集。

②构造LL

(1)分析表,并分析符号串baabbb是否是。

解:

(1)FIRST(aBc)={a},FIRST(bAB)={b}FIRST(aAb)={a},A→b:

FIRST(A→b)={b},B→b:

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

FOLLOW(A)={b,#},FOOLOW(B)={c,#}

SELECT(S→aBc)={a},SELECT(S→bAB)={b},SELECT(A→aAb)={a},SELECT(A→b)={b},SELECT(B→b)={b},SELECT(B→

)={c,#}

因此,所得的LL

(1)分析表如表A-4所示。

表A-4LL

(1)分析表

输入

VN

输入符号

a

b

c

#

S

S→aBc

S→bAB

A

A→aAb

A→b

B

B→b

B→

B→

(2)分析符号串baabbb成功,baabbb是该文法的句子,如图A-16所示。

图A-16识别串baabbb的过程

4.对下列文法G(S):

S—>D(R)R—>R;P|P

P—>S|ID—>i

①计算文法G中每个非终结符的FIRSTVT集和LASTVT集。

②构造文法G的算符优先关系矩阵。

解:

(1)FIRSTVT(S)={(,i},FIRSTVT(D)={i},FIRSTVT(R)={;,(,i},FIRSTVT(P)={i,(},LASTVT(S)={)},LASTVT(D)={i},LASTVT(R)={;,),i},LASTVT(P)={i,)}

(2)算符优先矩阵,如表A-5所示。

表A-5优先矩阵

;

i

#

;

i

#

5.已知文法G(S):

S—>a|(T)

T—>T,S|S

①给出句子((a,a),a)的最左推导并画出语法树;②给出句型(T,a,(T))所有的短语、直接短语、素短语、最左素短语、句柄和活前缀。

解:

(1)最左推导:

S

(T)

(T,S)

(S,S)

(a,S)

(a,(T))

(a,(T,S))

(a,(S,S))

(a,(a,S))

(a,(a,a))

语法树:

如图A-16所示。

图A-16(a,(a,a))的语法树

(2)句型(T,a,(T))的短语、直接短语、素短语、最左素短语、句柄、活前缀及语法树(图A-17)。

短语:

a||T,a||(T)||T,a,(T)||(T,a,(T))

直接短语:

a||(T)

素短语:

a||(T)

最左素短语:

a

句柄:

a

活前缀:

||(||(T||(T,||(T,a

图A-17(T,a,(T))的语法树

四、综合题

1.已知文法G(E)

E→T|E+T

T→F|T*F

F→(E)|i

(1)给出句型(T*F+i)的最右推导;

(2)给出句型(T*F+i)的短语、简单短语、句柄、素短语、最左素短语。

解:

(1)最右推导:

E->T->F->(E)->(E+T)->(E+F)->(E+i)->(T+i)->(T*F+i)

(2)短语:

(T*F+i),T*F+i,T*F,i

简单短语:

T*F,i

句柄:

T*F

素短语:

T*F,i

最左素短语:

T*F

3.文法:

S->MH|a

H->LSo|ε

K->dML|ε

L->eHf

M->K|bLM

判断G是否为LL

(1)文法,如果是,构造LL

(1)分析表。

解:

各符号的FIRST集和FOLLOW集为:

 

各产生式SELECT集为:

SELECT

S->MH

{d,b,e,#,o}

S->a

{a}

H->LSo

{e}

H->ε

{#,f,o}

K->dML

{d}

K->ε

{e,#,o}

L->eHf

{e}

M->K

{d,e,#,o}

M->bLM

{b}

预测分析表

 

由于预测分析表中无多重入口,所以可判定文法是LL

(1)的。

4.对下面的文法G:

E->TE'

E'->+E|ε

T->FT'

T'->T|ε

F->PF'

F'->*F'|ε

P->(E)|a|b|^

(1)计算这个文法的每个非终结符的FIRST集和FOLLOW集。

(4分)

(2)证明这个方法是LL

(1)的。

(4分)

(3)构造它的预测分析表。

(2分)

解:

(1)计算这个文法的每个非终结符的FIRST集和FOLLOW集。

FIRST集合有:

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

FIRST(E')={+,ε}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1