0

私は聖書のテキストに焦点を当てたオープンソースプロジェクトに取り組んでいます。検索文字列を作成するための標準の文字列形式を作成したいと思います。次に、検索文字列を解析し、指定されたオプションを使用して検索を実行する必要があります。検索の範囲から、複数のテキストの検索、ワイルドカードなど、さまざまなオプションがあります。

lex / yaccのようなものを使用して、この形式のパーサーを生成するのは良い考えかもしれないと思います。Xapianプロジェクトは、同様の目標を達成するためにレモンを使用していると思います。私の質問は、これらのツールの1つ(または複数)を使用することがこれを達成するための最良の方法ですか?

質問に加えて、これらのツール(およびオプションである可能性のある他のツール)のリソースへのリンクをいただければ幸いです。私がこれまでに遭遇した最大の問題は、ほとんどの例とチュートリアルが、文字列形式を解析するのではなく、プログラミング言語または電卓のような単純なものを対象としていることです。

4

3 に答える 3

1

LexやYaccのようなツールはあなたの目的に適しています。検索文字列のパーサーは、プログラミング言語のパーサーとそれほど違いはありません(大きな違いは、検索文字列パーサーが検索をガイドするルールを生成するのに対し、プログラミング言語パーサーはコードが生成される場所から解析ツリーを生成することです)

構文には次のようなルールが含まれていると思います。

expression : word
           | expression AND expression
           | expression OR expression
           | NOT expression
           | '(' expression ')'

これらはすべてYaccで簡単に表現できます。

LexとYaccを学ぶのに非常に役立つと私が見つけたLexとYaccのコンパクトガイドを見ることができます

于 2009-11-18T08:14:37.160 に答える
1

C ++でパーサーを構築しようとしている場合は、以下を参照してください。

ブースト::スプリット

確かに高度なC++ですが、コードを生成せずにC++テンプレートから非常に複雑でパフォーマンスの高いパーサーを構築します。それに入るのに数日かかりましたが、サンプルの使用と変更は簡単でした。次の本も読むことをお勧めします。

C ++テンプレートメタプログラミング:DavidAbrahamsとAlekseyGurtovoyによるBoostand Beyondの概念、ツール、テクニック

于 2009-11-18T08:45:56.083 に答える
0

「構文エラーの診断とメッセージ」を最優先に考えてください。ユーザーがミスを犯した場合、手作りの再帰下降スタイルのパーサーは、これまでにスキャンした内容、ユーザーが犯した可能性のあるミスに基づいて何らかのアイデアを得ることができます。自動化されたツールを使用する場合は、一般的なユーザーのタイプミスにどのように応答するかを必ずテストしてください。天才プログラマーはコンパイラーからの不可解なメッセージを処理できますが、それほど洗練されていないユーザーをターゲットにしているようです。よりフレンドリーなインターフェース。

于 2009-11-18T08:02:24.097 に答える