答えて

1

私が指摘したように、BNFがすでにCNFに入っている私の元々の答えは間違っていました。 here(PDF)の説明どおり、文脈自由文法をCNFに変換することができます。変換プロセスは、Sipser第2版にも示されています。アクセス権がある場合は106-109ページを参照してください。私は、このプロセスを自動化する既存のソフトウェアがあるかどうかはわかりません(しかし、簡単に書けるように思えます)。

+0

申し訳ありませんが、間違っています。 BNFは一般的なCFGの表記ですので、「すべてのCFGはチョムスキー標準形になっています」と同じです。ここでの要点は、チョムスキー標準形式では、すべての非終端プロダクションがRHS上に2つの非終端記号しか持たないことです。 – arnsholt

+0

私は訂正しました。私は次のように読んでいます。 "チョムスキー正規形のすべての文法は文脈自由であり、逆に、文脈自由文法はすべて、チョムスキー正規形の同等の文法に効率的に変換することができます。間違った結論に達しました。 –

3

まあ、チョムスキーノーマルフォームとバッカス - ナウアフォームは、まったく同じ種類のコンセプトではないので、私は本当にそうは思わない。しかし、あなたがこのソフトウェアを必要としていることを教えてくれたら、私たちは手伝ってくれるかもしれません。

あなたが尋ねたところから、私はあなたがChomsky Normal FormにBNF文法を正規化するためのある種のコードを必要としていると仮定しています。私が知る限り、そのようなソフトウェアは存在しませんが、計算上実現可能なタスクであると仮定して、存在する可能性があります。

しかし、実際に必要なことについてさらに具体的に説明できる場合は、そのタスクに関する有用なアドバイスを提供することができます。

EDIT:私の本で少し掘り下げた後、任意のCFGをChomsky Normal Formに変換するアルゴリズムを定式化することが可能であることが判明しました。私は実際のアルゴリズムやその複雑さを持っていません。

+0

あなたの補正書(編集)とウィキペディアのリンクで読んだことは、CNFはBNFの制限的なケースだと思います。すべてのCNF文法はBNFにあります。 BNF内の任意のCFGをCNFに変換することは、おそらく完全に自明ではない(導入された多くの非終端端末)が、実行可能であると思われる。 –

+2

並べ替えCNFはCFGの制限ですが、BNFはCFGをエンコードする方法です(NはNormalではなくNaurです)。しかし、CFGをコード化する他の方法があります。たとえば、Wikipediaの記事の矢印表記です。 BNF(およびその子孫)は、コンピューティングで最も一般的な方法です。 – arnsholt

+0

http://qntm.org/chomskyはCFGからCNFへの変換(PHPで)を実装しているようです。 –

1

JFLAPあなたが探していることをやるでしょう。

私はまだそれを使っていませんが、私のオートマタの教授が私に勧めました。

「JFLAPとは何ですか?」あなたが探しているもののように聞こえる "CFG - > CNF"から変換できるようです。

+0

最後に私がJFLAPを使用したとき、これはDFSツリーを引き出すのにも便利です。 – Woot4Moo

関連する問題