私はCFG Gと終端記号aを入力とするアルゴリズムを設計しようとしており、S(Gの開始規則)が始まる文脈形式とともに。すなわち、S => *aαとなるような(T U N)*中の文字列αが存在すれば、それ以外の場合はnoを出力する。例えば、文法がS - > [S] | SS | ε、a =]の場合、答えはノーです。私はコードを探していません、私は擬似コードでこのトピックにどのようにアプローチすべきかを理解しようとしています。文脈自由文法のアルゴリズム
3
A
答えて
2
X
には、a
で始まる文字列を派生させる方法が3つあります。
- フォーム
X -> a...
- のルールは
X -> A...
とA
がa
で始まる文字列を導出し、フォームのルールがありますあります。 X -> B A...
とB
は、ε
を導出し、A...
はa
で始まる文字列を導出します。あなたはどちらの形式S -> ...
のそれで始まる文法のすべてのルールを見て、適用されたアルゴリズムを構築し、それならばRHSは、端末または両方のチェック2と3で始まる場合は1をチェックするためにこれらを使用することができます
非終端記号で始まります。各チェックは、ブール値を返す(おそらく再帰的な)関数に対応しています。
興味深い1つの詳細は、文法のサイクルを処理する必要性です。 A -> A a
のような単一の規則だけでなく、A -> B...
,B -> C...
、C -> A...
のような単一の規則。注意しないと、相互に再帰的なチェックは無限に繰り返されます。私はあなたにそれをお伝えします。奥行きの最初の探索がグラフ内のサイクルを永遠に回避する方法について考えてみましょう。
もう1つの詳細は、特定の非終端記号Bがε
を導出するかどうかを判断する方法です。あなたは自分自身でそれを動かすことができるはずですが、他のすべてが失敗した場合は、「nullable non-terminal」を参照してください。あなたはよく知られている小さなアルゴリズムを見つけるでしょう。
チェックのいずれかが肯定的である場合は、はいを返します。それ以外のルールの網羅的な適用は決して見つけられませんでした。戻りません。
2
予測が停止するまでEarley parserのプレディクタを実行し、問題のターミナルで始まるルールが生成されるかどうかを確認できます。
最初の入力として問題の端末を受け入れるすべての非終端記号をマークし、既にマークされた非終端記号を受け入れるすべての非終端記号に最初の入力としてマークし、完了まで繰り返すマークされた非終端記号のセットに含まれています。
関連する問題
- 1. NLTK文脈自由文法
- 2. 文脈自由文法
- 3. 文の文脈自由文法
- 4. NLTK文脈自由文法の制作
- 5. 文脈自由文法の解析
- 6. 文脈自由文法 - 計算理論
- 7. 文脈自由文法変換
- 8. 文脈自由文法とC++
- 9. 文脈自由文法と逆転
- 10. Cのための文脈自由文法
- 11. 文脈自由文法の左回帰規則
- 12. 文脈自由文法の一部大きな謎
- 13. 言語から文脈自由文法への移動
- 14. 文脈自由言語の連合
- 15. 正規表現を記述する文脈自由文法?
- 16. ネストと不等式を持つ文脈自由文法
- 17. 音声認識用文脈自由文法を作成する
- 18. Chomsky Normal Formで文脈自由文法を構築する
- 19. 任意の正規表現から文脈自由文法を生成するアルゴリズム
- 20. 文脈自由へのプッシュダウンオートマトン:それを行う方法?
- 21. 文脈自由文法を残す方法を教えてください。
- 22. 次の言語のための文脈自由文法を書く
- 23. 次の言語を生成する文脈自由文法を与える
- 24. 誰もこの文脈自由文法を私に説明できますか?
- 25. 文脈自由文法と対応するPDAを取得するには?
- 26. 文脈自由文法以外の文法を分析できるツールはありますか?
- 27. 文脈依存文法
- 28. C言語を文脈自由にするには?
- 29. L = {1^n(n + 1)/ 2}は文脈自由ですか?
- 30. ε端末は文脈自由ですか?