您的当前位置:首页正文

大学《编译原理》期末试题含答案(七)

来源:好兔宠物网
大学《编译原理》期末试题含答案

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

1.什么是S-属性文法?什么是L-属性文法?它们之间有什么关系? 解答:

S-属性文法是只含有综合属性的属性文法。 (2分) L-属性文法要求对于每个产生式AX1X2…Xn,其每个语义规则中的每个属性或者是综合属性,或者是Xj的一个继承属性,且该属性仅依赖于:

(1) 产生式Xj的左边符号X1,X2…Xj-1的属性;

(2) A的继承属性。 (2分) S-属性文法是L-属性文法的特例。 (2分)

2.什么是句柄?什么是素短语?

一个句型的最左直接短语称为该句型的句柄。(3分)素短语是这样的一个短语,它至少包含一个终结符并且不包含更小的素短语。(3分)

3.划分程序的基本块时,确定基本块的入口语句的条件是什么? 解答:

(1)程序第一个语句,或

(2)能由条件转移语句或无条件转移语句转移到的语句,或 (3)紧跟在条件转移语句后面的语句。

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

答:DISPLAY表是嵌套层次显示表。每当进入一个过程后,在建立它的活动记录区的同时建立一张嵌套层次显示表diaplay.假定现在进入的过程层次为i,则它的diaplay表含有i+1个单元,自顶向下每个单元依次存放着现行层、直接外层、…、直至最外层(主程序,0层)等每层过程的最新活动记录的起始地址。通过DISPLAY表可以访问其外层过程的变量。

5.(6分)对下列四元式序列生成目标代码: A:=B*C D:=E+F G:=A+D H:=G*2

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

LD R0, B MUL R0, C LD R1, E ADD R1, F ADD R0, R1

MUL R0, 2 ST R0, H

二、设={0,1}上的正规集S由倒数第二个字符为1的所有字符串组成,请给出该字集对应的正规式,并构造一个识别该正规集的DFA。(8分)

答:

构造相应的正规式:(0|1)*1(0|1) (3分) NFA: (2分)

1 1

    1 0 1 2 3 4

0 0 确定化:(3分) I I0 I1 {0,1,2} {1,2} {1,2,3} {1,2,4} {1,2,3,4} {1,2} {1,2} {1,2,4} {1,2} {1,2,4} {1,2,3} {1,2,3} {1,2,3,4} {1,2,3} {1,2,3,4}

0

1 0 1 0 0 0 1 2 3 4

0 1 1 1 三、写一个文法使其语言为L(G)={ anbmambn | m,n≥1}。(6分) 答:文法G(S): S  aSb | B B  bBa | ba 四、对于文法G(E): (8分) E T F ET|E+T TF|T*F F(E)|i 1. 写出句型(T*F+i)的最右推导并画出语法树。 2. 写出上述句型的短语,直接短语、句柄和素短语。 答: 1. (4分) T ( E ) E + T T F * F i ETF(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分)

SSiA|AAAB|B B)A*|(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 g 1 4 6 6 六、设某语言的do-while语句的语法形式为 (9分) S  do S(1) While E

其语义解释为:

* > > > * 6 1

针对自下而上的语法分析器,按如下要求构造该语句的翻译模式: (1) 写出适合语法制导翻译的产生式; (2) 写出每个产生式对应的语义动作。 答:(1). 适合语法制导翻译的文法(3分) G(S): R do

UR S(1) While SU E (2). (6分) R do

{ R.QUAD:=NXQ } UR S(1) While { U.QUAD:=R.QUAD;

BACKPATCH(S.CHAIN, NXQ) } SU E

{ BACKPATCH(E.TC, U.QUAD); S.CHAIN:=E.FC }

答案二:

(1) S  do M1 S(1) While M2 E

M ε (3分)

(2) M ε { M.QUAD := NXQ } (6分)

S  do M1 S(1) While M2 E {

BACKPATCH(S(1).CHAIN, M2.QUAD); BACKPATCH(E.TC, M1.QUAD);

S.CHAIN:=E. FC

}

E的代码 假

S(1)的代码 真

七、(8分)将语句

if (A0) then while C>0 do C:=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

(1)画出DAG图;

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

答:(1) DAG如右图:(6分) n7 A n8 T6,B

_ *

n3 T1,T5, B n6 T4

/ + (2) 四元式序列:(4分)

T1:=S+R

n2 n1 n4 T2 n5 T3 T4:=S/R

A:=T1-T4 S R 3 4 B:=T1*4

九、(9分) 设已构造出文法G(S):

(1) S  BB (2) B  aB (3) B b

的LR分析表如下

状态 0 1 2 3 4 5 6 7 8 9 a s3 s6 s3 r3 s6 r2 ACTION b s4 s7 s4 r3 s7 r2 # acc r1 r3 r2 S 1 GOTO B 2 5 8 9

假定输入串为abab,请给出LR分析过程(即按照步骤给出状态,符号,输入串的变化过程)。 答:

步骤 状态 符号 输入串 0 0 # abab# 1 03 #a bab# 2 034 #ab ab# 3 038 #aB ab# 4 02 #B ab# 5 026 #Ba b# 6 0267 #Bab # 7 0269 #BaB # 8 025 #BB # 9 01 #S # acc

因篇幅问题不能全部显示,请点此查看更多更全内容