Слово ∶
: (двоеточие) — стандартное порождающее слово Каллисто.
Начать определение слова через двоеточие.
Ввод слова :
В режиме NUM нажмите чёрную клавишу В/О
: в стандарте ANS Forth
6.1.0450 : "colon" CORE ( C: "<spaces>name" -- colon-sys ) Пропускает ведущие разделители пробелы. Выделяет name, ограниченное пробелом. Создает определение для name, называемое "определение через двоеточие". Вводит состояние компиляции и начинает текущее определение, создавая colon-sys. Добавляет семантику инициирования, данную ниже к текущему определению.
Семантика выполнения name будет определяться скомпилированными в тело определения словами. Текущее определение не должно быть находимым в словаре, пока оно не закончено (или до выполнения DOES> в некоторых системах).
Инициирование: ( i*x -- i*x ) ( R: -- nest-sys ) Сохраняет зависящую-от-реализации информацию nest-sys о вызове определения. Состояние стека i*x, представляет параметры для name.
name Выполнение: ( i*x -- j*x ) Выполняет name определения. Состояние стека i*x, и j*x представляет параметры и результаты из name, соответственно.
См.: 3.4 Интерпретатор текста Forth, 3.4.1 Синтаксический анализ, 3.4.5 Компиляция, 6.1.1250 DOES>, 6.1.2500 [, 6.1.2540 ], 15.6.2.0470 ;CODE.
A.6.1.0450 : Типичное использование: : name ... ;
В Forth 83 это слово было определено для изменения порядка поиска. Эта спецификация явно удалена в этом Стандарте. Мы полагаем, что в большинстве случаев это не имеет никакого эффекта; однако системы, которые разрешают много порядков поиска, нашли Forth-83 поведение двоеточия очень нежелательным.
Заметьте, что двоеточие самостоятельно не вызывает компилятор. Двоеточие устанавливает состояние компиляции так, чтобы более поздние слова в области анализа были откомпилированы.
: в предыдущем стандарте Forth-83 (англ.)
: -- sys M,79 "colon" A defining word executed in the form: : <name> ... ; Create a word definition for <name> in the compilation vocabulary and set compilation state. The search order is changed so that the first vocabulary in the search order is replaced by the compilation vocabulary. The compilation vocabulary is unchanged. The text from the input stream is subsequently compiled. <name> is called a "colon definition". The newly created word definition for <name> cannot be found in the dictionary until the corresponding ; or ;CODE is successfully processed.
An error condition exists if a word is not found and cannot be converted to a number or if, during compilation from mass storage, the input stream is exhausted before encountering ; or ;CODE . sys is balanced with its corresponding ; . See: "compilation" "9.4 Compilation"
: в стандарте Forth-79 (англ.)
: 116 "colon" A defining word executed in the form: : <name> ... ; Select the CONTEXT vocabulary to be identical to CURRENT. Create a dictionary entry for <name> in CURRENT, and set compile mode. Words thus defined are called 'colon- definitions'. The compilation addresses of subsequent words from the input stream which are not immediate words are stored in the dictionary to be executed when <name> is later executed. IMMEDIATE words are executed as encountered.
If a word is not found after a search of the CONTEXT and FORTH vocabularies, conversion and compilation of a literal number is attempted, with regard to the current BASE; that failing, an error condition exists .
: в fig-FORTH Release 1 glossary, май 1979 (англ.)
: P,E,L0 Used in the form called a colon-definition: : cccc ... ; Creates a dictionary entry defining cccc as equivalent to the following sequence of Forth word definitions '...' until the next ';' or ';CODE'. The compiling process is done by the text interpreter as long as STATE is non-zero. Other details are that the CONTEXT vocabulary is set to the CURRENT vocabulary and that words with the precedence bit set (P) are executed rather than being compiled.
Реализация :
Юрий Семёнов приводит следующее описание слова : (стр. 138):
: : ( второе ":" - имя слова) ?EXEC ( система в режиме исполнения? Если нет, то сообщение об ошибке) !CSP CURRENT @ CONTEXT ! ( CONTEXT = CURRENT) CREATE ( формирует имя нового слова и поле LFA) ] ( вход в режим компиляции) (;CODE) ; IMMEDIATE ( формирование поля CFA)
История
В Каллисто : не влияет на контекст, то есть ведёт себя также, как в Форте-83 и последующих.
Ссылки
- Слово : (colon) и комментарий к нему в стандарте ANS Forth (англ.)
- Слово : (colon) и комментарий к нему в черновике Forth 200x (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |