Слово ;: различия между версиями
AtH (обсуждение | вклад) |
AtH (обсуждение | вклад) |
||
(не показаны 23 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
''';''' (точка с запятой) — стандартное слово [[Каллисто]]. | |||
; ( −− ) Закончить определение через двоеточие. | |||
[[Файл:CallistoSave.png|thumb|right|264px|Пример работы слова ;]] | [[Файл:CallistoSave.png|thumb|right|264px|Пример работы слова ;]] | ||
Слово ; завершает [[Слово :|определение через двоеточие]]. | |||
== Ввод слова ; == | == Ввод слова ; == | ||
Строка 8: | Строка 8: | ||
== ; в стандарте ANS Forth == | == ; в стандарте ANS Forth == | ||
<PRE> | |||
6.1.0460 ; "semicolon" CORE | 6.1.0460 ; "semicolon" CORE | ||
Интерпретация: Семантика интерпретации для этого слова не определена. | Интерпретация: Семантика интерпретации для этого слова не определена. | ||
Строка 34: | Строка 35: | ||
определить, действительно ли должно быть предпринято какое либо действие, чтобы | определить, действительно ли должно быть предпринято какое либо действие, чтобы | ||
позволить ему быть найденным. | позволить ему быть найденным. | ||
</PRE> | |||
== История == | |||
Слово ; является одним из самых древних сохранившихся слов Форта. | |||
Впервые оно появилось в 1964 году под именем END в программе CURVE (по информации из журнала «Байт» за август 1980 года, стр. 76 она называлась TRANSPORT), написанной Чак Муром на Алголе для Burroughs B5500 ([https://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BB%D0%B0%D0%B1%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D1%8F_SLAC Национальная ускорительная лаборатория SLAC], [https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%8D%D0%BD%D1%84%D0%BE%D1%80%D0%B4%D1%81%D0%BA%D0%B8%D0%B9_%D1%83%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%82%D0%B5%D1%82 Стэнфордский университет]), где означало остановку интерпретации сохранённого определения. | |||
Вот пример одного из ранних (1970 год) определений слова Чаком Муром для 2К×48бит версии Форта на Burroughs B-5500, которое выглядит, как современное: | |||
: SHIFT -1 @T 0 -3 =T ; | |||
Хотя из {{colorForth}} убрано двоеточие в пользу кодирования определяемого слова красным цветом, слово ; сохранено. Его использование необязательно — при его отсутствии управление передаётся следующему определяемому слову. | |||
== ; в предыдущем стандарте Forth-83 (англ.) == | === ; в предыдущем стандарте Forth-83 (англ.) === | ||
; -- C,I,79 "semi-colon" | ; -- C,I,79 "semi-colon" | ||
sys -- (compiling) | sys -- (compiling) | ||
Строка 45: | Строка 57: | ||
return" "9.4 Compilation" | return" "9.4 Compilation" | ||
== ; в стандарте Forth-79 (англ.) == | === ; в стандарте Forth-79 (англ.) === | ||
; I,C,196 "semi-colon" | ; I,C,196 "semi-colon" | ||
Terminate a colon definition and stop compilation. If | Terminate a colon definition and stop compilation. If | ||
Строка 51: | Строка 63: | ||
before encountering ; an error condition exists. | before encountering ; an error condition exists. | ||
== ; в fig-FORTH Release 1 glossary, май 1979 (англ.) == | === ; в fig-FORTH Release 1 glossary, май 1979 (англ.) === | ||
; P,C,L0 | ; P,C,L0 | ||
Terminate a colon-definition and stop further compilation. Compiles | Terminate a colon-definition and stop further compilation. Compiles | ||
the run-time ;S. | the run-time ;S. | ||
== | == Реализация == | ||
<pre> | |||
2510 ;#Semi | |||
2511 ; ; I ( −− ) Закончить определение через двоеточие. | |||
2512 LSMI: .DB 81H | |||
2513 .DB 3BH ; ";" | |||
2514 .DW LCOLON | |||
2515 SMI: .DW CALL, QCSP, COMP,EXIT, SMUG, LBRAC, EXIT | |||
</pre> | |||
В 11-й главе американского [http://www.forth.com/starting-forth/sf11/sf11.html Starting FORTH] ''(англ.)'' слово ; определяется через POSTPONE | |||
Вот это определение: | |||
: ; POSTPONE EXIT SMUDGE POSTPONE [ ; IMMEDIATE | |||
Реализации из SP-Forth 4.20: | |||
<pre> | |||
: ; ( -- ) | |||
RET, [COMPILE] [ SMUDGE | |||
ClearJpBuff | |||
0 TO LAST-NON | |||
; IMMEDIATE | |||
</pre> | |||
<pre> | |||
C" SHERE-TAB-CUR" FIND NIP | |||
[IF] | |||
: ; PREVIOUS | |||
?SET SetOP POSTPONE ; [I] OPT OPT_CLOSE | |||
DP @ SHERE-TAB-CUR @ CELL- ! ; IMMEDIATE | |||
[ELSE] | |||
: ; PREVIOUS | |||
?SET SetOP POSTPONE ; [I] OPT OPT_CLOSE ; IMMEDIATE | |||
[THEN] | |||
</pre> | |||
== | === Советская реализация === | ||
Юрий Семёнов приводит следующее | Юрий Семёнов приводит следующее определение слова ; (стр. 138): | ||
: ; ?CSP COMPILE EXIT ( завершает описание слова, записав в | : ; ?CSP COMPILE EXIT ( завершает описание слова, записав в | ||
PFA нового слова ссылку на оператор EXIT) | PFA нового слова ссылку на оператор EXIT) | ||
Строка 72: | Строка 112: | ||
IMMEDIATE | IMMEDIATE | ||
Описание и определение слова ; в ядре ФОРТ-ЕС: | |||
<PRE> | |||
; HK -> ЗАКОНЧИТЬ ОПРЕДЕЛЕНИЕ ЧЕРЕЗ ДВОЕТОЧИЕ 32 | |||
Экран номер 32 | |||
( 31.03.86 CONSTANT VARIABLE 2CONSTANT 2VARIABLE : ; ) | |||
: ; ( -> ) ?CSP COMPILE EXIT UNSMUDGE [COMPILE] [ ; IMMEDIATE | |||
</PRE> | |||
Определение слова ; в FORTH ИТЭФ: | |||
<PRE> | |||
HEAD 301Q,,273Q,SMI,$COL ; ; | |||
DW QCSP,COMP,SEMI,SMUG,LBRAC,SEMI | |||
</PRE> | |||
== Ссылки == | == Ссылки == | ||
* {{Исходник|Semi|;}} | |||
* См. [[слово :]] и [[Символ с кодом 59|символ ';']] | * См. [[слово :]] и [[Символ с кодом 59|символ ';']] | ||
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0460 ; (semicolon)] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.0460 комментарии к нему] в стандарте ANS Forth ''(англ.)'' | * Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0460 ; (semicolon)] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.0460 комментарии к нему] в стандарте ANS Forth ''(англ.)'' | ||
* Слово [http:// | * Слово [http://forth-standard.org/standard/core/Semi ; (semicolon)] и [http://forth-standard.org/standard/rationale#rat:core:; комментарий к нему] в черновике Forth 200x ''(англ.)'' | ||
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\01.OSNOWY%20FORTA ОСНОВЫ ФОРТА] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»] | |||
* [http://www.forth.com/starting-forth/sf1/sf1.html Fundamental Forth] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)'' | |||
* [http://www.forth.com/starting-forth/sf11/sf11.html Extending the Compiler] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)'' | |||
Строка 85: | Строка 141: | ||
[[Категория:Слова высокого уровня]] | [[Категория:Слова высокого уровня]] | ||
[[Категория:Слова с признаком IMMEDIATE]] | [[Категория:Слова с признаком IMMEDIATE]] | ||
[[Категория: | [[Категория:Компилирующие слова]] | ||
[[Категория:Стандартные слова]] | |||
[[Категория:1994 CORE]] | |||
[[Категория:2012 CORE]] |
Текущая версия от 19:06, 13 ноября 2017
; (точка с запятой) — стандартное слово Каллисто.
; ( −− ) Закончить определение через двоеточие.
Слово ; завершает определение через двоеточие.
Ввод слова ;[править]
В режиме NUM нажмите чёрную клавишу С/П
; в стандарте ANS Forth[править]
6.1.0460 ; "semicolon" CORE Интерпретация: Семантика интерпретации для этого слова не определена. Компиляция: ( C: colon-sys -- ) Добавляет семантику времени-выполнения ниже к текущему определению. Заканчивает текущее определение, позволяя ему быть найденным в словаре, и вводит состояние интерпретации, потребляя colon-sys. Если указатель области данных не выровненный, резервирует достаточно области данных для его выравнивания. Время-выполнения: ( -- ) ( R: nest-sys -- ) Возвращение к вызывающему определению, определенному nest-sys. См.: 3.4 Интерпретатор текста Forth, 3.4.5 Компиляция. A.6.1.0460 ; Типичное использование: : name ... ; Одна функция, выполняемая ; и ;CODE это позволить текущему определению быть найденным в словаре. Если текущее определение было создано с помощью :NONAME текущее определение не имеет имя определения и таким образом не может быть найдено в словаре. Если :NONAME реализовано, компилятор Forth должен сохранить достаточно информации о текущем определении, чтобы позволить ; и ;CODE определить, действительно ли должно быть предпринято какое либо действие, чтобы позволить ему быть найденным.
История[править]
Слово ; является одним из самых древних сохранившихся слов Форта.
Впервые оно появилось в 1964 году под именем END в программе CURVE (по информации из журнала «Байт» за август 1980 года, стр. 76 она называлась TRANSPORT), написанной Чак Муром на Алголе для Burroughs B5500 (Национальная ускорительная лаборатория SLAC, Стэнфордский университет), где означало остановку интерпретации сохранённого определения.
Вот пример одного из ранних (1970 год) определений слова Чаком Муром для 2К×48бит версии Форта на Burroughs B-5500, которое выглядит, как современное:
: SHIFT -1 @T 0 -3 =T ;
Хотя из colorForth убрано двоеточие в пользу кодирования определяемого слова красным цветом, слово ; сохранено. Его использование необязательно — при его отсутствии управление передаётся следующему определяемому слову.
; в предыдущем стандарте Forth-83 (англ.)[править]
; -- C,I,79 "semi-colon" sys -- (compiling) Stops compilation of a colon definition, allows the <name> of this colon definition to be found in the dictionary, sets interpret state and compiles EXIT (or a system dependent word which performs an equivalent function). sys is balanced with its corresponding : . See: EXIT : "stack, return" "9.4 Compilation"
; в стандарте Forth-79 (англ.)[править]
; I,C,196 "semi-colon" Terminate a colon definition and stop compilation. If compiling from mass storage and the input stream is exhausted before encountering ; an error condition exists.
; в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
; P,C,L0 Terminate a colon-definition and stop further compilation. Compiles the run-time ;S.
Реализация[править]
2510 ;#Semi 2511 ; ; I ( −− ) Закончить определение через двоеточие. 2512 LSMI: .DB 81H 2513 .DB 3BH ; ";" 2514 .DW LCOLON 2515 SMI: .DW CALL, QCSP, COMP,EXIT, SMUG, LBRAC, EXIT
В 11-й главе американского Starting FORTH (англ.) слово ; определяется через POSTPONE
Вот это определение:
: ; POSTPONE EXIT SMUDGE POSTPONE [ ; IMMEDIATE
Реализации из SP-Forth 4.20:
: ; ( -- ) RET, [COMPILE] [ SMUDGE ClearJpBuff 0 TO LAST-NON ; IMMEDIATE
C" SHERE-TAB-CUR" FIND NIP [IF] : ; PREVIOUS ?SET SetOP POSTPONE ; [I] OPT OPT_CLOSE DP @ SHERE-TAB-CUR @ CELL- ! ; IMMEDIATE [ELSE] : ; PREVIOUS ?SET SetOP POSTPONE ; [I] OPT OPT_CLOSE ; IMMEDIATE [THEN]
Советская реализация[править]
Юрий Семёнов приводит следующее определение слова ; (стр. 138):
: ; ?CSP COMPILE EXIT ( завершает описание слова, записав в PFA нового слова ссылку на оператор EXIT) SMUDGE [ ; IMMEDIATE
У Баранова-Ноздрунова определение слова ; выглядит так (стр. 69):
: ; ( ---> ) COMPILE EXIT [COMPILE] [ ; IMMEDIATE
Описание и определение слова ; в ядре ФОРТ-ЕС:
; HK -> ЗАКОНЧИТЬ ОПРЕДЕЛЕНИЕ ЧЕРЕЗ ДВОЕТОЧИЕ 32 Экран номер 32 ( 31.03.86 CONSTANT VARIABLE 2CONSTANT 2VARIABLE : ; ) : ; ( -> ) ?CSP COMPILE EXIT UNSMUDGE [COMPILE] [ ; IMMEDIATE
Определение слова ; в FORTH ИТЭФ:
HEAD 301Q,,273Q,SMI,$COL ; ; DW QCSP,COMP,SEMI,SMUG,LBRAC,SEMI
Ссылки[править]
- Исходный текст слова ; в Каллисто Классик 1.0
- См. слово : и символ ';'
- Слово ; (semicolon) и комментарии к нему в стандарте ANS Forth (англ.)
- Слово ; (semicolon) и комментарий к нему в черновике Forth 200x (англ.)
- ОСНОВЫ ФОРТА в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Fundamental Forth в книге Leo Brodie Starting Forth (англ.)
- Extending the Compiler в книге Leo Brodie Starting Forth (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |