1、 D|NDD 0|1|2|3|4|5|6|7|8|9请给出句子123、301和75431的最右推导和最左推导。NNDN3ND3N23D23123NNDDDDD1DD12DN1ND1N01D013013DD30DN31ND31N431ND431N5431D543175431NDDDNDDDDDDDDD7DDDD75DDD754DD7543D4. 证明文法 SiSeS|iS| i是二义性文法。对于句型iiSeS存在两个不同的最左推导:SiSeSiiSesiSiiSeS所以该文法是二义性文法。5. 给出描述下面语言的上下文无关文法。(1) L1=anbnci |n=1,i=0 (2) L2=aibj
2、|j=i=1(3) L3=anbmcmdn |m,n=0(1) SABAaAb | abBcB | e(2) SASb |aba | e(3) SaSd | A | ebAc | e6. 设计一个最简的DFA M,使其能够识别所有的被3整除的无符号十进制整数。7. 设计一个DFA,使其能够接受被4整除的二进制数。8. 写出表达下列各项的正则表达式。(1)二进制数且为5的倍数。(2)=a,b,c,第一个a位于第一个b之前的字符串。(3)=a,b,c,包含偶数个a的字符串。(4)=0,1,不包含11子串的字符串。(1)可以先画出相应的有限自动机:添加新的开始状态S和终止状态T:根据以上自动机,列出
3、以下方程: S=A A=0A+1B+T B=0C+1D C=0E+1A D=0B+1C E=0D+1E解以上方程组: E=1*0D A=0*1B+0*T代入 C=01*0D+1A代入 C=01*00B+01*01C+1A C=xB+yA 其中x=(01*01)*01*00 y=(01*01)*1代入 B=0C+10B+11C B=(0|11)C+10B B=(10)*(0|11)C将C=xB+yA代入上式 B=uB+vA B=u*vA其中u=(10)*(0|11)x v=(10)*(0|11)y将B=u*vA代入 A=0*1u*vA+0*T A=(0*1u*v)*0*T将A代入 S=(0*1u
4、*v)*0*T串(0*1u*v)*0*即为所求。(2)该题目理解为:至少有一个a和一个b,且a出现在b的前面(可以有间隔),则答案为:c*a(a|c)*b(a|b|c)*(3)(b|c)*a(b|c)*a)*(b|c)*(a(b|c)*a | b | c)*(4)(0|10)*(1|e)第三章1. 词法分析器的功能是什么?读源程序的字符序列,逐个拼出单词,并构造相应的内部表示TOKEN;同时检查源程序中的词法错误。2. 试分析分隔符(空格、跳格及回车等)对词法分析的影响。空格、跳格、回车等分隔符号对词法分析不起作用,可以删除。但是回车符号可以用于错误定位,所以在删除回车符号前需要统计回车的个数
5、。3. 给出识别C语言全部实型常数的自动机。(+|-|e)(1-90-9*|0)(.0-90-9*|e) (E(+|-|e)0-90-9*)4. 写出识别C语言中所有单词的LEX程序。L=A-Z | a-zD=0-9D1=1-9%(L|_)(L|D|_)*return (1);D1D*return (2);+return (3);第四章1. 设有如下文法GS:SaABbcd | eASd | eSAh | eC | eCSf | Cg | e(1) 求每个产生式的Predict集。(2) 该文法是否为LL(1)文法?为什么?Predict(SaABbcd)=a e)=#,d,f,a,h Pre
6、dict(AASd)=a,d e)=h,a,d,b,ePredict(BSAh)=a,d,h eC)=e e)=bPredict(CSf)=a,f Cg)=a,f,g e)=g,b(2)由于Predict(AASd) Predict(A e),所以该文法不是LL(1)文法。2. 下列描述括号匹配的文法中,哪些是LL(1)文法?(1)S(SS | eS ) | e(2)S(S)S | e(3)SS(S)S | e(4)S(S | SS(S) | e(1)不是,(2)是,(3)不是,(4)不是3. 已知文法GE:EE+T | TTT*F | FFi | (E)请按递归下降法构造该文法的语法分析程序
7、。求产生式的predict集合:predict(EE+T)=i,(T)=i,(predict(TT*F)=i,(F)=i,(由于文法中非终极符号E和T对应的产生式的predict集合的交集都不为空,所以该文法不满足自顶向下分析的条件,现对文法进行等价变换得到如下文法:TEE+TE | eTFTT*FT | eFi(E)求新文法的predict集合:Predict(ETE)=(,iPredict(E+TE)=+e)=#,)Predict(TFT)=i,(Predict(T*FT)=*e)=+,),#Predict(Fi)=i(E)=(由于以上文法中任意非终极符号对应的产生式的predict集合的
8、交集都为空,所以满足自顶向下分析的条件,所以可以写出如下的递归下降语法分析伪代码:Void E() if(token(,i) T();E(); else Error();void E()+) Match(+);T(); else if(token#,) ;void T()i,() F();T();void T()*) Match(*);F();+,),#) ;void F()i) Match(i);() Match();E();Match();4. 构造一个LL(1)文法G,它能识别语言L:L=w | w为字母表S上不包括两个相邻的1的非空串,其中S=0,1。并证明你所构造的文法是LL(1)文
9、法。0E | 1FC0EB | eC | e0E)=01F)=1B)=0,1e)=#C)=0对任意非终极符号对应的产生式的predict集合的交集都为空,所以该文法是LL(1)文法。5. 已知文法GA为:AaABe | aBb | d(1) 试给出与GA等价的LL(1)文法GA。(2) 构造GA的LL(1)分析表并给出输入串aade#的分析过程。(1)所求GA为:aA(1)AABe (2)A e(3)dB(4)BbB (5)B e(6)aA)=aPredict(AABe)=ae)=#,ddB)=dPredict(BbB)=be)=e(3) 分析表如下:abde#AA(2)(3)B(4)B(5)(6)aade#的分析过程如下分析栈输入流动作A#aade#替换(1)aA #匹配A #ade#替换(2)ABe#aABe#ABe#de#替换(3)Be#替换(4)dBe#Be#e#替换成功第五章(这章答案是错的)1
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1