二、R(0)分析表的构造 LR(O)分析就是k=0时的LR(k)分析.即在分析的每一步,根据当前的栈 顶状态确定下一步动作, 为了给出构造LR(O)分渐表的算法,我们首先引入一些重要的概念和 术语 1. 规范句型的活前缀(viable prefix) 从前面例子的分析过程可知,将栈内符号与未扫描的输入串拼接起来, 可得一规范句型.即栈内符号串总是规范句型的前缀,且不含句柄右 侧的符号. 原因:句柄一旦在栈顶形成,就不再移进新符号,而是要进行归约了 我们把具有上述性质的符号串称为规范句型的活前缀, 规范句型的活前缀有两个要点:(1)它是规范句型的前缀;(2)它不含 句柄右侧符号
二、LR(0)分析表的构造 • LR(0)分析就是k=0时的LR(k)分析.即在分析的每一步,根据当前的栈 顶状态确定下一步动作. • 为了给出构造LR(0)分析表的算法,我们首先引入一些重要的概念和 术语 1. 规范句型的活前缀(viable prefix) 从前面例子的分析过程可知,将栈内符号与未扫描的输入串拼接起来, 可得一规范句型.即栈内符号串总是规范句型的前缀,且不含句柄右 侧的符号. 原因:句柄一旦在栈顶形成,就不再移进新符号,而是要进行归约了. 我们把具有上述性质的符号串称为规范句型的活前缀. 规范句型的活前缀有两个要点: (1)它是规范句型的前缀; (2)它不含 句柄右侧符号
规范句型的活前纖(续) 。在前面的例子中的第五行:#E,b,a#中,b是当前 句型的句柄,“ε”,“E”,”E,”,”E,b”都是~. ·LR分析过程实际上就是一个逐步产生(识别)~的 过程 ·在分析的每一步,栈内符号总是一,且与此时栈顶待 号相关. ·提示:若能构造一个识别所有话前缀的自动机,则 构造分析表就不难了
规范句型的活前缀(续) • 在前面的例子中的第五行: #E,b ,a#中,b是当前 句型的句柄, “”, “E” , ”E ,” , ”E , b”都是~. • LR分析过程实际上就是一个逐步产生(识别)~的 过程. • 在分析的每一步,栈内符号总是~,且与此时栈顶符 号相关. • 提示: 若能构造一个识别所有活前缀的自动机,则 构造分析表就不难了
2.LR(0)项目集 由~不含句柄右侧符号这一性质可知,~与当前句柄的关系 只能是下述三种情况之一: () 句柄全部在~中(句柄是~的后缀); (2) ~只含句柄的部分特号(的后缀是句柄的前缀): (3) ~不会任何句柄符号。 对于(1),应进行归约:A→0,记为A→0; ● 对于(2),应移进(句柄的后半部分),A→B1B2: 对于(3),期望移进一产生式的右部:A→●0 我们把右部添加了一个“。”的产生式,称为LR(O)项目
2. LR(0)项目集 • 由~不含句柄右侧符号这一性质可知,~与当前句柄的关系 只能是下述三种情况之一: (1) 句柄全部在~中(句柄是~的后缀); (2) ~只含句柄的部分符号(~的后缀是句柄的前缀); (3) ~不含任何句柄符号. • 对于(1), 应进行归约: A→, 记为A→•; • 对于(2),应移进(句柄的后半部分),A→1•2 ; • 对于(3),期望移进一产生式的右部: A→• • 我们把右部添加了一个“ • ”的产生式,称为LR(0)项目
LR(0)项目集(续) ·同一产生式(设右部有n个符号)对应了若干(n+1)个LR(O)项目,每个项 目反映了栈顶所处的不同状态 ·若A→∈P,则对应了唯一的LR(O)项目A→●; ·所有的LR(O)项目是构造识别活前缀的自动机的基础。 ·例S-→A|BA→aAb|c B-→aBb|c为识别方便,我们引入新开 始符S及产生式S'→S,得到拓广的方法G'. 1.s'→●S2.S'-→S●3.S→●A4.S→A·5.A→●aAb6.A→ a●Ab7.A→aAb8.A-aAb·9.A-→●c10.A→>c。11.S→ ●B12.S-→B·13.B-→●aBbl4.B-aBbl5.B→aBb16.B-→aBb0 17.B→●d18.B→d● ·上面的LR(0)项目可用一对整数(m,n)表示,其中,m表示第m产生式,n表 示圆点在该产生式的位置; ·如项目1.可用(0,0)表示,项目14.可用(5,1)表示等等
LR(0)项目集(续) • 同一产生式(设右部有n个符号)对应了若干(n+1)个LR(0)项目,每个项 目反映了栈顶所处的不同状态. • 若A→∈P,则对应了唯一的LR(0)项目A→•; • 所有的LR(0)项目是构造识别活前缀的自动机的基础。 • 例 S→A | B A→aAb | c B→aBb | c 为识别方便,我们引入新开 始符S’及产生式S’ →S,得到拓广的方法G’. ⒈s’ →•S ⒉ S’→S • ⒊S → •A ⒋S →A • ⒌A → • aAb ⒍ A → a•Ab ⒎ A →aA•b ⒏ A → aAb • ⒐A → •c ⒑A →c• ⒒S → •B ⒓S →B • ⒔ B→ •aBb ⒕ B→ a•Bb ⒖ B→ aB•b ⒗ B→ aBb• ⒘B → •d ⒙ B→ d• • 上面的LR(0)项目可用一对整数(m,n)表示,其中,m表示第m产生式,n表 示圆点在该产生式的位置; • 如项目1.可用(0,0)表示,项目14.可用(5,1)表示等等