0

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

S -> E

E -> T E'

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

T -> F T'

T' -> * F T' |

F -> 标识 | ( F'

F' -> E) | n)

以下是跟随函数的计算结果:

新元

E), $

E'), $

T +, 减号, ), $

T' +, 减号, ), $

F *, +, 减号, ), $

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

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

4

1 回答 1

2

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

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

因为T'在这两种情况下都是 rhs 上的最后一件事,所以你最终得到 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,但整体效果on FOLLOW(T) 是相同的——它从 FIRST(E')和从 FOLLOW(E)获取+andminus)$

于 2013-05-10T22:51:18.600 回答