资源描述:
《编译原理习题习题资料》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、6、写一个文法,使其语言是奇数集,且每一个奇数不以零开头。13、给出下面语言的相应文法: L1={anbnci
2、n≧1,i≧0}L2={aibncn
3、n≧1,i≧0}L3={anbnambm
4、m,n≧0}L4={1n0m1m 0n
5、m,n≧0} 答:(1) S->AB A->aAb
6、ab B->Bc
7、ε (2) S->AB B->bBc
8、bc A->Aa
9、ε (3) S->AA A-> aAb
10、ε (4) S->1S0
11、A A-> 0A1
12、ε16、给出下面的正规表达式。(1)以01结尾的二进制数串;正规式
13、(0
14、1)*01或(0*1*)*01(2)能被5整除的十进制整数;(0
15、1
16、2
17、3
18、4
19、5
20、6
21、7
22、8
23、9)*(0
24、5)或(0*1*2*3*4*5*6*7*8*9*)*(0
25、5)或(0
26、5)
27、(1
28、2
29、3
30、…
31、9)(0
32、1
33、2
34、3
35、…
36、9)*(0
37、5)(3)包含奇数个1或者奇数个0的二进制串;0*1(0
38、10*1)*正规式0*1(0
39、10*1)*
40、1*0(1
41、01*0)*20、考虑下面文法G1:S→a
42、∧
43、(T)T→T,S
44、S(1)消去G1的左递归;S→a
45、∧
46、(T)T→ST’T’→,ST’
47、ε(2)经改写后的文法是否是LL(1)文法,给出
48、预测分析表。FIRST(a)∩FIRST(∧)∩FIRST((T))=中FIRST(,ST’)∩FIRST(ε)=中FIRST(T’)∩FOLLOW(T’)=中经改写后的文法满足3个条件,所以是LL(1)的22、对下面的文法GE→TE'E'→+E
49、εT→FT'T'→T
50、εF→PF'F'→*F'
51、εP→(E)
52、a
53、b
54、∧(1)计算这个文法的每个非终结符的FIRST和FOLLOW。(2)证明这个文法是LL(1)的。(3)构造它的预测分析表。(4)构造它的递归下降分析程序。(1)FIRST(E)={(,a,b,^}FOLLOW(E)={#,)}F
55、IRST(E')={+,ε}FOLLOW(E')={#,)}FIRST(T)={(,a,b,^}FOLLOW(T)={+,),#}FIRST(T')={(,a,b,^,ε}FOLLOW(T')={+,),#}FIRST(F)={(,a,b,^}FOLLOW(F)={(,a,b,^,+,),#}FIRST(F')={*,ε}FOLLOW(F')={(,a,b,^,+,),#}FIRST(P)={(,a,b,^}FOLLOW(P)={*,(,a,b,^,+,),#}(2) 考虑下列产生式: E'→+E
56、εeT'→T
57、εe F'→*F'
58、εF'→
59、*F'
60、ε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)文法.(
61、3)procedure E; begin if sym='(' or sym='a' or sym='b' or sym='^' then begin T; E' end else error end procedure E'; begin if sym='+' then begin advance; E end else if sym<>')' and sym<>'#' then error end procedure T; begin if sym='(' or sym='a' or sym='b' or
62、 sym='^' then begin F; T' end else error end procedure T'; begin if sym='(' or sym='a' or sym='b' or sym='^' then T else if sym='*' then error end procedure F; begin if sym='(' or sym='a' or sym='b' or sym='^' then begin P; F' end else error en
63、d procedure F'; begin if sym='*' then begin advance; F' end end procedure P; begi