Follow函数如何工作? (编译器)

时间:2012-11-27 16:30:25

标签: parsing grammar context-free-grammar

语法:

E -> TE’
E’ -> +TE’ | ε
T -> FΤ’
Τ’ -> *FΤ’ | ε
F -> (E)| id

功能:

1. FIRST(F) = FIRST(T) = FIRST(E) = {(, id}
2. FIRST(E’) = {+, ε}
3. FIRST(T’) = {*, ε}
4. FOLLOW(E) = FOLLOW(E’) = {), $}
5. FOLLOW(T) = FOLLOW(T’) = {+, ), $}
6. FOLLOW(F) = {*, +, ), $}

这是我讲课的语法和功能......有人能解释我关注的工作方式???我理解FIRST是如何工作但是很难理解......

2 个答案:

答案 0 :(得分:3)

查看Wikipedia's FIRST_and_FOLLOW_sets

按照(E):

您查找E的任何引用。
这里(E)并联合所有以下终端和以下非终端的第一组 这里只有以下终端)

按照(F):

FFT引用了

*FT'。因此FOLLOW(F)FIRST(T) = {(, id}*FIRST(T') = {*, ε}的联合。

最后,FOLLOW(F) = {(, id, *, ε}

答案 1 :(得分:1)

这里通过这种方式找到FOLLOW(F): T - > FT'表示FOLLOW(T)是FOLLOW(F)的子集 T' - > * FT'表示FIRST(T')包含epsilon,然后除了epsilon并添加其他值以进行设置。