语法LL(1)怎么样?


12

这是《龙书》中的一个问题。这是语法:

S→AaAb∣BbBa
A→ε
B→ε

问题问如何显示它是LL(1)而不是SLR(1)。

为了证明它是LL(1),我尝试构造它的解析表,但是在一个单元格中有多个生成,这是矛盾的。

请告诉我们LL(1)怎么样,如何证明它?


6
我对语法不是很熟悉,但是这种语法的语言似乎是有限的。L={ab,ba}
— Nejc

@Nejc:是的,确实如此!
— Vinayak Garg,2012年

Answers:


11

首先,让我们给您的作品编号。

1 2 小号→ 乙b 乙一个 3 甲→ ε 4 乙→ εS→AaAb
S→BbBa
A→ε
B→ε

让我们先计算第一个,然后再计算第一个。对于诸如此类的小例子,使用关于这些集合的直觉就足够了。

FIRST(S)={a,b}FIRST(A)={}FIRST(B)={}FOLLOW(A)={a,b}FOLLOW(B)={a,b}

LL(1)LL(1)

    a | b |
-----------
S | 1 | 2 |
A | 3 | 3 |
B | 4 | 4 |

LL(1)

SLR(1)LR(0)

state 0S→∙AaAbS→∙BbBaA→∙B→∙A⟹1B⟹5
state 1S→A∙aAba⟹2
state 2S→Aa∙AbA→∙A⟹3
state 3S→AaA∙bb⟹4
state 4S→AaAb∙b
state 5S→B∙bBab⟹6
state 6S→Bb∙BaB→∙B⟹7
state 7S→BbB∙aa⟹8
state 8S→BbBa∙

SLR(1)S

    a     | b     | A | B |
---------------------------
0 | R3/R4 | R3/R4 | 1 | 5 |
1 | S2    |       |   |   |
2 | R3    | R3    | 3 |   |
3 |       | S4    |   |   |
4 | R1    | R1    |   |   |
5 |       | S4    |   |   |
6 | R4    | R4    |   | 7 |
7 | S8    |       |   |   |
8 | R2    | R2    |   |   |

SLR(1)LALR(1)a LALR(1)b

LL(1)LALR(1)


谢谢!我已经正确地构建了“ First&Follow”,但是在构建表时犯了一个错误。
— Vinayak Garg,2012年

10

如果不要求您,则无需构造LL(1)表即可证明它是LL(1)语法。您只需像Alex那样计算FIRST / FOLLOW集:

FIRST⁡(S)=a,bFIRST⁡(A)=εFIRST⁡(B)=εFOLLOW⁡(A)=a,bFOLLOW⁡(B)=a,b

然后,根据定义,LL(1)语法必须:

  1. 如果和是两个不同的语法规则,则应该是。因此,这两个集合没有任何共同的元素。A⇒aA⇒bFIRST⁡(a)∩FIRST⁡(b)=∅
  2. 如果对于任何非终结符您都有,则应该是。因此,如果非终结符的产生为零,则FIRST和FOLLOW集不能具有任何公共元素。AΑ⇒∗εFIRST⁡(A)∩FOLLOW⁡(A)=∅

因此,对于给定的语法:

  1. 我们有因为而,它们没有任何共同的元素。FIRST⁡(AaAb)∩FIRST⁡(BbBa)=∅FIRST⁡(AaAb)={a}FIRST⁡(BbBa)={b}
  2. FIRST⁡(A)∩FOLLOW⁡A)=∅因为而,现在因为而。FIRST⁡(A)={a,b}FOLLOW⁡(A)=∅FIRST⁡(B)∩FOLLOW⁡(B)=∅FIRST⁡(B)={ε}FOLLOW⁡(B)={a,b}

至于SLR(1)分析,我认为它是完美的!


欢迎!为了改善此答案,为什么不将陈述的内容应用于手头的语法?
— 拉斐尔

很高兴来到这里!回答了您的要求,我想我做了一个详尽的解释!
— 伊桑(Ethan)2012年

谢谢!请注意,我们可以在这里使用LaTeX,就像我为您的数学所做的编辑一样。
— 拉斐尔

哇谢谢!这是一个很好的解释。但是我认为应用程序中存在一些错误。First(A)= {epsilon}不是吗?我认为您交换了FIRST和FOLLOW。
— Vinayak Garg

FIRST(A)确实是epsilon,但是由于您要计算整个右成员的FIRST集,因此A->ε表示我们有一个空生产,并且您看到的第一个终端符号(因此是它的FIRST集)为终端符号 希望这对您有所帮助!
— 伊桑(Ethan)2012年

0

搜索一个足以构成语法LL(1)的条件(提示:查看FIRST集合)。

搜索所有SLR(1)语法必须满足的必要条件(提示:查看FOLLOW集合)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.