0

特定の文法の最初のセットを作成しているときに、アルゴリズムのリファレンスに記載されていないシナリオに気付きました。

つまり、このようなルールを持つ非終端記号のフォロー セットをどのように計算するのでしょうか。

<exp-list_tail> --> COMMA <exp> <exp-list_tail>

<..> で囲まれた式は非終端記号で、COMMA は終端記号です。
私の最善の推測では、空の文字列をフォローセットに追加するだけですが、よくわかりません。

通常、プロダクション ルールの最後にある非終端記号の場合、左側の非終端記号の次のリストを計算するだけですが、これがどのように問題になるかがわかります。

4

1 に答える 1

1

これに正しく答えるには、文法全体を知っていると役に立ちます。ただし、ここでは一般的な回答を試みます。

フォローグループを計算するためのアルゴリズムは次のとおりです。

{$} に初期化されている S を除いて、すべてのフォロー グループを {} に初期化します。
変化はありますが、それぞれの A∈V に対して行う:
  それぞれの Y → αAβ に対して行う:
    follow(A) = follow(A) ∪ first(β)
    β ⇒* ε の場合、また行う: follow(A) = follow(A ) ∪ follow(Y)

これは決定論的アルゴリズムであることに注意してください。(全体の) 文法のみに応じて、単一の答えが得られます。

<exp-list_tail>具体的には、この特定のルールがのフォロー セットに影響を与えるとは思いません(影響する可能性はありますが、おそらく影響しないでしょう)。

于 2011-09-27T14:47:58.357 に答える