给出以下语法:
S - > S + S | S S | (S)| S * |一个
S - > S S + | S S * |一个
对于我的生活,我似乎无法弄清楚如何计算上述语法的FIRST和FOLLOW。 S的递归非终端混淆了我。这是否意味着我必须在计算FIRST和FOLLOW之前先将语法分解出来?
答案 0 :(得分:0)
在没有ε产生的CFG中计算FIRST集的一般规则如下:
我们可以遵循上面写的规则,但是这里我们可以注意到一些有趣的事情。您的语法只有一个非终结符,因此第二条规则(将元素从另一个非终结符的FIRST集导入一个非终结符的FIRST集中)实际上不会做任何事情。换句话说,我们可以仅通过应用初始规则来计算FIRST集。而且在这里还算不错-我们只看一下从终端开始的所有作品,并得到FIRST(S)= {a,()。