Разрешить ручное редактирование элемента с фиксированным временем выбора

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

  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

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

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

0
задан japhfortin 4 March 2019 в 08:55
поделиться