Слово '
' (штрих) — стандартное слово Каллисто.
' ( −− т ) Дать токен (CFA) следующего слова.
Фраза ' XXX ищет слово с именем XXX (из входного или экранного буфера) в словаре Форта.
Слово ' вводит очередное слово и ищет его в словаре, возвращая токен найденной статьи. Если слово не найдено, это считается ошибкой.
Ввод слова '[править]
В режиме NUM последовательно нажмите две клавиши F 1
' в стандарте ANS Forth[править]
6.1.0070 ' "tick" CORE ( "<spaces>name" -- xt ) Пропускает ведущие разделители пробелы. Выделяет name ограниченное пробелом. Ищет name, и возвращает xt, идентификатор исполнения для name. Неопределенная ситуация существует, если name не найдено. При интерпретации, ' xyz EXECUTE, эквивалентно xyz. См.: 3.4 Интерпретатор текста Forth, 3.4.1 Синтаксический анализ, A.6.1.2033 POSTPONE, A.6.1.2510 ['], D.6.7 Immediate-ности. A.6.1.0070 ' Типичное использование: ... ' name . Много систем Forth используют это изящное слово. Многие нет. ANS Forth наследует использование Forth 83. См.: 3.4.3..2 Семантика интерпретации, A.6.1.1550 FIND.
История[править]
В fig-Форте и Форте-79 слово ' возвращало PFA. Начиная с Форта-83 слово ' возвращает CFA, он же xt.
В Каллисто невозможно превратить токен в NFA, но есть слово 'N, которое возвращает NFA.
' в предыдущем стандарте Forth-83 (англ.)[править]
' -- addr M,83 "tick" Used in the form: ' <name> addr is the compilation address of <name>. An error condition exists if <name> is not found in the currently active search order.
' в стандарте Forth-79 (англ.)[править]
' -- addr I,171 "tick" Used in the form: ' <name> If executing, leave the parameter field address of the next word accepted from the input stream. If compiling, compile this address as a literal; later execution will place this value on the stack. An error condition exists if not found after a search of the CONTEXT and FORTH vocabularies. Within a colon-definition ' <name> is identical to [ ' <name> ] LITERAL.
' в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
' --- addr P,L0 Used in the form: . ' nnnn Leaves the parameter field address of dictionary word nnnn. As a compiler directive, executes in a colon-definition to compile the address as a literal. If the word is not found after a search of CONTEXT and CURRENT, an appropriate error message is given. Pronounced "tick".
Реализация[править]
Слово ' взято из Форта и очень удобно, если вам необходим именно токен. Большую гибкость предоставляет более общее каллистянское слово 'N, возвращающее NFA найденного слова. См. также стандартное слово Форта ['].
3614 ;#Tick 3615 ; ' ( −− т ) Дать токен (CFA) следующего слова. 3616 LTICKCFA: .DB 1 3617 .TEXT "'" ; ( −− cfa ) 3618 .DW LTICK 3619 TICKCFA: .DW CALL, TICK,BRAN,RN2CFA ; Стандартный ' реализован поверх каллистянского 'N
Реализации из SP-Forth 4.20:
: ' ALSO TC-WL ' PREVIOUS ;
: ' ( "<spaces>name" -- xt ) \ 94 \ Пропустить ведущие пробелы. Выделить name, ограниченное пробелом. Найти name \ и вернуть xt, выполнимый токен для name. Неопределенная ситуация возникает, \ если name не найдено. \ Во время интерпретации ' name EXECUTE равносильно name. ALSO NON-OPT-WL CONTEXT ! PARSE-NAME SFIND 0= PREVIOUS IF -321 THROW THEN ( -? ) ;
Советская реализация[править]
Юрий Семёнов приводит следующее описание слова ' через -FIND (стр. 74):
: ' -FIND 0= 0 ?ERROR ( если XXXX не найдено, то сообщение об ошибке) DROP LITERAL ; IMMEDIATE
У Баранова-Ноздрунова определение слова ' выглядит так (стр. 65):
: ' ( ---> A ) BL WORD FINDN IF NAME> EXIT THEN COUNT TYPE -1 ABORT" ?" ;
Описание и определение слова ' в ядре ФОРТ-ЕС:
' ->CFA ДАТЬ CFA ДЛЯ СЛЕДУЮЩЕГО СЛОВА 41 Экран номер 41 ( 31.03.86 -TRAILING ' ['] [COMPILE] LOAD THRU ;S --> ) : ' ( ->CFA) -FIND 0= IF BADWORD THEN ;
Ссылки[править]
- Исходный текст слова ' в Каллисто Классик 1.0
- Слово ' (tick) в стандарте ANS Forth (англ.) и комментарий к нему (англ.)
- Слова ' (tick) и комментарий к нему в черновике Forth 200x (англ.)
- ФУНКЦИОНИРОВАНИЕ ФОРТ-СИСТЕМЫ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Under the Hood в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |