c выражение оценщик дубль 2 - PullRequest
0 голосов
/ 29 октября 2009

В отношении принятого решения в: SO: expression_evaluator

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

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 29 октября 2009

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

0 голосов
/ 29 октября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...