データベース クエリ コードを生成する式アナライザーを構築しています。それらを左右に分割するのは非常に簡単ですが、括弧を検出してそれに応じてコードを生成する必要があり、これを行う方法がわかりません。
例 [欠陥のあるロジックは無視してください:)]:
a => a.Line2 != "1" && (a.Line2 == "a" || a.Line2 != "b") && !a.Line1.EndsWith("a")
途中で「セット」を検出し、それらのグループ化を維持する必要がありますが、解析中に通常の BinaryExpression と式に違いは見られません (かっこの文字列表現をチェックするのは嫌です)
どんな助けでも大歓迎です。
(私はおそらくC#を使用していることに言及する必要があります)
--編集-- 標準の .Net Expression クラスを使用して式を作成していることに言及しませんでした (System.Linq.Expressions 名前空間)
--Edit2-- テキストをコードに解析しているのではなく、コードをテキストに解析しています。したがって、私の Parser クラスには次のようなメソッドがあります。
void FilterWith<T>(Expression<Func<T, bool>> filterExpression);
これにより、次のようなコードを記述できます。
FilterWith<Customer>(c => c.Name =="asd" && c.Surname == "qwe");
標準の .Net クラスを使用して解析するのは非常に簡単ですが、私の課題はこの式を解析することです。
FilterWith<Customer>(c => c.Name == "asd" && (c.Surname == "qwe" && c.Status == 1) && !c.Disabled)
私の課題は、括弧の間の式を 1 つのセットとして保持することです。.Net クラスは、括弧の部分を他の部分から正しく分割しますが、括弧が原因でセットであることを示しません。