Вопрос

Ссылка на принятое решение в: SO: expression_evaluator

Кто-нибудь может предоставить версию, которая также работает с отрицанием? такие вещи, как

((!(0 or !1) and !((0 or 1 or 1) and !1))

тоже нужно работать.

Я сделал так, чтобы отрицание 0 или 1 было хорошо, но я не могу заставить его работать с отрицанием целых групп (! в начале скобок)

Я пытался отменить tmp после возвращения из eval в блоке * expr == '(' .. если! до его вызова видели, но это не сработало.

Это было полезно?

Решение

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

Другие советы

Алгоритм, описанный здесь , может работать с унарными операторами (операторы, имеющие один операнд) , а также функции.

Однажды я использовал его в качестве основы для полного оценщика выражений C с поддержкой символьных переменных для консоли командной строки во встроенной системе. Я не использовал прилагаемый пример кода, а написал его с нуля, чтобы удовлетворить свои цели.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top