Какие из следующих постфиксных обозначений правильно представляют инфиксную сумму 1 + 2 + 3 + 4? - PullRequest
3 голосов
/ 09 августа 2010

Я тестирую конвертер из инфикса в постфикс и в инфикс и обнаружил некоторую неопределенность.Например, простая инфиксная сумма

1 + 2 + 3 + 4

может быть преобразована в постфикс один

1 2 + 3 + 4 +

при условии, что операторы с одинаковым приоритетом не накапливаются.Если это так, я получаю

1 2 3 4 + + +

С другой стороны, все следующие выражения постфикса могут быть преобразованы в начальную сумму

1 2 + 3 + 4 +
1 2 + 3 4 + +
1 2 3 4 + + +

Все ли эти выражения постфикса верны?*

UPDATE1

Если бы вы сделали такой конвертер, какую форму вы бы выбрали?Мне нужно выбрать один для тестирования.

Ответы [ 3 ]

6 голосов
/ 09 августа 2010

Вам нужно определить дополнительное ограничение.

Математически ваши постфиксные выражения все одинаковы.Но на компьютере сложение целых чисел не является действительно коммутативным из-за переполнения.

Замените 1 2 3 4 на abcd и рассмотрите возможность переполнения.Большинство языков программирования определяют, что a + b + c + d должен оцениваться слева направо, чтобы a b + c + d + был единственным правильным переводом.

Только когда вы определяете, что порядок оценки «не указан», все версии постфикса эквивалентны.Это имело место для (старых) компиляторов Си.

5 голосов
/ 09 августа 2010

Да, все правильно. Они соответствуют следующим выражениям в скобках:

((1 + 2) + 3) + 4
(1 + 2) + (3 + 4)
1 + (2 + (3 + 4))
2 голосов
/ 09 августа 2010

+ сбивает с толку - он коммутативный, поэтому на самом деле каждый результат кажется правильным.

Попробуйте заменить + другими операторами: 1 a 2 b 3 c 4.
Правильный результат здесь для левоассоциативных операторов:

1 2 a 3 b 4 c

Итак, в вашем случае я бы ожидал 1 2 + 3 + 4 +

...