ANTLRを使用してブール検索文字列を解析する方法を説明する優れたチュートリアルはありますか
質問
キーワードと演算子のブール検索文字列を解析して、C#コードから実行されるSQLクエリにする必要があります。 ANTLRのようなものがこのタスクに必要なものだと思いますが、どうすればいいかわかりません。
これを行う方法に関する良いチュートリアルはありますか?または、別のツールが必要ですか?
私が言っていることの例は以下です。必要な演算子はANDとORだけです。また、括弧を使用できるようにしたいと思います。
入力式:(青AND緑)または黄色
出力:
選択* FROMテーブル WHERE(CONTAINS(Description、<!> quot; blue <!> quot;)AND CONTAINS(Description、<!> quot; green <!> quot;))または<!> gt; CONTAINS(Description、<!> quot ; yellow <!> quot;
可能であれば、暗黙的AND挿入もサポートしたいと思います。したがって、指定されていない場合のデフォルト演算子はANDです。
input:緑(青または黄色)
出力: 選択* FROMテーブル WHERE CONTAINS(Description、<!> quot; green <!> quot;)AND(CONTAINS(Description、<!> quot; blue <!> quot;)または<!> gt; CONTAINS(Description、<!> quot;黄色<!> quot;))
解決
おそらく、これはストレートテキスト処理で行います。基本的には、元の式を取得し、すべての色を引き出してCONTAINS句に置き換えます。擬似コード:
list of tokens = split input expression into tokens separated by spaces
foreach token in tokens
if token is not keyword
text = "CONTAINS(Description, \"" + token + "\")"
else
text = token
output = output + text
end
キーワードが<!> quot;(<!> quot;、<!> quot; AND <!> quot;などの場合。出力をSQLステートメントに入れるだけです
<!> lt; SQLインジェクション攻撃に関する警告をここに挿入<!> gt;