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

АПОСТРОФ В ОПРЕДЕЛЕНИИ


Согласно Стандарту-83 апостроф всегда пытается найти следующее слово во входном потоке. Что произойдет, если мы поместим апостроф внутрь какого-либо определения? При исполнении такого определения апостроф будет искать следующее слово из входного потока. Таким образом, мы можем определить: : СКАЖИ ( имя ( -- ) ' 'ФРАЗА ! ;

(Если у вас иная система, обратитесь к столбцу 2 вышеприведенной таблицы.) Необычный стековый комментарий означает, что слово СКАЖИ будет «заглядывать» вперед по входному потоку в поисках очередного слова.

Теперь можно ввести:СКАЖИ ПРИВЕТ ok ФРАЗА Привет ok

или

СКАЖИ ДО-СВИДАНИЯ ok

ФРАЗА До свидания ok

Апостроф в слове СКАЖИ осуществляет поиск имени определенных слов ПРИВЕТ и ДО-СВИДАНИЯ во входном потоке во время выполнения слова СКАЖИ. Во время определения этого слова апостроф ничего не делает (разве что позволяет себя компилировать).

А как быть, если нужно специфицировать посредством апострофа адрес следующего слова в определении? Для этого имеется слово ['], которое применяется вместо слова ', например1:: ПРИХОДЯ ['] ПРИВЕТ 'ФРАЗА ! ; : УХОДЯ ['] ДО-СВИДАНИЯ 'ФРАЗА ! ;

Введите следующий текст: ПРИХОДЯ ok ФРАЗА Привет ok УХОДЯ ok ФРАЗА До свидания ok

1 Для пользователей небольших систем. Если на вашей клавиатуре нет клавиши «[» или «]», то в документации по Форт-системе должна быть указана замена.

В столбце 3 приведенной выше таблицы изложены правила выполнения этих действий на каждом из диалектов Форта. Далее дается список команд, которые мы уже рассмотрели.



' xхх

( -- а)

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

[']

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

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

EXECUTE

( а -- )

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

@EXECUTE

( а -- )

Исполнение элемента словаря, адрес которого является содержимым а. Если по адресу a находится нуль, @ЕХЕCUТЕ ничего не выполняет.



Содержание раздела