admin 管理员组

文章数量: 1184232


2025年1月1日发(作者:writeprocessmemory被hook)

编译原理考试陈火旺(含答案)

编译原理试题 A (2003.12.4)

一、回答下列问题:(30 分)

1.(6分)对于下面程序段

programtest(input,output)

vari,j:integer;

procedureCAL(x,y:integer);

begin

y:=y*y;x:=x-y;y:=y-x

end;

begin

i:=2;j:=3;CAL(i,j)

writeln(j)

end.

若参数传递的方法分别为(1) 传值、(2) 传地址,(3)传名,请写出

程序执行的输出结果。

2.(6分)计算文法G(M)的每个非终结符的FIRST和FOLLOW集合,

并判断该文

法是否是LL(1) 的,请说明理由。

G(M):

M→TB

T→Ba|

B→Db|eT|

D→d|

3. (4分)考虑下面的属性文法

产生式语义规则

S→ABC B.u:=S.u

A.u:=

B.v+

C.v

S.v:=A.v

A→a A.v:=3*A.u

B→b B.v:=B.u

C→c C.v:=1

(1)画出字符串abc的语法树;

(2)对于该语法树,假设S.u的初始值为5,属性计算完成后,S.v

的值为多少?

4.(4分)运行时的DISPLAY表的内容是什么?它的作用是什么?

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

1

A:=B*C

D:=E+A

G:=B+C

H:=G*D

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

6.(5分)写出表达式a+b*(c-d)对应的逆波兰式、三元式序列和抽

象语法树。二、(8分)构造一个DFA,它接受={a,b}上所有包含ab的

字符串。

三、(6 分)写一个文法使其语言为L(G)={ a n b n c m|m,n≥1,n

为奇数,m为偶数}。

四、(8分)对于文法G(S):

S bMb

M(L|a

LMa)

1.写出句型b(Ma)b的最右推导并画出语法树。

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

五、(12 分)对文法G(S):

S→a|^|(T)

T→T,S|S

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

(2)构造算符优先表;

(3)是算符优先文法吗?

(4)构造优先函数。

六、(8分)设某语言的do-while 语句的语法形式为

S doS (1)WhileE

其语义解释为:

S(1)的代码

E的代码假

2

针对自下而上的语法分析器,按如下要求构造该语句的翻译模式,

将该语句翻译成四元式:

(1)写出适合语法制导翻译的产生式;

(2)写出每个产生式对应的语义动作。

七、(10 分)将语句

whileC>0doifA B=0thenC:=C+DelseC:=C*D

翻译成四元式。

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

T1:=3

T2:=A*B

T3:=9+T1

M:=A*B

T4:=C-D

L:=T3*T4

T2:=C+D

N:=T2

1.画出DAG图;

2.设L,M,N是出基本块后的活跃变量,请给出优化后的四元式

序列。

九、(8 分)文法G(S)及其LR分析表如下,请给出串baba#的分析

过程。

(1)S→DbB (2)D →d (3)D →ε

(4)B→a (5)B →Bba (6)B →ε

LR分析表

ACTION GOTO

b D a # S B D

0 r3 s3 1 2

1 acc

2s4

3r2

4 r6 S

5 r

6 6

5 r4 r4

6 s

7 r1

7 S8

8 r5 r5

(注:答案格式为步骤状态符号输入串)

3

编译原理试题 A (2003.12.4)

一、回答下列问题:(30 分)

1.(6分)对于下面程序段

programtest(input,output)

vari,j:integer;

procedureCAL(x,y:integer);

begin

y:=y*y;x:=x-y;y:=y-x

end;

begin

i:=2;j:=3;CAL(i,j)

writeln(j)

end.

若参数传递的方法分别为(1)传值、(2)传地址,(3)传名,请写出

程序执行的输出结果。

答:(1)3 (2)16 (3)16 (每个值2分)

2.(6分)计算文法G(M)的每个非终结符的FIRST和FOLLOW集合,

并判断该文法是否是LL(1)的,

请说明理由。

G(M):

M→TB

T→Ba|

B→Db|eT|D→

d|

解答:

计算文法的FIRST和FOLLOW集合:(4分)

FIRST(M)={a ,b,e,d,} FIRST(T)={a ,b,e,d,}

FIRST(B)={b ,e,d,} FIRST(D)={d ,}

FOLLOW(M)={#} FOLLOW(T)={a ,b,e,d,#}

FOLLOW(B)={a ,#} FOLLOW(D)={b}

检查文法的所有产生式,我们可以得到:

4

1.该文法不含左递归,

2.该文法中每一个非终结符M,T,B,D的各个产生式的候选首

符集两两不相

交。

3.该文法的非终结符T、B和D,它们都有候选式,而且

FIRST(T)∩FOLLOW(T)={a ,b,e,d}≠

所以该文法不是LL(1) 文法。(2分)

3.(4分)考虑下面的属性文法

产生式语义规则

S→ABC B.u:=S.u

A.u:=

B.v+

C.v

S.v:=A.v

A→a A.v:=3*A.u

B→b B.v:=B.u

C→c C.v:=1

(3)画出字符串abc的语法树;

(4)对于该语法树,假设S.u的初始值为5,属性计算完成后,S.v

的值为多少。

答:(1)(2 分)

S

A B C

a b c

(2)S.v 的值为18(2 分)

4.(4分)运行时的DISPLAY表的内容是什么?它的作用是什么?

答:DISPLAY表是嵌套层次显示表。每当进入一个过程后,在建

立它的活动记录区的同时建立一张嵌套层次显示表diaplay.假定现在进

入的过程层次为i,则它的diaplay表含有i+1个单元,自顶向下每个

单元依次存放着现行层、直接外层、?、直至最外层(主程序,0层)等

每层过程的最新活动记录的起始地址。通过DISPLAY表可以访问其外

层过程的变量。

5

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

A:=B*C

D:=E+A

G:=B+C

H:=G*D

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

答: 目标代码序列

LD R0 B

MUL R0 C

LD R1 E

ADD R1 R0

LD R0 B

ADD R0 C

MUL R0 R1

ST R0 H

6.(5分)写出表达式a+b*(c-d)对应的逆波兰式、三元式序列和抽

象语法树。答:逆波兰式:(abcd-*+)(1 分)

三元式序列:(2 分)

OPARG1 ARG2

(1) - c d

(2) * b (1)

(3) + a (2)

抽象语法树:(2分)

+

*

-

a

b

c d

二、(8分)构造一个DFA,它接受={a,b}上所有包含ab的字符

串。

答:

6

(2分)构造相应的正规式:(a|b)*ab(a|b)*

(3分)

a a

0 1 2 3

a b

b b

(3分)确定化:

I I0

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

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

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

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

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

b b

b a

a a a a

0 1 2

a b b

b

最小化:

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

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

b a a

a b

0 1 3

4 5 6

I1

{1,2}

{1,2,4,5,6}

{1,2}

{1,2,5,6}

{1,2,4,5,6}

{1,2,5,6}

3 4 5

三、(6

b nnm

分)写一个文法使其语言为L(G)={abc|m,n≥1,n为奇数,m为偶

数}。

答:

文法G(S):

7

S AC

A aaAbb|ab

CccCcc|cc

四、(8分)对于文法G(S):

S bMb

M(L|a

LMa)

1.写出句型b(Ma)b的最右推导并画出语法树。

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

1.(4 分) S

S bMb b(Lb b(Ma)b

2.(4 分)

短语:Ma) ,(Ma) ,b(Ma)b 直接短语:Ma)

句柄:Ma) b M b

( TL

M a )

五、(12 分)对文法G(S):

S→a|^|(T)

T→T,S|S

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

(2)构造算符优先表;

(3)是算符优先文法吗?

(4)构造优先函数。

答:

(1)(4 分)

FIRSTVT(S) {a,^,(}

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

LASTVT(S) {a,^,)}

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

(2)(4 分)

a ^ ( ) ,

8

a > >

^ > >

( < < < = <

) > >

, < < < > >

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

关系。(1分)

(4)优先函数(3分)

a ^ ( ) ,

F 4 4 2 4 4

G 5 5 5 2 3

六、(8分)设某语言的do-while 语句的语法形式为

S doS (1)WhileE

其语义解释为:

S(1)的代码

E的代码

针对自下而上的语法分析器,按如下要求构造该语句的翻译模式,

将该语句翻译成四元式:

(1)写出适合语法制导翻译的产生式;

(2)写出每个产生式对应的语义动作。答:

(1).适合语法制导翻译的文法(4分)

G(S):

R do

U RS(1)While

S UE

(2).(4 分)

R do

{:=NXQ }

9

U RS(1)While

{:=;BACKPATCH(

,NXQ)}

S UE

{BACKPATCH(,);:=

}

答案二:

(1)S doM 1 S(1)WhileM 2 E

M ε(4 分)

(2) M ε{:=NXQ} ( 4分)

S doM 1 S(1)WhileM 2 E

{

BACKPATCH(S(1).CHAIN,M );

BACKPATCH(,M );

:=

}

七、(10 分)将语句

whileC>0doifA B=0thenC:=C+DelseC:=C*D

翻译成四元式。

答:

100(j>,C,0,102)

101(j,-,-,112)

102(jnz,A,-,106)

103(j,-,-,104)

104(j=,B,0,106)

105(j,-,-,109)

106(+,C,D,T1)

107(:=,T1,-,C)

108(j,-,-,100)

109(*,C,D,T2)

110(:=,T2,-,C)

10

111(j,-,-,100)

112

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

T1:=3

T2:=A*B

T3:=9+T1

M:=A*B

T4:=C-D

L:=T3*T4

T2:=C+D

N:=T2

3.画出DAG图;

4.设L,M,N是出基本块后的活跃变量,请给出优化后的四元式

序列。答:

1.(6 分)

L n9

*

T2,M n4T4 T2,N n8 n10

* - +

n1 n2 n3 n5 n6 n7

T1 T3

3 A B12 C D

2.(4

分)M:=A*BS1

:=C-

DL:=12*S1N:

=C+D

九、(8分)文法G(S)及其LR分析表如下,请给出串baba#的分析

过程。

(1)S →DbB (2)D →d (3)D →ε

(4)B →a (5)B →Bba (6)B →ε

LR分析表

11

ACTION GOTO

b D a # S B D

0r3 s3 1 2 1acc

2s4

3r2

4r6 S5 r6 6

5r4 r4

6s7 r1

7S8

8r5 r5

解答:

步骤状态符号输入串

0 0 # baba#

1 02 #D baba#

2 024 #Db aba#

3 0245 #Dba ba#

4 0246 #DbB ba#

5 02467 #DbBb a#

6 024678 #DbBba #

7 0246 #DbB #

8 01 #S # acc

12


本文标签: 语法 文法 产生 翻译