Мне нужно разобрать алгебраические выражения для приложения, над которым я работаю, и я надеюсь украсить немного коллективной мудрости, прежде чем взломать его и, возможно, Дорога.Нужен способ разобрать алгебраические выражения в C
Что мне нужно сделать, это довольно прямолинейно: с учетом текстового алгебраического выражения (3 * x - 4 (y - sin (pi))) создает объектное представление уравнения. Пользовательские объекты уже существуют, поэтому мне нужен синтаксический анализатор, который создает дерево, в которое я могу ходить, чтобы создать объекты, которые мне нужны.
Основные требования будут:
Способность выражать алгебру как грамматики, так что я есть контроль и может настроить/продлить его по мере необходимости.
Исходный синтаксис будет содержать целые числа, вещественные числа, константы, переменные, арифметические операторы (+, -, *, /), степени (^), уравнения (=), скобки, приоритет и простые функции (sin (Пи)). Я надеюсь расширить приложение довольно быстро, чтобы поддерживать соответствующие функции (f (x) = 3x +2).
Должен компилироваться в C, поскольку его необходимо интегрировать в мой код.
Мне не нужно математически оценивать выражение, поэтому программное обеспечение, которое решает для переменной или выполняет арифметику, представляет собой шум.
Я сделал свою домашнюю работу в Google, и это выглядит как самый лучший подход заключается в использовании грамматики BNF и программного обеспечения для создания компилятора в С. Так мои вопросы:
делает грамматику BNF с соответствующими генератор парсера для алгебраических выражений (или, еще лучше, LaTex) уже существует? Кто-то должен был это сделать уже. Я ДЕЙСТВИТЕЛЬНО хочу, чтобы меня не сворачивали, главным образом потому, что я не хочу его проверять. Я был бы готов заплатить разумную сумму за библиотеку (до 50 долларов США)
Если нет, то какой генератор парсера для C вы считаете наиболее простым для изучения/использования здесь? Лекс? YACC? Flex, Bison, Python/SymPy, другие? Я не знаком ни с одним из них.
Я нашел то, что мне было нужно здесь: [http://www.codeproject.com/KB/ recipes/sota_expression_evaluator.aspx] (http://www.codeproject.com/KB/recipes/sota_expression_evaluator.aspx) Спасибо всем за продуманную feedba ск! -David – David
На самом деле это оказалось намного более полезным, поскольку он демонстрирует, как построить дерево: http://www.cs.man.ac.uk/~pjj/cs211/ho/node8.html – David
При включении ссылок к внешним источникам в вашем ответе всегда включайте важные части из этого источника вместе с вашим ответом, так как ссылки со временем могут погибнуть. –