语法LL(1)怎么样?


12

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

SAaAbBbBa
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 εSAaAb
SBbBa
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 0SAaAbSBbBaABA1B5
state 1SAaAba2
state 2SAaAbAA3
state 3SAaAbb4
state 4SAaAbb
state 5SBbBab6
state 6SBbBaBB7
state 7SBbBaa8
state 8SBbBa

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. 如果和是两个不同的语法规则,则应该是。因此,这两个集合没有任何共同的元素。AaAbFIRST(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)FOLLOWA)=因为而,现在因为而。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.