>我有一个语法:
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
我正在尝试为我构建解析表,以便能够证明它不是 LL(1( 语法。我目前无法找到 S 的第一个集合。我一直在集合中得到 S,但无法到达 G 的终端。FIRST(SL(会是什么?
当我做 FIRST(SL( 时,我会一直回到 FIRST(S(,它会回到 FIRST(SL( ⋃ FIRST(ε( = FIRST(S(⋃ {ε},FIRST(S( 会一遍又一遍地重复。
大写字母表示非终端。 小写字母表示终端。
第一个和后面是终端或非终端之前或之后的 TERMINAL 符号(在解析树的预序遍历中(。
For all A -> xYZ
First (A) = {x}
For all A-> Xyz
First (A) = First(X)
For all A-> εYZ
First (A) = First(Y)
取所有这些终端符号的并集。