1。 εプロダクション(空の文字列を生成するプロダクション)を排除します:
この文法にはε生産はないので、このステップをスキップします。
2。ユニットプロダクションを排除する(フォームA→Bのプロダクション、AとBは非末端です):
この文法には、ユニットプロダクションもありません。
3。すべてのプロダクションを右側に3つ以上の記号で変換します:
制作を分解するには、新しい非ターミナルを導入する必要があります。
* s→0S1Sの場合:
*新しい非ターミナルを紹介します。「a」と言います。
*プロダクションを置き換えます:
* `s→0a`
* `a→s1s`
* S→1SOS:
*新しい非ターミナルを紹介します。「b」と言います。
*プロダクションを置き換えます:
* `s→1b`
* `b→so`
* s→01100011:
*新しい非ターミナル「C」、 `d`、` e`、 `f`、` g`を紹介します。
*プロダクションを置き換えます:
* `s→0c`
* `c→1d`
* `d→1e`
* `e→0f`
* `f→0g`
* `g→011`
4。すべてのプロダクションを右側に単一のターミナルで変換します:
より多くの非ターミナルを紹介する必要があります:
* g→011の場合:
*新しい非ターミナル「H」と「I」を紹介します。
*プロダクションを置き換えます:
* `g→0h`
* `h→1i`
* `i→1`
結果として生じるCNFの文法:
`` `
S→0a | 1b
A→S1S
B→SO
C→1D
d→1e
E→0F
F→0g
G→0H
H→1I
I→1
`` `
説明:
* CNFルール: すべての作品が形である場合、文法はCNFにあります。
* A→BC(ここで、a、b、およびcは非末端です)
* a→a(aは非末端で、aは端末です)
* 新しい非ターミナル: 元の作品をCNFフォームに分解するために、新しい非ターミナルを導入しました。
* 最終フォーム: 結果として得られる文法は、2つの非ターミナルまたは右側に単一のターミナルを備えたプロダクションのみを使用して、CNF基準を満たしています。
