【问题标题】:Compilation - LL1 Grammar编译 - LL1 语法
【发布时间】:2017-05-15 01:37:06
【问题描述】:

我正在研究编译器的魔力,但我不明白结果。

语法如下:

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,它可以是a e,但也可能是EPSILON,所以我们根据 S 规则移动到 #。

我在这里错过了什么?

我在http://hackingoff.com/compilers/predict-first-follow-set使用了这个工具

【问题讨论】:

    标签: syntax compilation compiler-construction grammar ll


    【解决方案1】:

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

    hackingoff 工具有问题。这是一个较短的语法,它表现出相同的错误:

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

    很明显,aB 的 FOLLOW 集中,但工具报告该集为空。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多