【问题标题】:Explanations about FOLLOW function - GrammarFOLLOW 函数说明 - 语法
【发布时间】:2013-05-10 19:53:07
【问题描述】:

我在理解 FOLLOW 函数时遇到了一些问题。我无法计算遵循语法的功能,这不好。我尝试练习来理解这个功能,特别是这个练习,我有这个语法:

S -> E

E -> T E'

E' -> + T E' |减 T E' |

T -> F T'

T' -> * F T' |

F -> 标识 | (F'

F' -> E) | n)

这里是follow函数的计算结果:

美元

E), $

E'), $

T+、减号、)、$

T' +, 减号, ), $

F *、+、减号、)、$

F' *、+、减号、)、$

我真的不明白为什么 FOLLOW(T)=FOLLOW(T') = { +, minus, ), $ } 在我给出的语法中,终端符号加号和减号永远不会出现在 T 或 T' 的右侧,所以如果有人能解释一下,那就太酷了

【问题讨论】:

    标签: grammar ll


    【解决方案1】:

    从概念上讲,FOLLOW(X) 是语法中合法句子中可以出现在 X 之后的一组标记。因此,要计算它,您可以查看 X 出现在规则(任何规则)右侧的位置,然后查看它之后的内容。在 T' 的情况下,你有

    T -> F T'
    T' -> * F T'
    

    因为T' 在这两种情况下都是右轴上的最后一件事,所以你最终会得到 FOLLOW(T') = FOLLOW(T) ∪ FOLLOW(T'),相当于 FOLLOW(T') = FOLLOW (T)。

    对于 T 你有:

    E -> T E'
    E' -> + T E'
    

    这给你 FOLLOW(T) = FIRST(E') ∪ FOLLOW(E) ∪ FOLLOW(E') - 因为 E' 展开为 ε,所以包含了 FOLLOW。取决于您使用谁的 FIRST 和 FOLLOW 公式,这可能意味着 ε ∈ FIRST(E') (在这种情况下,您将其从 FOLLOW(T) 中删除)或 NULLABLE(E') = true,但整体效果在 FOLLOW(T) 上是相同的——它从 FIRST(E') 和 )$ 获得 +minus 从 FOLLOW(E)

    【讨论】:

      猜你喜欢
      • 2018-01-02
      • 2012-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 2011-06-22
      • 1970-01-01
      • 2017-05-30
      相关资源
      最近更新 更多