Как я это делал много лет назад, был изобретен новый оператор для моего постфиксного выражения. Поэтому, когда я столкнулся с унарным минусом в инфиксе, я бы преобразовал его в #
. Поэтому мой постфикс для a + -b
стал ab#+
.
И, конечно, мой оценщик должен был знать, что #
только выскочил один операнд.
Вид зависит от того, как вы используете постфиксное выражение после его создания. Если вы хотите отобразить его, ваш специальный оператор #
, вероятно, смутит людей. Но если вы просто используете его внутренне (каким я был), тогда он отлично работает.
Существует несколько решений этой проблемы, афаик - все они хаки в какой-то степени. – harold
Через два года после вашего поста у меня был тот же вопрос. Это вопрос, который всегда имеет значение. Вот замечание: добавление нуля (которое я также рассмотрел) тоже не всегда будет работать: Пример: - 3 будет преобразован в 0-33 = -6. Большинство парсеров применяют минус как раз минус один продукт , который будет: - (-3) = 6. Приветствия, – MrVelez
@MrVelez: Вы правы, что префикс нуля не работает, но по другой причине. Предварительная обработка «-3» с помощью префикса нулей должна давать «0-0-3» (не «0-3-3», откуда будет второй 3?). Ie ', - 3' -> '0 -, - 3' -> '0-0-, 3' -> '0-0-3, что приводит к постинфигу' 0 0 - 3 - ». Это оценивается как -3, что, вероятно, не то, что мы хотим от -3. \ Если бы мы могли получить «0-0-3», чтобы перевести на постфикс «0 0 3 - -», тогда он будет оценивать желаемое значение. –