编译 - LL1语法

时间:2017-05-15 01:37:07

标签: syntax compilation compiler-construction grammar ll

我正在研究编译器的魔力,我不理解结果。

这是语法:

S -> A #
A -> B G D E
B -> + | - | EPSILON
C -> c C | EPSILON
G -> c C
D -> . C | EPSILON
E -> e B G | EPSILON

当我试图找到"第一个"并且"关注"我得到的结果与我用在线预测器得到的结果不同。

以下是给出的结果:

Non-terminal Symbol / Follow Set
     S                  $
     A                  #
     B                  c
     C               e, ., #
     G                 ., #
     D                 e, #
     E                   #

为什么不遵循G {e,。,#}? 因为我的理解是根据A规则,D跟随G,所以我们添加。,但它也可能是EPSILON,所以我们移动到E,它可以是ae,但它也可能是EPSILON,所以我们按照S规则转到#。

我在这里缺少什么?

我在http://hackingoff.com/compilers/predict-first-follow-set

使用了该工具

1 个答案:

答案 0 :(得分:1)

你对G的FOLLOW集的计算是正确的。

黑客入侵工具很麻烦。这是一个较短的语法,表现出同样的错误:

S -> a B C a
B -> b
C -> EPSILON

显而易见a位于B的FOLLOW设置中,但工具报告设置为空。