0

関数 FOLLOW を理解するのにいくつか問題があります。文法の次の関数を計算できず、それは良くありません。私はこの機能を理解するための演習を試みました。特にこの演習では、次の文法を使用しました。

S -> E

E -> T E'

E' -> + T E' | マイナス T E' |

T -> F T'

T' -> * F T' |

F -> ID | ( F'

F' -> E) | n)

次の関数の計算結果は次のとおりです。

シンガポールドル

E )、$

E'), $

T +、マイナス、)、$

T' +, マイナス, ), $

F *、+、マイナス、)、$

F' *, +, マイナス, ), $

なぜ FOLLOW(T)=FOLLOW(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) から取得+しますminus)$

于 2013-05-10T22:51:18.600 に答える