質問

だからここに私は達成するために探しているものです。私は私のユーザー、彼らがクエリを入力することができ、単一のGoogleのようなテキストボックスを与えたいと思います。そして、私は彼らがそのような

のような半自然言語を表現できるようにしたいと思います
"view all between 1/1/2008 and 1/2/2008"

の構文は、この特定のドメインにかなり構造化および制限することがある場合、それは大丈夫です...これらは、これを使用する専門家のユーザーです。

最終的に、私は、解析結果は、式ツリーのいくつかの並べ替えとして利用できるようにしたいと思います。しかし、あなたはデータ構造が良いかもしれないものについてのいくつかの他のアイデアを持っている場合。

これは、C#である: - )

役に立ちましたか?

解決

あなたはプログラミング言語を記述しています。確かにそれは(多くの場合、ほとんどの言語、またはドメイン固有言語(DSL)と呼ばれる)小さな言語です。あなたが長期再帰下降パーサを聞いたことがない場合は、おそらくパウロの助言に従い、いくつかの説明のドロップダウンボックスを使用してオフに優れています。

しかし、再び、私はあなたがそれをしたい場合は、ANTLRは進むべき道であることを、彼に同意する必要があります。あなたが始めるのに役立つかもしれないサイト上のチュートリアルがあります。基本的には、構文はバッカス記法の表記法を使用して、どのように記述する必要があります。

次に、あなたの文法上のANTLRを実行します、そしてそれはあなたのパーサを生成します。その後、抽象構文木にあなたの教科書からの入力を供給することができます。次に、あなたのクエリを生成するために、そのツリーを使用することができます。これは、すべての音それほど難しいことではありませんが、それまでのビットがあります。

あなたがこのに本当にしているおよび/またはあなたのプログラミングの翼ビットをストレッチしたい場合は、

、あなたはドラゴンブック、AKAコンパイラでトピックの詳細を読むことができる:原則、テクニックとツール

幸運私の友人ます。

他のヒント

非常に簡単な言語のために、私は正規表現で行くと思います。主な利点は、あなたが任意のコード生成に対処する必要はありませんがあります。パターンマッチングのデバッグは、しかし、基本的にゼロである。

あなたの言語は、(あなたは、単一の文法ファイルで全体の事を指定して気にしないだろう)適度に複雑な場合、私は<のhref = "http://www.ssw.uni-linz.acで行くと思います。 。それは、高速で使いやすいですし、非常にデバッグコードになります。

- /研究/プロジェクト/ココ/」のrel = "nofollowをnoreferrer">ココ/ R の時

より複雑な言語については、私の現在のお気に入りは、 ANTLR v3ののです。非常にいいです、(「インポート」ステートメントを経由して)複数ファイルの文法をサポートします。生成されたコードはデバッグですが、デバッグの前に慣れるのビットを考慮することができる取る「簡単。」

私は前にこのような状況にされています。多くの議論の後、我々はコンテキスト依存ドロップダウンは単なるテキストボックスより優れた解決策であると判断しました。

たとえば、4つのドロップダウンを持っていますが、最後の3が無効になっています。ユーザーが最初からオプションを選択したときに続いて、それは移入などを可能にします。そこで彼らは、「ビューのすべて」「間」、その後を選択し、多分テキストボックスまたは最後の二つのカレンダーを開くでしょう。

ここでは種類の私が何を言っているかのようだ例です

式ツリーは良いアイデアです。式ツリーに正しいクエリ文字列を変換することができますそこに多くの良い一般的なパーサとパーサジェネレータ、オープンソースだけでなく、コマーシャルがあります。

オスロを使用し、それが/ <...これのために特別に設計されていますP>

私は、これはあなたを助ける場合は知らないが、私たちがやったことだった:私たちは、ユーザーがどこからと日付範囲に選択することができるように、日付の選択のために、我々は彼らに2カレンダーのポップアップを与えたようなのcriteriasを事前に定義されました。.. 。我々は、式ツリーがいいように思われること、他の...同様に、あなたもユーザーに事前定義された基準の選択を与えることができます...ユーザーが日付を指定する場合にのみ適用する...それが強制させるので、日付フィルタを使用しませんでしたそのための回避策ます。

、適度に良好なチュートリアルを設計し、あなたの文法をテストするための有用なUIを持つの GOLDパーサジェネレータおよびドキュメンテーション、およびC#のから使いやすいです。

その原料を解析しようとすると、災害となり、そしてultimatley非常に多くのそれらを助け、それらをイライラので、ユーザーに制限されます。私は、フォームのドロップダウンで使用可能なすべてのオプションを持つクエリビルダツールのいくつかの種類で、事前定義されたクエリclasuesを使用してお勧めします。 (文字列などのために好きではないように、数値のためのより少ないより多い、)あなたは、異なるデータ型に対して異なるブール演算子を持つことができる、しかし、私はそれが実際にユーザが入力することが何であるかを解析しようとしているよりもhelluva多くの意味をなさないと思います。

scroll top