1、- 1 -二、概念题1、设有文法:PP+Q|QQQ*R|RR(P)|i(1)证明 Q*R+Q+Q 是它的一个句型。 (3 分)(2)给出 Q*R+Q+Q 的所有短语,直接短语和句柄。(4 分)(3)给出句子+*的最右推导。(4 分)(4)给出句子+*的最左推导。(4 分)2、设有文法:EE+T|T TT*F|F F(E)|i(1)证明 E+T*F 是它的一个句型。 (3 分)答案: ETF*(2)给出 E+T*F 的所有短语,直接短语和句柄。(4 分)短语: E+T*F, T*F,直接短语: T*F句柄: T*F(3)给出句子+*的最右推导。(4 分)3、写出表达式 a+b*(c-d)对应的逆
2、波兰式和三元式序列。答案:逆波兰式:(abcd-*+) - 2 -三元式序列:OP ARG1 ARG2(1) - c d(2) * b (1)(3) + a (2) 三、词法分析题给出下面语言的相应文法L1=anbnambm|n,m0答案: SAB|A|B|A aAb|ab B aBb|ab给出下面语言的相应文法L2=anbnci|n1,i0答案: S AB|B A a|aA B bBc|bc给出下面语言的相应文法L3=anbncm| m,n1,n 为奇数,m 为偶数。答案:文法 G(S):SAC AaaAbb/ab CccCcc/cc四、词法分析题- 3 -1、构造下面正规式相应的 DFA(
3、0|1)*|(11)*)*(要求:先将正规式转化为 NFA,再将 NFA 确定化,最小化)2、构造下面正规式相应的 DFA1(0|1)*101答案:I I0 I1 X A,B,C A,B,C B,C B,C,D B,C B,C B,C,D B,C,D B,C,E B,C,D B,C,E B,C B,C,D,y B,C,D,y B,C,E B,C,D3、构造一个 DFA,它接受 =a,b上所有包含 ab 的字符串。(要求:先将正规式转化为 NFA,再将 NFA 确定化,最小化)答案:(一)相应的正规式为(a|b)*ab(a|b)*(二) 与此正规式对应的 NFA 为状态转换矩阵为:- 4 - 最
4、小化:0,1,2 3,4,50, 2,1, 3,4,5所以此等价的 DFA 为:开始状态为 0 ,终态集为3 ,状态集为0,1,3 ,输入字母表是a,b 状态转换图如上。4、构造与正规式 b(a|b)*ba 等价的 DFA五、语法分析题1、对下面的文法 G:Expr- ExprExpr(Expr)|Var ExprTailExprTail- Expr|Varid VarTail VarTail(Expr) |baa0 1b3ba- 5 -(1) 构造 LL(1)分析表。 (12 分)答案:(1)FIRST(Expr)=_ , ( , id FIRST(ExprTail)=_ , FIRST(V
5、ar)=id FIRST(VarTail)= ( , FOLLOW(Expr)=# , ) FOLLOW(ExprTail) =# , ) FOLLOW(Var) =_ , # , ) FOLLOW(VarTail) =_ , # , ) (2) 给出对句子 idid(id)的分析过程。 (8 分)步骤 符号栈 输入串 所用产生式0 Expr id_ _id(id)1 # ExprTail Var id_ _id(id) ExprVar ExprTail2 # ExprTail VarTail id id_ _id(id) Varid VarTail3 # ExprTail VarTail _
6、 _id(id)4 # ExprTail _ _id(id) VarTail5 # Expr_ _ _id(id) ExprTail_ Expr6 # Expr _id(id)7 # Expr_ _id(id) Expr_Expr8 # Expr id(id)- 6 -9 # ExprTail Var id(id) ExprVar ExprTail10 # ExprTail VarTail id id(id) Varid VarTail11 # ExprTail VarTail (id) 12 # ExprTail )Expr( (id) VarTail(Expr)13 # ExprTail
7、)Expr (id)14 # ExprTail ) )Expr( (id) Expr(Expr)15 # ExprTail ) )Expr id)16 # ExprTail ) ) ExprTail Var id)ExpVar ExprTail17 # ExprTail ) )ExprTail VarTail id id) Varid VarTail18 # ExprTail ) )ExprTail VarTail )19 # ExprTail ) )ExprTail ) VarTail20 # ExprTail ) ) ) ExprTail21 # ExprTail ) )22 # Expr
8、Tail # ExprTail23 # # 分析成功2、对下面的文法 G:ETE- 7 -E+E|TFTTT|FPFF *F |P(E)|a|b|(1) 计算这个文法的每个非终结符的 FIRST 和 FOLLOW。 (8 分)答案: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)=
9、(,a,b,+,),#FOLLOW(P)=*,(,a,b,+,),#- 8 -(2) 证明这个文法是 LL(1)的。 (6 分)答案:考虑下列产生式:ETFPab|*|()FIRST(+E)FIRST()=+=FIRST(+E)FOLLOW(E)=+#,)=FIRST(T)FIRST()=(,a,b,=FIRST(T)FOLLOW(T)=(,a,b,+,),#=FIRST(*F)FIRST()=*=FIRST(*F)FOLLOW(F)=*(,a,b,+,),#=FIRST(E)FIRST(a) FIRST(b) FIRST()=所以,该文法式 LL(1)文法.(3) 构造它的预测分析表。 (6
10、 分)3、已知文法 GS 为: S-a|(T)T-T,S|S - 9 -消除文法 GS中的左递归,得文法 GS。 文法 GS是否为 LL(1)的?若是,给出它的预测分析表。4、对下面的文法 G:S S a T | a T | a TT a T | a(1) 消除该文法的左递归和提取左公因子;(2) 构造各非终结符的 FIRST 和 FOLLOW 集合;(3) 构造该文法的 LL(1)分析表,并判断该文法是否是 LL(1)的。答案:5、文法 G(S)及其 LR 分析表如下,请给出串 baba#的分析过程。- 10 -(1) S DbB (2) D d (3) D (4) B a (5) B Bb
11、a (6) B LR 分析表ACTION GOTOb D a # S B D0 r3 s3 1 21 acc2 s43 r24 r6 S5 r6 65 r4 r46 s7 r17 S88 r5 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 # acc11六、语法分析题考虑文法:SAS|b ASA|a(1) 列出这个文法的所有 LR(0) 项目。 (5 分)答案0.
12、1. 2. 3.SSSAS4. 5. 6. 7.Abb8. 9. 10. 11. aa(2)给出识别文法所有活前缀的 DFA。 (5 分)(3)求所有非终结符的 FOLLOW 集。 (5 分)(4)文法是 SLR 文法吗?若是,构造出它的 SLR 分析表,否则说明理由。 (5 分)不是 SLR 文法状态 3,6,7 有移进归约冲突状态 3:FOLLOW(S)=#不包含 a,b状态 6:FOLLOW(S)=#,a,b包含 a,b,;移进归约冲突无法消解状态 7:FOLLOW(A)=a,b包含 a,b;移进归约冲突消解所以不是 SLR 文法。七、证明题121、证明下面文法是 LL(1)的但不是 S
13、LR(1)的。SAaAb|BbBaAB首先该文法无左递归存在,没有公共左因子。其次:对于 SAaAb|BbBa FIRST(AaAb)=a FIRST(BbBa)=bFIRST(AaAb)FIRST(BbBa)=所以该文法是 LL(1)文法。(2)证明该文法不是 SLR 的。文法的 LR(0)项目集规范族为:I0=S.S S.AaAb S.BbBa A. B.I1= S S. I2= SA.aAb I3= SB.bBa I4= SAa.Ab A. I5= SBb.Ba B. I6= SAaA.b I7= SBbB.a I8= SAaAb. I9= SBbBa. 考察 I0:FOLLOW(A)=
14、a,b FOLLOW(B)=a,b FOLLOW(A)FOLLOW(B)= a,b产生规约-规约冲突。所以该文法不是 SLR(1)文法。2、证明下面文法是 SLR(1)但不是 LR(0)的。SAAAb|bBaBaAc|a|aAb13解:文法 GS:0:SA1:AAb2:AbBa3:BaAc4:Ba5:BaAb构造 LR(0)项目集规范族:状态 项目集 转换函数0 SAAAbAbBaGO0,A1GO0,A1GO0,b21 SAAAbACCEPTGO1,b32 AbBaBaAcBaBaAbGO2,B4GO2,a5GO2,a5GO2,a53 AAb R14 AbBa GO4,a65 BaAc GO5
15、,A714BaBaAbAAbAbBaR4GO5,A7GO5,A7GO5,b26 AbBa R27 BaAcBaAbAAbGO7,c8GO7,b9GO7,b98 BaAc R39 BaAbAAbR5R1状态 5 存在“归约移进”冲突,状态 9 存在“归约归约”冲突,因此该文法不是 LR(0)文法。状态 5:FOLLOW(B)a ,因此,FOLLOW(B)b状态 9:FOLLOW(B)a ,FOLLOW(A)#,b,c ,因此 FOLLOW(B)FOLLOW(A)状态 5 和状态 9 的冲突均可用 SLR(1)方法解决,构造 SLR(1)分析表如下:ACTION GOTO状态a b c # A B
16、150 S2 11 S3 ACCEPT2 S5 43 R1 R1 R14 S65 R4 S2 76 R2 R2 R27 S9 S88 R39 R5 R1 R1 R1该 SLR(1)分析表无重定义,因此该文法是 SLR(1)文法,不是 LR(0)文法。八、语义分析题1、将语句if (A0) then while (C0) do C:=C-D翻译成四元式答案:100 (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)161092、写出下面语句经语法制导翻译后所生成的四元式代码序列。 if xc do c:=c+1 else x:=x+5答案:假设初始为 100,则四元式代码序列为 100 if xc goto 104103 goto 109104 M:=C+1105 C:=M106 goto 102107 N:=X+5108 X:=N109