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

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


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

числа без знака, возвращая все 32 разряда получившегося произведения. Слово UM/MOD рассматривает 32-разрядное делимое АА и 16-разрядный
делитель В как числа без знака и возвращает получающиеся 16-разрядные остаток С и частное D. Если делитель — нуль или частное превышает 65535, то это
рассматривается как ошибка. Для перехода к двойной
точности с учетом знака многие реализации имеют слово
15

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

В ответ на приглашение (знак > ) программист вводит
два числа двойной длины, операцию сложения этих
чисел и операцию печати результата. Выполняя указанные действия, форт-система печатает ответ (заметьте, что он уже не содержит точки) и подтверждающее
сообщение ОК.
1.4. Введение новых слов
Замечательное свойство языка Форт — это возможность вводить в него новые слова, расширяя тем
самым набор его команд в нужном программисту
направлении. Для введения новых слов чаще всего
используется определение через двоеточие — определение нового слова через уже известные. Такое определение начинается словом : (двоеточие) и заканчивается словом ; (точка с запятой). Сразу после двоеточия идет определяемое слово, а за ним — последовательность слов, через которые оно определяется. Например, текст : S2 DUP * SWAP DUP * + ; определяет
слово S2 , вычисляющее сумму квадратов двух чисел,
снимаемых с вершины стека S2
После ввода данного описания слово S2 можно исполнять и включать в описания других слов. При создании
таких определений рекомендуется тщательно комментировать все изменения стека. Слово ( (открывающая
круглая скобка) отмечает начало комментария; все
следующие литеры до первой ) (закрывающей скобки)
16

считаются комментарием и при обработке вводимого
форт-текста пропускаются.
Перепишем приведенное выше определение слова S2, показывая состояние вершины стека после
исполнения каждой строки:

По-видимому, минимальным требованием к документированности определения следует считать задание начального и конечного состояний вершины
стека при работе слова.
Рассмотрим подробнее работу форт-системы во время определения новых слов. Мы уже знаем, что получив
от программиста очередную порцию входного текста,
форт-система выделяет в ней отдельные слова и ищет их
в своем словаре. Эту работу выполняет текстовый интерпретатор форт-системы. Если слово в словаре не найдено, то текстовый интерпретатор пытается понять его
как число, используя описанное выше правило умолчания. Если слово найдено или оказалось записью числа,
то дальнейшие действия интерпретатора зависят от его
текущего состояния. В каждый момент времени текстовый интерпретатор находится в одном из двух состояний: в состоянии исполнения или в состоянии компиляции. В состоянии исполнения найденное слово исполняется (т. е. выполняется действие, составляющее его
семантику), а число кладется на стек. Если же интерпретатор находится в состоянии компиляции, то найденное
слово не исполняется, а компилируется, т. е. включается
в создаваемую последовательность действий для определяемого в данный момент слова. Найденное и скомпилированное таким образом слово будет исполнено
наряду с другими такими словами во время исполнения
определенного через них слова. Если требуется скомпилировать число, то текстовый интерпретатор компилирует особый литеральный код, который во время
исполнения положит значение данного числа на стек.
Проследим за работой текстового интерпретатора
по обработке уже рассмотренного определения слова
17

: S2 DUP * SWAP DUP * + ; . Предположим, что
перед началом обработки введенной строки интерпретатор находится в состоянии исполнения. Первым
словом является: (двоеточие), которое исполняется.
Его семантика состоит в том, что из входной строки
выбирается очередное слово и запоминается в качестве
определяемого, а интерпретатор переключается в состояние компиляции. Следующие слова, которые интерпретатор будет извлекать из входной строки ( DUP , * ,
SWAP и т. д.), будут компилироваться, а не исполняться, так как интерпретатор находится в состоянии компиляции. В результате с определяемым словом S2
связывается последовательность действий, отвечающая
этим словам. Процесс выделения и компиляции слов
будет продолжаться до тех пор, пока не встретится ;
(точка с запятой). Это слово особенное, оно имеет так
называемый «признак немедленного исполнения».
Слова с таким