Мне нужно разобрать алгебраические выражения для приложения, над которым я работаю, и я надеюсь приукрасить немного коллективной мудрости, прежде чем взломать его и, возможно, пойти по ложному пути.
Что Мне нужно сделать довольно прямолинейно: с учетом текстового алгебраического выражения (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, другие? Я не знаком ни с одним из них.