Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2012, 07:15   #1
branbranzor
Новичок
Джуниор
 
Регистрация: 19.05.2012
Сообщений: 2
По умолчанию Перевод выражения из инфиксной в постфиксную форму

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

Проблема заключается в том, что при некоторых заведомо некорректных исходных данных на выходе получается вполне допустимая запись, поэтому далее при работе с ней ошибки не обнаруживаются.

Например, формула !x (! - отрицание) преобразуется в список токенов [!, x].
В соответствии с алгоритмом сортировочной станции сначала оператор ! помещается в стек операторов, затем x помещается в выходную последовательность, а далее т.к. больше нет необработанных токенов, оператор извлекается из стека. На выходе получаем x!, что нам и нужно.

Если скормить алгоритму синтаксически некорректную последовательность токенов [x, !], то выполняется следующее: сначала x помещается в выходную последовательность, далее оператор ! помещается в стек операторов, и т.к. больше нет необработанных токенов, благополучно оттуда извлекается. На выходе также получаем x!.

Ошибки во входной последовательности, например, в балансе скобок, проверяются непосредственно в процессе работы алгоритма, другие выявляются позже на этапе вычисления по ОПН, но ошибки такого рода выявить не удается, т.к. полученная постфиксная запись верна, но не соответствует инфиксной записи. Вопрос: можно ли как-либо без дополнительного анализа инфиксной формы путем модификации алгоритма сортировочной станции решить эту проблему?

Последний раз редактировалось branbranzor; 17.06.2012 в 07:20.
branbranzor вне форума Ответить с цитированием
Старый 18.06.2012, 00:04   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
[x, !], то выполняется следующее: сначала x помещается в выходную последовательность, далее оператор ! помещается в стек операторов, и т.к. больше нет необработанных токенов, благополучно оттуда извлекается. На выходе также получаем x!.
при инфиксной записи последним всегда будет НЕ ОПЕРАТОР. Стало быть в конце работы очередь операторов должна быть пустой!
Цитата:
и т.к. больше нет необработанных токенов
и очередь не пуста, то ...
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование арифметического выражения из инфиксной в постфиксную форму записи Nelson1992 Паскаль, Turbo Pascal, PascalABC.NET 2 29.05.2021 18:04
Перевод в постфиксную форму в общем случае. Lasur Помощь студентам 1 17.03.2012 09:16
Из инфиксной в постфиксную запись Колесо Общие вопросы C/C++ 1 18.12.2011 10:54
Перевод в постфиксную форму записи. tgig Помощь студентам 1 08.06.2010 12:01
Выражение в постфиксную форму перевод Toni Milano Помощь студентам 2 01.12.2009 10:57