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



         

Реализация определяющих слов - часть 2


Далее текстовый интерпретатор компилирует ссылку на статью для @ и исполняет (в силу признака немедленного исполнения) слово ;, которое завершает построение словарной статьи. Оно компилирует ссылку на статью EXIT и переключает текстовый интерпретатор в состояние исполнения.

Во время исполнения слова CONST во фрагменте 4 CONST ХОР входящее в него слово CREATE создаст для слова ХОР заголовок словарной статьи и поле кода, заслав туда стандартный адрес. Следующее слово, скомпилирует число 4 в поле параметров, а слово (;CODE) занесет в поле кода адрес следующей за ним машинной программы и закончит исполнение слова CONST:

: (;CODE) ( ---> ) R> LATEST NAME> ! ;

Значение, снимаемое с вершины стека возвратов словом R>, — это как раз адрес команды JSR в определении слова CONST. Слово LATEST кладет на стек адрес заголовка последней созданной статьи, т.е. статьи ХОР, а слово NAME> преобразует этот адрес в адрес поля кода. Поскольку со стека возвратов было снято одно значение, то по завершении данного определения управление вернется в точку после вызова определения, вызвавшего данное, т.е. на продолжение работы после вызова слова CONST. Аналогичные действия будут исполнены при обработке текста 5 CONST ОТЛ. Если теперь слово ХОР будет исполняться, то из точки NEXT адресного интерпретатора управление будет передано на машинную программу по адресу из поля кода, т.е. на команду JSR в теле определения CONST. Эта команда перехода с возвратом передает управление на точку DOES, сообщив ей в качестве своего адреса возврата адрес следующей последовательности ссылок — исполняющей части определения CONST. Точка DOES кладет на стек адрес поля параметров статьи ХОР (в этот момент в рабочей ячейке W еще находится адрес поля кода статьи ХОР, загруженный туда действием NEXT) и исполняет действие CALL для исполняющей части определения CONST. Следующее исполняемое слово @ заменит на стеке адрес поля параметров статьи ХОР числом 4, скомпилированным по этому адресу, и затем слово EXIT завершит исполнение данного вызова слова ХОР.




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