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