Начальный курс программирования на языке Форт


КОНТЕКСТНЫЕ СЛОВАРИ (СПИСКИ СЛОВ) - часть 2


Конкретные команды редактора переключают контекст на словарь редактора. Вы работаете в контексте словаря редактора до тех пор, пока не осуществите загрузку вашего блока и не приступите к компиляции определений. Слово : автоматически восстанавливает контекст, который был ранее, а именно: Форт.

Различные версии Форт-систем имеют различные реализации контекстных словарей. Однако существуют некоторые общие положения, которые можно распространить на большинство систем.

Словарь, где должен осуществляться поиск, определяется пользовательской переменной с именем CONTEXT (КОНТЕКСТ). Как

уже упоминалось выше, команды FORTH, EDITOR и ASSEMBLER изменяют контекст поиска.

Известен еще один вид контекста: словарь, к которому должно быть присоединено новое определение. Такой словарь задается другой переменной с именем CURRENT (ТЕКУЩИЙ). Поскольку CURRENT обычно определяет словарь Форта, то новые определения, как правило, присоединяются к данному словарю.

А каким образом система компилирует слова в словари редактора и ассемблера? Это делается с помощью слова DEFINITIONS (ОПРЕДЕЛЕНИЯ), например: EDITOR DEFINITIONS

Вы знаете, что слово EDITOR устанавливает CONTEXT для редактора. Слово DEFINITIONS копирует содержимое слова CONTEXT, каким бы оно ни было, в слово CURRENT. Слово DEFINITIONS имеет простое определение:: DEFINITIONS CONTEXT @ CURRENT ! ;

После вывода выражения EDITOR DEFINITIONS все компилируемые с этого момента слова заносятся в словарь редактора до тех пор, пока вы не введете выражение FORTH DEFINITIONS, чтобы поместить в CURRENT Форт.

Техника работы с контекстными словарями существенно зависит от конкретной системы и в какой-то степени противоречива. В Стандарте-83 подробности опущены, а потому обойдемся без них и мы. Обращайтесь к документации по своей системе.

' ххх 

( -- а)

Осуществляется поиск в словаре адреса слова ххх ( следующего слова из входного потока ) .

['] 

период-компиляции: ( -- ) период-выполнения: ( -- a)

Используется только в определении через двоеточие. Компиляция адреса следующего слова из определения как литерала.

EXECUTE 

( a -- )

Выполнение элемента словаря, адрес поля параметров которого находится на стеке.

@EXECUTE 

( a -- )

Выполнение элемента словаря, на pfa которого ссылается содержимое по адресу а. Если адрес содержит нуль, то @EXECUTE ничего не выполняет.

>BODY 

( cfa -- pfa)

Вычисление адреса поля параметров определения, адрес компиляции которого находится на стеке.

EXIT

( -- )

Удаление адреса возврата, из вершины стена возвратов и занесение его в указатель адресного интерпретатора. Если слово EXIT скомпилировано в определении через двоеточие, то оно завершает выполнение этого определения в данной точке.

QUIT

( -- )

Очистки стека возвратов и передача управлений терминалу, ожидающему ввода. Сообщения при этом ни выдается.

ABORT

( -- )

Очистке стека данных и выполнение функций слова QUIT. Сообщения не выдаются.

H или DP

( -- a)

Занесение в стек адреса указателя словаря.

HERE

( -- a)

Занесение в стек адреса очередного доступного участка словаря.

PAD

( -- a)

Занесение в стен адреса начала рабочей области, в которой хранятся строки символов в процессе промежуточной обработки.

SP@ или 'S

( -- a)

Занесение в стек адреса вершины стека данных до того, как исполнено сама слово SP@.

S0

( -- a)

Содержится адрес дна стека данных.

TIB

( -- a)

Занесение в стек адреса начала буфера входного текста.




Начало  Назад  Вперед