Как проверить математическое выражение? [Дубликат]

У меня была аналогичная проблема, но в моем случае решение было другим. мой файл, который содержал php-код, назывался «somename.html», изменил его на «somename.php», работал отлично

1
задан popgalop 14 November 2014 в 03:28
поделиться

1 ответ

Если ваши выражения состоят только из круглых скобок, значений (констант и / или идентификаторов) и префикса, постфикса и инфиксных операторов, тогда есть два условия, которые необходимо проверить:

  1. скобки должны совпадать. Трудно не заметить это с помощью алгоритма шунтирующего двора, потому что в алгоритме есть точка, в которой открытая скобка выскользнула из стека, когда во входной части встречается закрытая скобка. Если вы переполняете стек или не выставляете весь стек в конце ввода, то скобки не балансируют.
  2. Знаки должны соответствовать следующему простому регулярному выражению:
    PRE* VAL POST* ( INFIX PRE* VAL POST* )*
    
    , где PRE является префиксным оператором или (POST является постфиксным оператором или a) VAL является значением: константа или идентификатор

. Это фактически сводится к двухпозиционному конечный автомат: начальное состояние (состояние 0) можно назвать «ожидающим значением», а другое состояние (состояние 1) можно назвать «ожидающим оператором». Только состояние 1 принимает, а переходы следующие:

State 0:
    PRE   → State 0
    VAL   → State 1

State 1:
    POST  → State 1
    INFIX → State 0

Все остальные переходы относятся к ошибке.

Часто необходимо реализовать этот конечный автомат, чтобы правильно иметь дело с унарным минусом (и другими операторами, которые могут быть префиксами или инфиксами), и в любом случае очень просто интегрироваться в обработку ввода.

2
ответ дан rici 21 August 2018 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: