6

ユーザーが AND OR 演算子を使用して人間が読める検索文字列を入力するプロジェクトに取り組んでいます。3つの例を挙げます

  1. a AND (b OR c) -> (?=. \ba\b)(?=. (\bb\b)|(\bc\b)).*
  2. または (b および c)
  3. (a または b) AND (c または d)

上記は、私が得る可能性のある入力のサンプルです。その入力を取得して、正規表現に変換したいと思います。これはコンパイラのサンプルではありませんか? それを見ると、私がやりたいことは、高レベルのコマンドを低レベルのコマンドに変換することであることがわかります。上記を達成する方法について何か提案はありますか? 私が望むのは、生成されている正規表現を jsoup (疑似セレクター:matchesOwn) に渡し、html ドキュメントをクエリすることです。ご協力ありがとうございました。

4

1 に答える 1

5

これを行う一般的な方法は、簡単にトラバース可能なデータ構造の形式で中間表現を作成することです。これは通常 AST と呼ばれます。この概念に慣れていない場合は、計算機言語のこの変換を行う計算機-astをご覧ください。

ユーザー入力文字列を AST に変換するには、パーサーを使用する必要があります。あなたはantlrを見ることができます。個人的にはv3を使っていますが、v4は成熟度が低いようです。antlr3.orgを見てください。パーサーを自分で書きたい場合は、pratt パーサーを試してみてください。これは簡単なことではなく、適切なエラー処理を組み込むには時間がかかりますが、楽しい練習になる可能性があります。

AST を取得したら、それを正規表現に変換するのは簡単です。AST を走査し、それに沿って文字を出力するだけです。

幸運を!

于 2013-03-16T12:11:16.153 に答える