为给定的 CFG 生成 LL(1) 解析 table

Generating the LL(1) parsing table for the given CFG

CFG如下:

S -> SD|SB
B -> b|c
D -> a|dB

我试过的方法如下:

我通过左分解法从第一个产品 (S->SD|SB) 中移除了不确定性。

所以,左分解后的CFG如下:

S -> SS'
S'-> D|B
B -> b|c
D -> a|dB

我需要找到 S 第一个 用于制作,即 S -> SS' 以便进一步进行。有人可以帮忙或建议吗?

您不能以这种方式将此语法转换为 LL(1) 解析器:语法是 left recursive, you thus will have to perform left recursion removal。关键是您可以执行以下技巧:由于 S 的唯一规则是 S -> SS'S ->(epsilon),这意味着您只需颠倒顺序,从而引入规则 S -> S'S。所以现在的语法是:

S -> S'S
S'-> D|B
B -> b|c
D -> a|dB

现在我们可以构建first: first(B)={b,c}, first(D )={a,d}, first(S')={a,b,c,d}first(S)={ a,b,c,d}.