Я создаю анализатор выражений, из которого я хотел бы сгенерировать код запроса к базе данных, я продвинулся довольно далеко, но застрял в точном анализе BinaryExpressions. Их довольно легко разбить на Left и Right, но мне нужно определить скобки и соответственно сгенерировать свой код, и я не вижу, как это сделать.
Пример [пожалуйста, не обращайте внимания на ошибочную логику :)]:
a => a.Line2 != "1" && (a.Line2 == "a" || a.Line2 != "b") && !a.Line1.EndsWith("a")
I нужно обнаружить "набор" Я не упомянул, что использую стандартные классы .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)
моя задача состоит в том, чтобы сохранять выражения в скобках как единый набор. Классы .Net правильно отделяют части скобок от других, но не указывают, что это набор из-за скобок.