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

时间:2015-12-19 19:01:30

标签: parsing context-free-grammar ll

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' 为了进一步。有人可以帮忙或建议吗?

1 个答案:

答案 0 :(得分:1)

您无法将此语法转换为LL(1)解析器:语法为left recursive,因此您必须执行left recursion removal。关键是你可以执行以下技巧:因为S的唯一规则是S -> SS'S ->(epsilon),这意味着你只需要颠倒顺序,从而引入规则1}}。所以现在的语法是:

S -> S'S

现在我们可以构建第一个 first(B)= {b,c} first(D)= {a,d} 首先(S&#39;)= {a,b,c,d} first(S)= {a,b,c,d} 。< / p>