Язык Форт и его реализации



             

Введение новых слов - часть 2


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

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




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