如何找到递归文法的第一个集合

How to find FIRST sets for a recursive grammar

我有一个语法:

S → SL | ε
L → A; | E; | C;
E → (EBE) | N | V
A → let V =E
C → while E do S | while E do S else S
B → + | - | * | >
V → x | y | z
N → ND | N0 | D
D → 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 

我正在尝试为我构建解析 table 以便能够证明它不是 LL(1) 语法。我目前无法找到 S 的第一个集合。我一直在集合中获取 S,但无法到达 G 的终端。FIRST(SL) 会是什么?

当我执行 FIRST(SL) 时,我会继续回到 FIRST(S),这会转到 FIRST(SL) ⋃ FIRST(ε) = FIRST(S) ⋃ {ε},然后 FIRST(S ) 会一遍又一遍地重复自己。

大写字母代表非终结符。 小写字母代表终端。

First 和 Follow 是终结符或非终结符之前或之后的 TERMINAL 符号(在解析树的预序遍历中)。

For all A -> xYZ
First (A) = {x}
For all A-> Xyz
First (A) = First(X)
For all A-> εYZ
First (A) = First(Y)

取所有这些终结符号的并集。