Постфикс для инфикса с унарными/бинарными операторами

Я пытаюсь сделать конвертер из постфиксной записи в инфиксную и мне нужна помощь. Уже есть вопрос о преобразовании инфикса в постфикс, который дает пример, который я не могу преобразовать обратно. (Примечание: здесь отсутствует знак минус!)

Ниже приведен вывод моего преобразователя, где 1-й «столбец» — это постфиксный ввод, 2-й — мой инфиксный вывод, а 3-й — то, что я, вероятно, должен получить (?):

2 -                      =   - 2                           =?    - 2                       true
1 + 2 +                  =   + 1 + 2                       =?    + 1 + 2                   true
1 + 2 + +                =   + (+ 1 + 2)                   =?    + 1 + + 2                 false
1 + 2 + + 3 - - 4 - -    =   - (- (+ (+ 1 + 2) - 3) - 4)   =?    + 1 + + 2 - - 3 - - 4     false

Как вы думаете, возможно ли решить эту проблему, или последние две строки действительно преобразованы правильно? Как бы вы написали алгоритм для решения этой задачи?

Пожалуйста, предположим, что больше операторов (не только + и -) могут быть установлены как унарные, так и бинарные, где унарные операторы имеют более высокий приоритет, чем бинарные.

использованная литература

  1. Ruby Quiz #148: Postfix to Infix, также через Группы Google
  2. Алгоритм маневровой станции (C, Python, Perl) с поддержкой унарных операторов в LiteratePrograms

person Andrei    schedule 09.08.2010    source источник
comment
Я не эксперт, но инфиксная нотация не должна использовать круглые скобки? 3-й столбец мне не кажется инфиксной записью и неоднозначен.   -  person dierre    schedule 11.08.2010


Ответы (1)


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

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

person Bart van Ingen Schenau    schedule 25.08.2010