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