Язык С




Внешние переменные - часть 2


(1-2)*(4+5)=

записывается в виде 12-45+*= круглые скобки при этом не нужны

Реализация оказывается весьма простой.каждый операнд по- мещается в стек; когда поступает знак операции,нужное число операндов (два для бинарных операций) вынимается,к ним при- меняется операция и результат направляется обратно в стек.так в приведенном выше примере 1 и 2 помещаются в стек и затем заменяются их разностью, -1.после этого 4 и 5 вво- дятся в стек и затем заменяются своей суммой,9.далее числа -1 и 9 заменяются в стеке на их произведение,равное -9.опе- рация = печатает верхний элемент стека, не удаляя его (так что промежуточные вычисления могут быть проверены). Сами операции помещения чисел в стек и их извлечения очень просты,но, в связи с включением в настоящую программу обнаружения ошибок и восстановления,они оказываются доста- точно длинными. Поэтому лучше оформить их в виде отдельных функций,чем повторять соответствующий текст повсюду в прог- рамме. Кроме того, нужна отдельная функция для выборки из ввода следующей операции или операнда. Таким образом, струк- тура программы имеет вид:

WHILE( поступает операция или операнд, а не конец IF ( число ) поместить его в стек еLSE IF ( операция ) вынуть операнды из стека выполнить операцию поместить результат в стек ELSE ошибка

Основной вопрос, который еще не был обсужден, заключает- ся в том,где поместить стек, т. Е. Какие процедуры смогут обращаться к нему непосредственно. Одна из таких возможнос- тей состоит в помещении стека в MAIN и передачи самого стека и текущей позиции в стеке функциям, работающим со стеком. Но функции MAIN нет необходимости иметь дело с переменными, уп- равляющими стеком; ей естественно рассуждать в терминах по- мещения чисел в стек и извлечения их оттуда. В силу этого мы решили сделать стек и связанную с ним информацию внешними переменными , доступными функциям PUSH (помещение в стек) и POP (извлечение из стека), но не MAIN. Перевод этой схемы в программу достаточно прост. Ведущая программа является по существу большим переключателем по ти- пу операции или операнду; это, по-видимому, более характер- ное применеие переключателя, чем то, которое было продемонс- трировано в главе 3.




Содержание  Назад  Вперед