Я ищу парсер, который может работать с фильтром запросов. Тем не менее, я не совсем уверен в терминологии, поэтому это доказывает тяжелую работу. Я надеюсь, что кто-то может мне помочь. Я читал о «парсерах рекурсивного спуска», но мне интересно, предназначены ли они для полноценных парсеров языка, а не для оценки логических выражений, которую я ищу.
В идеале я ищу код .NET (C #), но также похожий синтаксический анализатор, который работает в T-SQL.
Я хочу, чтобы что-то было проанализировано, например:
((а = Ь) | (е = 1)) & (с <= г) </p>
В идеале операторы могут быть определяемыми (например, '<' vs 'lt', '=' vs '==' vs 'eq' и т. Д.), И мы можем указать метки функционального типа (например, (left (x, 1) = 'е')). Синтаксический анализатор загружает это, подчиняется порядку приоритета (и в идеале обрабатывает отсутствие каких-либо скобок), а затем вызывает мой код с помощью выражений для вычисления логического результата - например, 'А = Ь'?). Я не ожидал бы, что анализатор поймет пользовательские функции в выражении (хотя некоторые основные из них будут полезны, например, разбиение строк). Разделение выражения (на левую и правую части) было бы неплохо. </p>
Предпочтительно, чтобы синтаксический анализатор задавал минимальное количество вопросов, чтобы получить окончательный результат - например, если одна сторона AND ложна, нет смысла оценивать другую сторону, и сначала оценивать самую простую сторону (т. е. в вышеприведенном выражении 'c <= d' следует считать более быстрым и, следовательно, оценивать первым. </p>
Я могу себе представить, что это большая работа, однако довольно распространенная. Кто-нибудь может дать мне какие-нибудь указатели? Если нет парсеров, которые были бы такими же гибкими, как указано выше, есть ли какие-нибудь базовые парсеры, которые я могу использовать для начала?
Большое спасибо
Lee