自上而下解析 - 计算FIRST和FOLLOW

时间:2015-09-20 14:56:41

标签: parsing context-free-grammar ll

给出以下语法:

  

S - > S + S | S S | (S)| S * |一个

     

S - > S S + | S S * |一个

对于我的生活,我似乎无法弄清楚如何计算上述语法的FIRST和FOLLOW。 S的递归非终端混淆了我。这是否意味着我必须在计算FIRST和FOLLOW之前先将语法分解出来?

1 个答案:

答案 0 :(得分:0)

在没有ε产生的CFG中计算FIRST集的一般规则如下:

  • 按以下步骤初始化FIRST(A):对于每个生产A→tω,其中t是终点,将t添加到FIRST(A)。
  • 重复应用以下内容,直到没有任何变化为止:对于形式A→Bω的每次生成(其中B是一个非终结符),设置FIRST(A)= FIRST(A)∪FIRST(B)。

我们可以遵循上面写的规则,但是这里我们可以注意到一些有趣的事情。您的语法只有一个非终结符,因此第二条规则(将元素从另一个非终结符的FIRST集导入一个非终结符的FIRST集中)实际上不会做任何事情。换句话说,我们可以仅通过应用初始规则来计算FIRST集。而且在这里还算不错-我们只看一下从终端开始的所有作品,并得到FIRST(S)= {a,()。