АПОСТРОФ В ОПРЕДЕЛЕНИИ
Согласно Стандарту-83 апостроф всегда пытается найти следующее слово во входном потоке. Что произойдет, если мы поместим апостроф внутрь какого-либо определения? При исполнении такого определения апостроф будет искать следующее слово из входного потока. Таким образом, мы можем определить: : СКАЖИ ( имя ( -- ) ' 'ФРАЗА ! ;
(Если у вас иная система, обратитесь к столбцу 2 вышеприведенной таблицы.) Необычный стековый комментарий означает, что слово СКАЖИ будет «заглядывать» вперед по входному потоку в поисках очередного слова.
Теперь можно ввести:СКАЖИ ПРИВЕТ ok ФРАЗА Привет ok
или
СКАЖИ ДО-СВИДАНИЯ ok
ФРАЗА До свидания ok
Апостроф в слове СКАЖИ осуществляет поиск имени определенных слов ПРИВЕТ и ДО-СВИДАНИЯ во входном потоке во время выполнения слова СКАЖИ. Во время определения этого слова апостроф ничего не делает (разве что позволяет себя компилировать).
А как быть, если нужно специфицировать посредством апострофа адрес следующего слова в определении? Для этого имеется слово ['], которое применяется вместо слова ', например1:: ПРИХОДЯ ['] ПРИВЕТ 'ФРАЗА ! ; : УХОДЯ ['] ДО-СВИДАНИЯ 'ФРАЗА ! ;
Введите следующий текст: ПРИХОДЯ ok ФРАЗА Привет ok УХОДЯ ok ФРАЗА До свидания ok
1 Для пользователей небольших систем. Если на вашей клавиатуре нет клавиши «[» или «]», то в документации по Форт-системе должна быть указана замена.
В столбце 3 приведенной выше таблицы изложены правила выполнения этих действий на каждом из диалектов Форта. Далее дается список команд, которые мы уже рассмотрели.
' xхх | ( -- а) | Осуществляется поиск в словаре адреса слова ххх (следующего слова во входном потоке). |
['] | период-компиляции: ( -- ) период-выполнения: ( -- а) | Используется только в определении через двоеточие. Компиляция адреса следующего слова в определении как литерала. |
EXECUTE | ( а -- ) | Исполнение элемента словаря, адрес поля параметров которого находится на стеке. |
@EXECUTE | ( а -- ) | Исполнение элемента словаря, адрес которого является содержимым а. Если по адресу a находится нуль, @ЕХЕCUТЕ ничего не выполняет. |