2011-10-21 11 views
3

私は、文法を作成するのに役立つものが何であるかを見て回りました。さまざまなIDEがありますが、文法ファイル自体で動作するテキストエディタのようです。私は、データ中心のアプローチから何かを探しています。だから、パーサーと解析したいデータの例がたくさんあるとしましょう。だから、私はそのサンプルデータを処理し、そこから直接文法を定義したいと思っています。サンプルデータからのパーサー文法の作成

このようなことをする既存のソフトウェアはありますか?私はより明確にしようとするつもりだ

...

私は、ユーザーがデータサンプルにロードされた場所になります言及していたデータ中心のアプローチ。次に、フィールドであることを示す項目を選択するか、項目を選択して区切り記号などとしてマークします。

ほとんどのIDEとは対照的に、文法言語自体で書くためのテキストエディタがあります。

+0

私はいつもこれについて疑問を抱いていましたが、データセットから文法を推論する必要があると思いますが、私は他の人の答えを見たいと思っています。 –

+0

興味深い質問です。私の答えが正しい方向に向いているかどうかを見てみましょう...私は正規の文法/正規表現を取得する際に言及しているステップのどれかを詳しく説明できます。 – Patrick87

+0

1)一般に、データから一意の文法を推論することは不可能です。 2)文法記述言語は、人々がこの問題を真剣に研究し、(彼らの視点から)最高の解決策を思い描いたために存在する。したがって、「データ中心のアプローチ」の欠如は、この考え方が実行可能ではないという一つの示唆です。 –

答えて

2

任意の有限の文字列が通常の言語を構成します。そのような言語を受け入れるNFAを書くことは自明である。これから、サブセット構成を使用してDFAを生成し、DFAが区別不能関係の等価クラスごとに1つの状態だけを必要とするという事実を使用して、DFAを最小化することができます。したがって、完全にアルゴリズム的なプロセスです...正規表現や文法を取得することは、同様に簡単です。

言われているように、あなたは文字列を生成する文法を生成したい場合、おそらく他のもの...あなたの問題は悪い考えです。任意の有限集合の文字列に対して、無限に多くの文法がそれらと他の文字列を生成します。目標のデータセットをヒットしている限り、他の文字列を生成することができるという事実に由来する数字の無限です。あなたの質問は本質的に、「シーケンスa1、a2、...、an、...の始まりが与えられれば、次のn個の要素が何であるか」ということです。 答えが必要な場合を除き、これは不可能です。この場合は、常にDFAから始めて、これを一般化する方法を提案することができます(つまり、より多くの文字列のみを受け入れることができます)。例えば、通常の文法では、新しい文字列を導入するのは簡単です...最初の答えを開始場所として使用します。しかし、NFAからDFAへの変換は、漸近的に指数関数的に非効率的である可能性があることに注意してください。

+2

この問題が発生する通常の方法は、「すべてのデータをカバーする最小限の記述は何ですか?」です。ある程度のサイズや他の複雑さのメトリックのために互いに優位に立つ文法のセットがはるかに少なくなります。 OPでも良い文法を得るにはカウンターの例が必要です。そうでなければ、文法G = CHAR *が彼が得られる唯一の答えになります(最小限に抑えられます)。基本的に、これは機械学習の問題です。一般的に、私は彼のデータが本当に規則的でなければ彼はとてもうまくいくとは思っていません。その場合、彼はツールを必要としません。 –

+0

素晴らしい情報だけど、...私はアルゴリズムではなくソフトウェアツールについて尋ねている。私は何かが自動的にそれを行うことを提案しているのではなく、文法中心のIDEの代わりにデータ中心のIDEがあるということです。 – mentics

+0

@taotree:私は記事で言及したように、最小限のDFAを作成し、それに対応する正規の文法が良い出発点になるように思えます...実際にこれを行うかどうかは分かりません! – Patrick87

1

私はあなたをFSAに制限するのではなく、文法がないかどうかにかかわらず文法に制限したいと思います。私はhttp://en.wikipedia.org/wiki/Grammar_inductionを見ることをお勧めします。そこにアルゴリズム(申し訳ありませんが、ソフトウェアではない)のいくつかの議論があるようです。

関連する問題