ANTLRを使用してブール検索文字列を解析する方法を説明する優れたチュートリアルはありますか

StackOverflow https://stackoverflow.com/questions/1209005

  •  05-07-2019
  •  | 
  •  

質問

キーワードと演算子のブール検索文字列を解析して、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;

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top