Парсер уравнений (выражений) с приоритетом?



Я разработал парсер уравнений с использованием простого алгоритма стека, который будет обрабатывать двоичные файлы (+, -, |, &, *, /, etc) операторы, унарные (!) операторы и скобки.



использование этого метода, однако, оставляет меня со всем, имеющим одинаковый приоритет - он оценивается слева направо независимо от оператора, хотя приоритет может быть применен с помощью скобок.



Итак, прямо сейчас "1+11*5" возвращает 60, а не 56, как можно было бы ожидать.



пока это подходит для текущего проекта, Я хочу иметь рутину общего назначения, которую я могу использовать для более поздних проектов.



редактировать для ясности:



Что такое хороший алгоритм для разбора уравнений с приоритетом?



Я заинтересован в чем-то простом для реализации и понимаю, что я могу кодировать себя, чтобы избежать проблем лицензирования с доступным кодом.



грамматика:



Я не понимаю вопрос грамматики - у меня есть написано это от руки. Это достаточно просто, что я не вижу необходимости YACC или Bison. Мне просто нужно вычислить строки с уравнениями, такими как "2+3 * (42/13)".



язык:



Я делаю это в C, но меня интересует алгоритм, а не конкретные решения язык. C достаточно низкий уровень, что будет легко конвертировать в другой язык, если возникнет такая необходимость.



Пример Кода



Я выложил тестовый код для простого парсера выражений я говорил выше. Требования к проекту изменились, и поэтому мне никогда не нужно было оптимизировать код для производительности или пространства, поскольку он не был включен в проект. Это в оригинальной многословной форме, и должно быть легко понятно. Если я сделаю что-нибудь еще с ним с точки зрения приоритета оператора, я, вероятно, выберу макрос взломать поскольку он соответствует остальной части программы в простоте. Если я когда-нибудь используйте это в реальном проекте, хотя, я буду идти на более компактный / быстрый парсер.



вопрос




умный дизайн математического парсера?




Адам

675   0  

Comments

    Ничего не найдено.