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



   www.maximumrule.ru            

Структура словарной статьи - часть 3


Рис. 2.4. Адресный интерпретатор и структура словарной статьи для косвенного шитого кода

На рис. 2.4 изображены две словарные статьи: верхнего уровня для слова F, определенного через двоеточие, и нижнего уровня для слова EXIT, являющаяся к тому же частью адресного интерпретатора.

Поле имени каждой статьи начинается байтом-счетчиком, в котором записано число литер в имени слова. Далее располагаются коды самих этих литер.

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

Поле кода словарной статьи содержит адрес машинной программы. Для слова F это адрес точки CALL адресного интерпретатора, для слова EXIT — адрес его поля параметров, где и располагается соответствующая программа.

Наконец, в соответствии с техникой шитого кода в поле параметров статьи для слова F располагается последовательность адресов полей кода словарных статей тех слов, из которых составлено его определение. В этих адресах перед именем слова стоит знак ->. Скомпилированное число занимает две ячейки: в первой находится адрес специального служебного слова LIT (от LITERAL — литерал), а во второй — значение данного числа. Действие слова LIT состоит в том, что значение числа кладется на стек данных, а указатель интерпретации передвигается дальше, обходя это значение в шитом коде:

LIT: W:=MEM(RI); PUSH(W); RI:=RI+2; goto NEXT;

Здесь используется тот факт, что в момент перехода на очередную машинную программу в действие NEXT указатель текущего места RI уже установлен на следующий элемент интерпретируемой последовательности адресов.

Адреса полей словарной статьи имеют традиционные обозначения, которые представляют аббревиатуры их английских названий:

NFA - Name Field Address - адрес поля имени LFA - Link Field Address - адрес поля связи CFA - Code Field Address - адрес поля кода PFA - Parameter Field Address - адрес поля параметров

Представлением словарной статьи считается адрес ее поля кода. Стандартное слово >BODY (от body — тело) CFA --> PFA преобразует его в адрес поля параметров. По аналогии во многих реализациях введен следующий ряд слов для переходов между остальными полями статьи:

BODY> PFA ---> CFA >NAME CFA ---> NFA NAME> NFA ---> CFA N>LINK NFA ---> LFA L>NAME LFA ---> NFA

Их реализация определяется принятой структурой словарной статьи.

Стандарт предусматривает слово EXECUTE (исполнить) CFA -->, которое снимает со стека адрес поля кода словарной статьи и исполняет ее. Непосредственно под этим значением в стеке должны находиться параметры, необходимые данному слову. Такой механизм открывает широкие возможности для передачи слов-команд в качестве параметров.




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