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

StackOverflow https://stackoverflow.com/questions/3440647

Вопрос

Я проверяю конвертер Infix-To-Postfix-To-Infix и нашел некоторую неопределенность. Например, простой инфикс сумма

1 + 2 + 3 + 4

может быть преобразован в Postfix One

1 2 + 3 + 4 +

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

1 2 3 4 + + +

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

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

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

Update1.

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

((1 + 2) + 3) + 4
(1 + 2) + (3 + 4)
1 + (2 + (3 + 4))

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

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

1 2 a 3 b 4 c

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top