わかりました。Follow_k(N)セットを計算する方法を理解しました(Nは非終端記号です)。A-> aBcの形式のすべての生成ルールについて、First_k(First_k(c)Follow_k(A))をFollow_k(B)に追加します。 )(a、cは、終端記号と非終端記号の任意のグループ、またはラムダです)。...そして、追加するものがなくなるまでこれを繰り返します。
しかし、次のようなプロダクションルールはどうなりますか:S-> ABCD(A、B、C、Dはすべて非終端記号です)?
First_k
(First_k(BCD)Follow_k(S))をFollow_k(A)
に追加するか、First_k(First_k(CD)Follow_k(S))をFollow_k(B)
に追加するか、First_k(First_k(D)Follow_k(S))を追加する必要がありますFollow_k(C)
に追加するか、First_k(First_k(lambda)Follow_k(S))をFollow_k(D)に追加する
か、上記のすべてを実行しますか?
更新:
次の文法を例にとってみましょう。
S-> ABC
A-> a
B-> b
C-> c
直感的には、Follow_1(S)= {} Sの後に何も続かないため
Follow_1(A)= {b} bがAの後に続くため、
Follow_1(B)= {c} cがBの後に続くため、
Follow_1(C)= {} Cの後には何も続きません。
アルゴリズムを使用してこの結果を取得するには、S->ABCのすべてのケースを考慮する必要があります。
しかし、私の判断や例は正しくないかもしれないので、質問はまだ開いたままです...