这是语法LL(1(吗?S
既E/S
又E
会是一个问题吗?
S -> E / S
S -> E
E -> letter
E -> ‘ S ’
它能得出这样的‘a / e / ‘g / s’ ’ / q
吗?
S => E / S
=> ‘S’ / S
=> ‘E / S’ / S
=> ‘a / S’/ S
=> ‘a / E / S’ / S
=> ‘a / E / ‘E / S’’ / S
=> ‘a / e / ‘g / s’’ / q
回想一下,语法G
是LL(1)
当且仅当A → u
和A → v
在G
中是不同的产品时,以下条件成立:
- 对于没有终端
a
执行u
,v
派生以a
开头的字符串。 - 最多
u
和v
中的一个派生空字符串λ
- 如果
u ⇒* λ
则v
不会派生任何以FOLLOW(A)
中的终端开头的字符串。
第二个和第三个条件是微不足道的,因为语法中没有终端和非终端符号序列派生空字符串。现在考虑S → E / S
和S → E
的作品。你能找到两个派生S ⇒ E / S ⇒* au
和S ⇒ E ⇒* av
a
是违反第一个条件的终端吗?这个问题显然是功课,所以我会把这个问题留给你回答。