【发布时间】: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')。有什么想法吗?
【问题讨论】: