【问题标题】:Creating FIRST and FOLLOW sets for all non-terminals为所有非终结符创建 FIRST 和 FOLLOW 集
【发布时间】:2010-02-23 21:12:04
【问题描述】:

如果有人可以帮助我了解 FIRST 和 FOLLOW 集的规则,那就太棒了。

问题是计算以下语法中所有非终结符的 FOLLOW 集

S ::= S b T a E ¦ a T b ¦ c T a c     R ::= E T ¦ a E

T ::= a c E ¦ epsilon                 E ::= R ¦ T a d ¦ epsilon

我已经阅读了创建跟随集的规则并理解了基本示例,但是当我为此编写 FIRST(S) 时,我对我应该做什么感到困惑

任何帮助将不胜感激。

【问题讨论】:

    标签: parsing grammar


    【解决方案1】:

    您说的是 FIRST1 套装吗?您只需构建一组所有非终结符,这可能位于派生的开头。

    考虑 S 的右侧:S 的每个推导都以 S、a、c 开头,因此 FIRST1(S) = FIRST1(S) 并集 {a, c} = {a, c}。

    【讨论】:

    • 我从未见过它们被称为 FIRST1 集,但这正是我所学的 FIRST 集的定义。
    • 将 FIRST(R) = FIRST(E) union {a} = FIRST(E) union FIRST(T) union {epsilon} = {epsilon, a} 以及 FIRST(E) = {epsilon, a} ?
    • Kaleb Pederson:我被教导的是每个 k 都有 FIRSTk 集,所以当你编写一个带有 k 符号前瞻的解析器时,你可以计算 FIRSTk 集,这样你可能在不重构语法的情况下解决歧义。 stagnetti:我不完全确定 epsilon,因为它不是严格意义上的终端,所以我会说 FIRST1(R) = {a}。但也许其他人可以在这里提供帮助。
    • 非常感谢各位,我认为我已经解决了。再次为您的帮助喝彩。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多