Слово [
[ (открывающая квадратная скобка) — стандартное слово Каллисто. Перейти в состояние исполнения.
[ ( −− ) Установить состояние исполнения.
Переключить текстовый интерпретатор Каллисто в состояние исполнения (интерпретации). При исполнения введённые слова исполняются сразу же после их нахождения в словаре.
Ввод слова [[править]
В режиме NUM нажмите чёрную клавишу БП
[ в стандарте ANS Forth[править]
6.1.2500 [ "left-bracket" CORE Интерпретация: Семантика интерпретации для этого слова не определена. Компиляция: Исполняет семантику выполнения, данную ниже. Выполнение: ( -- ) Вводит состояние интерпретации. [ - слово немедленного выполнения. См.: 3.4 Интерпретатор текста Forth, 3.4.5 Компиляция, 6.1.2540 ]. A.6.1.2500 [ Типичное использование: : X ... [ 4321 ] LITERAL ... ;
История[править]
Состояние исполнения Каллисто напоминает режим автоматической работы ЭКВМ, ведь в этом состоянии вводимые слова исполняются сразу же после их ввода.
Слово [ вошло во все стандарты Форта и хорошо устоялось, не изменившись со времён fig-Форта в 1979 году.
[ в предыдущем стандарте Forth-83 (англ.)[править]
[ -- I,79 "left-bracket" -- (compiling) Sets interpret state. The text from the input stream is subsequently interpreted. For typical usage see LITERAL . See: ]
[ в стандарте Forth-79 (англ.)[править]
[ I,125 "left-bracket" End the compilation mode. The text from the input stream is subsequently executed. See ]
[ в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
[ P,L1 Used in a colon-definition in form: : xxx [ words ] more ; Suspend compilation. The words after [ are executed, not compiled. This allows calculation or compilation exceptions before resuming compilation with ] . See LITERAL, ].
Реализация[править]
Слово [ обнуляет переменную STATE. Поскольку переключать текстовый интерпретатор в состояние исполнения имеет смысл только из состояния компиляции, слово [ имеет признак немедленного исполнения — чтобы исполниться и выполнить своё назначение, когда происходит компиляция.
Слово [ чаще всего используется во время определения слова для временного переключения в состояние исполнения. Например, чтобы что-то подсчитать в стеке во время компиляции, а потом переключиться обратно с помощью слова ].
96 rrSTATE .EQU 1108 ; 11108 STATE − STATE=0 − исполнение, STATE=128 − компиляция 97 pSTATE .EQU 108 98 rlSTATE .EQU 1109 ; … 2347 ;#Bracket 2348 ; [ I ( −− ) Установить состояние исполнения. 2349 LLBRAC: .DB 81H 2350 .TEXT "[" 2351 .DW LDALLOT 2352 LBRAC: .DW JLBRAC ; Переключить текстовый интерпретатор в состояние исполнения 2353 JLBRAC: CX ; Прекратить компиляцию, начать исполнение (обнулить STATE) 2354 SETSTATE: PPM rlSTATE 2355 CX 2356 PPM rrSTATE 2357 KGOTO9
Реализации в SP-Forth 4.20[править]
: [ \ 94 CORE \ Интерпретация: семантика неопределена. \ Компиляция: Выполнить семантику выполнения, данную ниже. \ Выполнение: ( -- ) \ Установить состояние интерпретации. [ слово немедленного выполнения. STATE 0! ; IMMEDIATE
: [ [COMPILE] [ ; IMMEDIATE
Советская реализация[править]
У Баранова-Ноздрунова приводится следующее описание слова [ (стр. 24):
: [ ( ---> ) 0 STATE ! ; IMMEDIATE
Определение [ в ядре ФОРТ-ЕС использует слово 0!
[ Н -> ПЕРЕКЛЮЧИТЬ ТЕКСТОВЫЙ ИНТЕРПРЕТАТОР 22 В РЕЖИМ ИСПОЛНЕНИЯ Экран номер 11 ( 31.03.86 ! 0! @ С! С@ , С, EXECUTE ) : 0! ( A-> ) 0 SWAP ! ; Экран номер 22 ( 31.03.86 FILL ERASE BLANK COMPILE [ ] MIN MAX HEX DECIMAL) : [ ( -> ) STATE 0! ; IMMEDIATE
В FORTH ИТЭФ слово [ было примитивом, вот его определение:
HEAD 301Q,,333Q,LBRAC ; [ ; Прекращение компил., начало исполн. (обнуление STATE) MOV WORD PTR [DI]+54Q,0 NEXT
Ссылки[править]
- Исходный текст слова [ в Каллисто Классик 1.0
- См. слова STATE, ] и IMMEDIATE
- См. также слова ?EXEC и ?COMP
- Слово [ (left-bracket) и комментарии к нему в стандарте ANS Forth (англ.)
- Слово [ (left-bracket) и комментарий к нему в черновике Forth 200x (англ.)
- РАСШИРЕНИЕ КОМПИЛЯТОРА: ОПРЕДЕЛЯЮЩИЕ И КОМПИЛИРУЮЩИЕ СЛОВА в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Extending the Compiler в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |