Язык Форт и его реализации [Сергей Николаевич Баранов] (pdf) читать постранично, страница - 4

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

обработку введенного текста (он размещается в буфере для ввода с терминала), выделяя
в нем слова-команды и исполняя их. Успешно обработав
весь введенный текст, форт-система вновь приглашает
программиста к вводу, и описанный цикл диалога повторяется. Многие форт-системы после успешного завершения обработки выводят на терминал подтверждающее сообщение (обычно ОК — сокращение от английского o'kay — все в порядке). Если во время обработки
введенного текста выявляется какая-либо ошибка
(например, встретилось неизвестное форт-системе
слово), то на терминал выводится поясняющее сообщение, обработка введенного текста прекращается
и форт-система приглашает программиста к вводу
нового текста.
9

Для завершения работы обычно предусматриваются
специальные слова-команды.
Непосредственно вводить с терминала большие
форт-тексты неудобно, поэтому их хранят во внешней
памяти на дисках, а с терминала программист вводит
только слова-команды, отсылающие форт-систему
к обработке тех или иных блоков из внешней памяти.
Для создания и исправления форт-текстов во внешней
памяти используется текстовый редактор, который является специализированным расширением форт-системы.
1.3. Стек данных и вычисления

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

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

Слово DUP (от DUPLICATE — дублировать) дублирует вершину стека, добавляя в стек еще одно значение,
равное тому, которое было до этого верхним. Слово
DROP (сбросить) убирает верхнее значение. Слово
OVER (через) дублирует значение, лежащее на стеке
непосредственно под верхним. Слово ROT (от ROTATE — вращать) циклически переставляет по часовой
стрелке три верхних значения в стеке. Наконец, слово
SWAP (обменять) меняет местами два верхних значения.
10

Можно работать с любым элементом стека с помощью слов

Слово PICK (взять) дублирует n-й элемент стека
(считая от нуля), так что О PICK равносильно DUP,
а 1 PICK равносильно OVER. Слово ROLL (повернуть) циклически переставляет п верхних элементов
стека (тоже считая от нуля) по часовой стрелке, так
что 2 ROLL равносильно ROT, 1 ROLL равносильно
SWAP, a 0 ROLL является пустой операцией.
Чтобы «увидеть» верхнее значение на стеке, используется слово . (точка)
, которое снимает
значение с вершины стека и печатает его на терминале
как целое число в свободном формате (т. е. без ведущих
нулей и со знаком минус, если число отрицательно).
Вслед за последней цифрой числа слово-точка выводит
один пробел, чтобы выводимые подряд числа не сливались в сплошной ряд цифр. Если программист хочет,
чтобы напечатанное значение осталось на стеке, он
должен исполнить текст DUP .. Слово DUP создаст
копию верхнего значения, а точка ее распечатает и
уберет со стека.
Перечисленные выше слова работают со значениями, уже находящимися в стеке. А как занести значение в стек? Язык Форт имеет следующее замечательное правило умолчания: если введенное слово фортсистеме не известно, то прежде чем сообщать программисту об ошибке, форт-система пытается понять это
слово как запись числа. Если слово состоит из одних
цифр с возможным начальным знаком минус, то ошибки нет: слово считается известным и его действие
состоит в том, что данное число кладется на вершину стека.
Теперь у нас достаточно средств, чтобы привести
примеры диалога. Рассмотрим следующий протокол
работы:

11

В ответ на приглашение к вводу (знак > , печатаемый
системой) программист вводит три числа: 5, 6 и 7.
Обрабатывая введенный текст, форт-система кладет эти
числа в указанном порядке на стек и по завершении
обработки выводит подтверждающее сообщение ОК
и вновь приглашает программиста к вводу. Далее программист вводит текст из четырех слов: SWAP и три
точки. Исполняя эти слова-команды, форт-система меняет местами два верхних элемента стека (5, б, 7
5, 7, 6,) и затем поочередно три раза снимает верхнее
значение со стека и печатает его. В результате на терминале появляется текст 6 7 5 и сообщение OK, указывающее на завершение обработки, после чего система
вновь выдает программисту приглашение на ввод.
Для внешнего представления чисел используется
система счисления, задаваемая программистом. Стандарт языка предусматривает следующие слова для
переключения в наиболее общеупотребительные системы:

Первоначально устанавливается десятичная система.
Если в процессе работы будет исполнено, например,
слово HEX (от HEXADECIMAL — шестнадцатиричная), то