【问题标题】:Can someone verify whether the following FIRST and FOLLOW sets are correct?有人可以验证以下 FIRST 和 FOLLOW 集是否正确吗?
【发布时间】:2014-05-06 12:48:44
【问题描述】:

我正在做一个练习来为语法创建 FIRST 和 FOLLOW 集。我认为我所做的是正确的,但答案与我的略有不同。所以需要有人帮助来验证这一点。谢谢你。 语法是:

    P -> L
    L -> I X
    X -> ; L | EPSILON
    I -> A | C | W
    A -> id := E
    C -> if E then L O endif
    O -> else L | EPSILON
    W -> while E do L end
    E -> E2 R
    R -> Op1 E2 R | EPSILON
    E2 -> T S
    S -> Op2 E2 | EPSILON
    T -> c | id
    Op1 -> < | = | !=
    Op2 -> + | -

EPSILON 是真正的“epsilon” 这是我为 X 设置的第一个答案:

    FIRST(; L) = {;}
    FOLLOW(X) = {$, else, end, endif}

但给出的答案是:

    FIRST(; L) = {;}
    FOLLOW(X) = {$, else, end, endif, then}

有人可以验证哪个是正确答案吗?谢谢:)

【问题讨论】:

    标签: grammar context-free-grammar ll


    【解决方案1】:

    我看不出then 会出现在FOLLOW(X) 中。我得到了和你一样的答案。

    在该语法中,唯一可以在then 之前的是E,而E 不能以L 结尾。此外,FOLLOW(E) 包括 dothen,因此如果后续集包括 FOLLOW(E),则必须同时包括这两个标记。

    【讨论】:

      猜你喜欢
      • 2020-01-16
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 2011-11-18
      • 2016-06-14
      • 2020-09-08
      • 2021-09-24
      • 2011-08-13
      相关资源
      最近更新 更多