1、给出下面语言的相应文法。
L1={a n b n c i|n≥1,i≥0}从n,i的不同取值来把L1分成两部分:前半部分是anbn:A→aAb|ab后半部分是ci:B→Bc|ε所以整个文法G1[S]可以写为:G1(S):S→AB ;A→aAb|ab ;B→cB|ε3、构造一个DFA,它接受 ={a,b}上所有包含ab的字符串。
(要求:先将正规式转化为NFA,再将NFA确定化,最小化)4、对下面的文法G:E →TE’ E’→+E|ε T →FT’ T’→T|εF →PF’ F’ →*F’|ε P →(E)|a|b|∧(1)证明这个文法是LL(1)的。
(2)构造它的预测分析表。
(1)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')={(,a,b,^,+,),#}FOLLOW(P)={*,(,a,b,^,+,),#} (2)考虑下列产生式:'→+'→'→'→E E T T F F P E a b ||*|()|^||εεε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)+ * ( ) a b ^ # EE TE →'E TE →' E TE →' E TE →'E' '→+E E'→E ε'→E εTT F T →' T F T →' T F T →' T F T →' T' '→T ε'→T T '→T ε '→T T '→T T '→T T '→T εFF P F →'F P F →' F P F →' F P F →'F' '→F ε '→'F F * '→F ε '→F ε '→F ε '→F ε '→F ε '→F εPP E →() P a → P b → P →^5、考虑文法: S →AS|b A →SA|a (1)列出这个文法的所有LR(0) 项目。
0.'→⋅S S 1.'→⋅S S 2.S AS →⋅ 3.S A S →⋅ 4.S AS →⋅ 5.S b →⋅ 6.S b →⋅7.A SA →⋅8.A S A →⋅ 9.A SA →⋅ 10.A a →⋅ 11.A a →⋅ (2)给出识别文法所有活前缀的DFA 。
S A εSε ε ε ε aε ε εA S ε εb确定化:S A a b {0,2,5,7,10} {1,2,5,7,8,10} {2,3,5,7,10} {11} {6} {1,2,5,7,8,10} {2,5,7,8,10} {2,3,5,7,9,10} {11} {6} {2,3,5,7,10} {2,4,5,7,8,10} {2,3,5,7,10} {11} {6} {2,5,7,8,10} {2,5,7,8,10} {2,3,5,7,9,10} {11} {6} {2,3,5,7,9,10} {2,4,5,7,8,10} {2,3,5,7,10} {11} {6} {2,4,5,7,8,10}{2,5,7,8,10}{2,3,5,7,9,10}{11} {6} {11} φ φ φ φ {6} φφφφ0 15 7 61 112 3 48 9A SS A abS a A S b S A b a AA Sba ab b aDFA6、设有文法:P →P+Q|Q Q →Q*R|R R →(P)|i(1)证明Q*R+Q+Q 是它的一个句型。
(3分) P=>P+Q=>P+Q+Q=>Q+Q+Q=>Q*R+Q+Q(2)给出Q*R+Q+Q 的所有短语,直接短语和句柄。
(4分) 短语: Q*R,Q*R+Q,Q*R+Q+Q 直接短语: Q*R 句柄: Q*R (3)给出句子i+i*i的最右推导。
(4分) (4)给出句子i+i*i的最左推导。
(4分)7、设有文法:E →E+T|T T →T*F|F F →(E)|i(1)证明E+T*F 是它的一个句型。
(3分)E E T E T F ⇒+⇒+* (2)给出E+T*F 的所有短语,直接短语和句柄。
(4分)短语: E+T*F, T*F, 直接短语: T*F 句柄: T*F(3)给出句子i+i*i的最右推导。
(4分)0:'→⋅S SS AS →⋅ S b →⋅ A SA →⋅ A a →⋅ 4:S A S →⋅ S AS →⋅ S b →⋅A SA →⋅ A a →⋅ 3:'→⋅S SA S A →⋅ A SA →⋅ A a →⋅ S AS →⋅S b →⋅2:S b →⋅1:A a →⋅ 5:A S A →⋅ S AS →⋅ S b →⋅A SA →⋅ A a →⋅ 6:A SA →⋅S A S →⋅S AS →⋅ S b →⋅A SA →⋅A a →⋅7:S AS →⋅ A S A →⋅S AS →⋅ S b →⋅A SA →⋅A a →⋅11、构造下面正规式相应的DFA1(0|1)*10114、对下面的文法G:Expr→- Expr Expr→(Expr)|Var ExprTail ExprTail→- Expr|εVar→id VarTail VarTail→(Expr) |ε(1)构造LL(1)分析表。
(12分)(2)给出对句子id—id((id))的分析过程。
(8分)16、已知文法G[S] 为: S ->a|^|(T) T ->T,S|S①消除文法G[S]中的左递归,得文法G ´[S]。
ε|,)(||^)(T S T T S T T a S S G '→''→→'② 文法G ´[S]是否为LL(1)的?若是,给出它的预测分析表。
FIRST(S)={a,^,(} FIRST(T)={a,^,(} FIRST()={,,} FOLLOW(S)={),,,#} FOLLOW(T)={)} FOLLOW()={)}预测分析表a^() , # ST是LL(1)文法17、对下面的文法G:S → S ∨ a T | a T | ∨ a T T → ∧ a T | ∧ a (1) 消除该文法的左递归和提取左公因子;构造各非终结符的FIRST 和FOLLOW 集合;'T ε'T S a →S →^S T →()T ST →'T ST →'T ST →''T '→T ε'→'T ST ,18、文法G(S)及其LR分析表如下,请给出串baba#的分析过程。
(1) S → DbB(2) D → d(3) D →ε(4) B → a(5) B → Bba(6) B →εLR分析表2、写出表达式a=b*c+b*d对应的逆波兰式、四元式序列和三元式序列。
答:逆波兰式: abc*bd*+:=四元式序列:三元式序列: OP ARG1 ARG2 (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)八、语义分析题1、将语句if ((A<0) (B>0)) then while (C>0) do C:=C-D翻译成四元式答案:100 (j<,A,0,104)101 (j,-,-,102)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)1092、写出下面语句经语法制导翻译后所生成的四元式代码序列。
if x<y then while e>c do c:=c+1 else x:=x+5答案:假设初始为100,则四元式代码序列为100 if x<ygoto 102101 goto 107102 if e>c goto 104 103 goto 109104 M:=C+ 1105 C:=M106 goto 102107 N:=X+ 5108 X:=N1098、写出表达式a+b*(c-d)对应的逆波兰式和三元式序列。
答案:逆波兰式:(abcd-*+)三元式序列:OP ARG1 ARG2(1) - c d(2) * b (1)(3) + a (2)1.编译程序是对高级语言程序的解释执行。
(× )2.一个有限状态自动机中,有且仅有一个唯一的终态。
(×)3.一个算符优先文法可能不存在算符优先函数与之对应。
(√ )4.语法分析时必须先消除文法中的左递归。
(×)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。
(√) 6.逆波兰表示法表示表达式时无须使用括号。
(√ )7.静态数组的存储空间可以在编译时确定。
(×)8.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。
(×)9.两个正规集相等的必要条件是他们对应的正规式等价。
(× )10.一个语义子程序描述了一个文法所对应的翻译工作。