Мне нужно разобрать алгебраические выражения для приложения, над которым я работаю, и я надеюсь набросать немного коллективной мудрости, прежде чем взяться за него и, возможно, идти по неверному пути.
То, что мне нужно сделать, довольно просто: учитывая текстовое алгебраическое выражение (3 * x - 4 (y - sin (pi))) создать объектное представление уравнения. Пользовательские объекты уже существуют, поэтому мне нужен синтаксический анализатор, который создает дерево, которое я могу просмотреть для создания экземпляров нужных мне объектов.
Основные требования будут:
Способность выражать алгебру как грамматику, чтобы у меня был контроль и я мог настраивать / расширять ее по мере необходимости.
Первоначальный синтаксис будет включать в себя целые числа, действительные числа, константы, переменные, арифметические операторы (+, -, *, /), степени (^), уравнения (=), скобки, приоритет и простые функции ( грех (пи)). Я надеюсь довольно быстро расширить свое приложение для поддержки собственных функций (f (x) = 3x +2).
Должен компилироваться в C, поскольку он должен быть интегрирован в мой код.
Мне не нужно оценивать выражение математически, поэтому программное обеспечение, которое решает переменную или выполняет арифметику, является шумом.
Я сделал домашнее задание Google, и, похоже, лучший подход - использовать грамматику BNF и программное обеспечение для генерации компилятора на C. Итак, мои вопросы:
Существует ли уже грамматика BNF с соответствующим генератором синтаксического анализатора для алгебраических выражений (или, еще лучше, LaTex)? Кто-то уже должен был это сделать. Я ДЕЙСТВИТЕЛЬНО хочу избежать своих собственных, главным образом потому, что я не хочу проверять это. Я хотел бы заплатить разумную сумму за библиотеку (до 50 долларов)
Если нет, какой генератор синтаксического анализатора для C вы считаете самым легким для изучения / использования здесь? Лекс? YACC? Flex, Bison, Python / SymPy, другие? Я не знаком ни с одним из них.