4.4.2.构造LR分析器的任务就是产生LR分析表。 () 4.4.3 .LR文法肯定是无二义的,一个无二义文法决不会是LR文法。 () 4.4.4.在任何时候,分析栈的活前缀X1X2...Xm的有效项目集就是栈顶状态Sm所在的那个 项目集。 () 4.4.5.同心集的合并有可能产生新的“移进”/“归约”冲突。 () 4.4.6.由于LR(0)分析表构造简单,所以它的描述能力强、适用面宽;LR(1)分析表因构造复杂而描述能力弱、适用面窄。 () 4.4.7.所有LR分析器的总控程序都是一样的,只是分析表各有不同。 () 4.4.8. LR分析技术无法适用二义文法。 () 4.4.9.项目A→β1·β2对活前缀αβ1是有效的,其条件是存在规范推导S'*=>aAW=> a β
1β2ω。 ()
4.4.10. SLR(1)文法的特点是:当符号栈中的符号串为βα,而面临的输入符号为α则存在 把α归约为A的规范句型的前缀β Aα时,方可把a归约为A。 ( )
综合题
4.5.1请指出图4.2中的LR分析表(a)、(b)、(c)分属LR(0)、SLR和LR(1)中的那一 种,并说明理由。
4.5.2文法G的产生式如下:
S→BB B~aB|b
请分别构造该文法的(1) LR (0)分析表;(2)SLR分析表;(3)规范LR分析表(即 LR(1)分析表);(4)LALR分析表。
4.5.3什么是规范句型的活前缀?引进它的意义何在?
4.5.4对于文法G[S]:S→AS|b A→SA|a (1)列出所有LR (0)项目。
(2)根据列出的项目构造识别文法活前缀的NFA并确定化为DFAo (3)证明DFA的所有状态全体构成文法LR(0)规范族。
4.5.5 LR分析器与优先关系分析器在识别句柄时的主要异同是什么?
4.5.6 LR(0)、SLR(1), LR(1)及LALR有何共同特征?它们的本质区别是什么?试论述之。 4.5.7 为二义文法G构造一个LR分析表(详细说明构造方法)。其中终结符“,”满足右结
合性,终结符“;”满足左结合性,且“,”的优先级高于“;”的优先级。 文法G[T]:T→TAT|bTe}a A→,|;
4.5.8 二义文法G[S],符的优先性和结合性说明如下: (a)else与最近的if结合 (b)“;”优先性大于if (c)“;”优先性大于else (d)“;”服从左结合
请使用LR分析法的基本思想,凭借上述条件,为G[S]构造LR分析表,要求写出详细 的构造过程。
G[S]:S→if S else S S→if S S→S;S S→a
4.5.9 已知文法G[S]为 S→aAd|;Bd|aB↑|;A↑
A→a
B→a
(1)试判断G[S]是否为LALR(1)文法。
(2)当一个文法是LR(1)而不是LALR(1)时,那么LR(1)项目集的同心集合并后会出现哪几种冲突,请说明理由。
4.5.10 文法G[T]及其LR分析表(见表4.9)如下,给出串bibi的分析过程。 (1)T→EbH (2)E→d (3)E→ε (4)H→i (5)H→Hbi (6)H→ε
4.5.11 给出文法G[S]及图4.9所示的LR(1)项目集规范族中的0、1, 2, 3, 4. G[S]: S→S;B|B B→BaA|A A→b(S)
4.5.12 证明AdBd是文法G[S]的活前缀,说明活前缀在LR分析中的作用。给出串dbdb#的LR
分析过程。
G[S]: (1)S→AdB (4) B→b (2)A→a (5)B--Bdb (3)A→ε (6)B→ε
4.5.13 一个非LR(1)的文法如下:
L→MLb|a M→ε
请给出所有有移进一归约冲突的LR(1)项目集,以说明该文法确实不是LR(1)的。
4.5.14 文法G(S)的产生式集为:
S→(EtSeS)|(EtS)|i =E E→+EF|F F→*Fi|i
构造文法G的SLR(1)分析表。要求先画出相应的DFA。
4.5.15 下述文法是哪类LR文法?并构造相应分析表。
4.5.16 给定文法G[A]:A→(A)|a
(1)证明:LR(1)项目[A→(A·),]]对活前缀“((a”是有效的;
(2)画出LR(1)项目识别所有活前缀的DFA; (3)构造LR(1)分析表;
(4)合并同心集,构造LALR(1)分析表。
4.5.17 已知布尔表达式的方法G[B]如下:
度为G[B]构造LR分析表。
4.5.18 8086/8088汇编语言对操作数域的检查可以用LR分析表实现。设m代表存储器,r代表寄存器,i代表立即数;并且为了简单起见,省去了关于m,r,和i的产生式,暂且认为m、r、i为终结符,则操作数域P的文法G如:试构造能够正确识别操作数域的LR分析表。
4.5.19 为语言{amb0|n>m≥0}写3个文法,它们分别是二义文法、LR(1)文法以及非LR(1)且非二义的文法。不必证明所写文法的正确性,但每个文法的产生式不能超过4个。
4.5.20 由文法二义引起的LR(1)分析动作冲突,可以依据消除二义的规则而得到LR(1)分析表,根据此表可以正确识别输入串是否为相应语言的句子。对于非二义非LR(1)文法引起的LR(1)分析动作的冲突,是否也可以依据什么规则来消除LR(1)分析动作的冲突而得到LR(1)分析表,并且根据此表识别相应语言的句子?若可以,是否可以给出这样的规则?
4.5.21 有文法G=({S},{a},{S→SaS,S→ε,S),该文法是_____。 A. LL(l)文法。 B.二义性文法 C.算符优先文法 D. SLR(1)文法
4.5.22 试证明任何一个SLR(1)文法一定是一个LALR(1)文法。
4.5.23 文法G[P]:P→aPb|Q Q→bQc|bSc S→Sa|a
(1)请构造它的SLR分析表,以说明它是不是SLR文法。 (2)在消除左递归、提取公共因子后可得等价文法G[P’],它是不是LL(1)文法。
4.5.24 给出文法G2: S→SaS|SbS|cSd|eS|f (1)请证实这是一个二义文法;
(2)给出什么样的约束条件,可构造无冲突的LR分析表?请证实你的论点。
4.5.25 有简单语言的文法G(VT,VN,P,δ,其中,VT={黑体小写字母串,标点符号,赋值号,运算符}
VN={P,D,L,S,E,T,B} δ: P→begin D;S end D→id:L