【问题标题】:Building a FOLLOW set of a grammar构建一个 FOLLOW 语法集
【发布时间】:2014-10-03 07:06:01
【问题描述】:

我有一个删除了左递归的语法,它也被左分解了。

我已经创建了 FIRST 集,这是非常简单的任务,但是构建 FOLLOW 集是有问题的。我试图找到有用的例子,但没有找到任何对我有帮助的例子。

语法如下:

St 是开始符号。

St -> St'
St' -> i S'
E -> i E'
E' -> [ E ] E'
E' -> ε
S' -> = E
S' -> [ E ] = E

而对应的FIRST集合是

E = { i }
E' = { [, ε }
S' = { [, = }
St = { i }
St' = { i }

现在,来自http://www.jambe.co.nz/UNI/FirstAndFollowSets.html 的跟随集的构建规则非常简单,但我不知道如何正确应用它们。

到目前为止我已经构建的以下集合是:

E = {}
E' = {}
S' = {}
St = {$}
St' {$}

但在此之后我不知道如何进行。一些提示将是最受欢迎的,我不希望得到这个问题的完整解决方案,只是一些提示,以便我了解构建跟随集的工作原理。

【问题讨论】:

    标签: compiler-construction set grammar


    【解决方案1】:

    跟随集的规则

    • 首先将$(输入标记的结尾)放入Follow(S)中(S是开始符号) 如果存在产生式 A → aBb,(其中 a 可以是整个字符串),则 FIRST(b) 中除 ε 之外的所有内容都放在 FOLLOW(B) 中。

    • 如果存在产生式 A → aB,那么 FOLLOW(A) 中的所有内容都在 FOLLOW(B) 中

    • 如果存在产生式 A → aBb,其中 FIRST(b) 包含 ε,则 FOLLOW(A) 中的所有内容都在 FOLLOW(B) 中 根据上述规则,您的答案是:

      E = { ] }
      
      E' = { ] }
      
      S' = { $ }
      
      St = { $ }
      
      St'= { $ }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多