【问题标题】:Computing the FOLLOW() set of a grammar计算语法的 FOLLOW() 集
【发布时间】:2015-06-18 18:46:08
【问题描述】:

我正在阅读 Compilers: Principles, Techniques, and Tools (2nd Edition) 并尝试计算以下语法的 FOLLOW() 集:

S  →  iEtSS' | a
S' →  eS | ε
E  →  b

其中S, S', E非终端 符号,S开始 符号,i, t, a, e, b终端 符号,并且ε 是空字符串。

到目前为止我做了什么

FOLLOW(S) = {$} ∪ FOLLOW(S')
FOLLOW(S') = FOLLOW(S)
FOLLOW(E) = FIRST(tSS') - {ε} = FIRST(t) - {ε} = {t} - {ε} = {t}

其中$输入右终结者

说明

$ ∈ FOLLOW(S),因为S 是开始符号。我们也知道S' → eS,所以FOLLOW(S') 中的所有内容都在FOLLOW(S) 中。因此,FOLLOW(S) = {$} ∪ FOLLOW(S')

我们也知道S → iEtSS',所以FOLLOW(S) 中的所有内容都在FOLLOW(S') 中。因此,FOLLOW(S') = FOLLOW(S)

问题是我无法计算FOLLOW(S),因为我不知道FOLLOW(S')。有什么想法吗?

【问题讨论】:

    标签: compiler-construction


    【解决方案1】:

    文本中描述的简单算法是最小定点计算。您基本上循环通过非终结符,将终结符放入后续集合,直到您完成整个循环而没有更改。

    由于没有从任何后续集合中删除,并且终端的数量是有限的,因此算法必须终止。通常只需要几个周期。

    【讨论】:

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