1、考虑有一个自动机M1接受S1,那么自动机M1如下:和L(M1)等价的正规表达式,即S1为:(00|11)|(01|10)(00|11)*(01|10)*(01|10)(00|11)*类似的考虑有一个自动机M2接受S2,那么自动机M2如下:和L(M2)等价的正规表达式,即S2为:(00|11)|(01|10)(00|11)*(01|10)*因此,S为:(00|11)|(01|10)(00|11)*(01|10)*(01|10)(00|11)*0|(00|11)|(01|10)(00|11)*(01|10)*1(6)不包含子串011的由0和1组成的符号串的全体。1*|1*0(0|10)*(1|)(
2、7)由0和1组成的符号串,把它看成二进制数,能被3整除的符号串的全体。 假设w的自动机如下:对应的正规表达式:(1(01*0)1|0)*2 给出接受下列在字母表0,1上的语言的DFA。所有以00结束的符号串的集合。所有具有3个0的符号串的集合。(1) DFAM=(0,1,q0,q1,q2,q0,q2,)其中定义如下:(q0,0)=q1 (q0,1)=q0(q1,0)=q2 (q1,1)=q0(q2,0)=q2 (q2,1)=q0(2)正则表达式: 1*01*01*01* DFAM=(0,1,q0,q1,q2,q3,q0,q3,) (q1,1)=q1(q2,0)=q3 (q2,1)=q2(q3,
3、1)=q33 下面是用正规式表示的变量声明: ( int | float ) id (, id )* ;请改用上下文无关文法表示,也就是写一个上下文无关文法,它和该正规式等价。D T L ; T int | float L L, id | id4 试分析下面给出的if-then-else语句的文法,它的提出原本是为了矫正dangling-else (悬而未决的-else)文法的二义性:stmt if expr then stmt |matched-stmt matched-stmt if expr then matched-stmt else stmt |other 试说明此文法仍然是二义性的
4、。考虑句子if e then if e then other else if e then other else other 它具有如下所示的两种分析树 stmt expr then e if stmt if matched-stmt expr then matched-stmt e other if esle stmt matched-stmt expr then matched-stmt e other esle stmt matched-stmt other stmt matched-stmt if expr then matched-stmt e if esle stmt esle s
5、tmt matched-stmt expr then e stmt other expr then matched-stmt e other if matched-stmt other 则上面给出的if-then-else文法仍是二义性的。5 证明下面文法是SLR(1)文法,并构造其SLR分析表。EE+T|T TTF|F FF*|a|b 该文法的拓广文法G为 (0) E E(1) E E+T(2) E T(3) T TF(4) T F(5) F F*(6) F a(7) F b其LR(0)项目集规范族和goto函数(识别活前缀的DFA)如下:I0 = EE, EE+T, ET, TTF, TF
6、, FF*,Fa, Fb I1 = EE, EE+TI2 = ET, TTF*, FbI3 = TF, FF* I4 = Fa I5 = Fb I6 = EE+b I7 = TTF* I8 = FF*I9 = EE+T求FOLLOW集:FOLLOW(E)=, FOLLOW(T)=, , a, bFOLLOW(F)=, , a, b, *构造的SLR分析表如下:显然,此分析表无多重定义入口,所以此文法是SLR文法。6 为下面的文法构造LALR(1)分析表SE EE+T|TT(E)|a其拓广文法G:(0) S S(1) S E(2) E E+T(3) E T(4) T (E)(5) T a构造其L
7、R(1)项目集规范族和goto函数(识别活前缀的DFA)如下: I0 = SS, $, SE, $, EE+T, $/+, ET, $/+,T(E), $/+, Ta, $/+ I1 = SS, $ I2 = SE, $, EE+T, $/+ I3 = ET, $/+I4 = T(E), $/+, EE+T, )/+, ET, )/+, (E), )/+, Ta, )/+ I5 = Ta, $/+ I6 = EE+T, $/+, Ta, $/+I7 = T(E), $/+, EE+T, )/+ I8 = ET, )/+I9 = T(E), )/+, ET, )/+, TI10 = Ta, )/
8、+ I11 = EE+T, $/+ I12 = T(E)I13 = EE+a, )/+ I14 = T(E), )/+, EE+T, )/+I15 = EE+T, )/+ I16 = T(E)合并同心的LR(1)项目集,得到LALR的项目集和转移函数如下:+T, $/+ I3,8 = ET, $/+/)I4,9 = T(E), $/+/), EI5,10 = Ta, $/+/) I6,13 = EE+T, $/+/), T(E), $/+/), Ta, $/+/)I7,14 = T(E), $/+/), EE+T, )/+ I11,15 = EE+T, $/+/) I12,16 = T(E)
9、LALR分析表如下:7 (1)通过构造识别活前缀的DFA和构造分析表,来证明文法E E + id | id是SLR(1)文法。先给出接受该文法活前缀的DFA如下:再构造SLR分析表如下:动作转移 id + $ E 0 s2 1 s3 acc 2 r2 r2 3 s4 4 r1 r1表中没有多重定义的条目,因此该文法是SLR(1)的。(2)下面左右两个文法都和(1)的文法等价 E E + M id | id E M E + id | id M M 请指出其中有几个文法不是LR(1)文法,并给出它们不是LR(1)文法的理由。只有文法 E M E + id | id M 不是LR(1)文法。因为对于
10、句子id+id+id来说,分析器在面临第一个id时需要做的空归约次数和句子中+id的个数一样多,而此时句子中+id的个数是未知的。8 根据自上而下的语法分析方法,构造下面文法的LL(1)分析表。 D TL T int | real L id R R , id R | 先计算FIRST和FOLLOWFIRST(D) = FIRST(T) = int,realFIRST(L) = id FIRST(R) = ,FOLLOW(D) = FOLLOW(L) = $FOLLOW(T) = idFOLLOW(R) = $LL(1)分析表如下:intrealid,$DD - TLTT - int realLL - idRRR - ,idR 9 下面的文法产生的表达式是对整型和实型常数应用算符+形成的。当两个整数相加时,结果仍为整数,否则就是实数。Tnum.num|num (a)给出一个语法制导定义以确定每个子表达式的类型。(b)扩充(a)中的语法制导定义把表达式翻译成前缀形式,并
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1