Редактирование: INTERPRET

Перейти к навигации Перейти к поиску
Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.

Текущая версия Ваш текст
Строка 1: Строка 1:
'''INTERPRET''' (интерпретировать) — архаичное слово [[Каллисто]]. Текстовый интерпретатор.
'''INTERPRET''' (интерпретировать) — встроенное слово [[Каллисто]]. Текстовый интерпретатор.
  INTERPRET      ( −− )                              Интерпретировать входной поток.
  INTERPRET      ( −− )                              Интерпретировать входной поток.
Интерпретирует последовательность слов, пока во входном потоке что-то есть.
Интерпретирует последовательность слов, пока во входном потоке что-то есть.
Строка 5: Строка 5:
== Ввод слова INTERPRET ==
== Ввод слова INTERPRET ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша 6|{{Серая клавиша|6}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша 2|{{Серая клавиша|2}}]]
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша 6|{{Серая клавиша|6}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша 2|{{Серая клавиша|2}}]]
== Детали реализации ==
Выход из бесконечного цикла BEGIN…AGAIN происходит необычным образом. Его обеспечивает служебное [[Пустое слово|«пустое слово»]] через манипуляцию [[Стек возвратов Каллисто|стеком возвратов]], когда исчерпывается входной поток.


== История ==
== История ==
Строка 19: Строка 22:
В 1968 году Чак Мур работал в Mohasco Industries, Inc ([https://en.wikipedia.org/wiki/Amsterdam_%28city%29,_New_York Amsterdam NY], ''англ.''). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово INTERPRET под именем QUERY
В 1968 году Чак Мур работал в Mohasco Industries, Inc ([https://en.wikipedia.org/wiki/Amsterdam_%28city%29,_New_York Amsterdam NY], ''англ.''). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово INTERPRET под именем QUERY


В 1994 году стандарт ANS заменил старинное слово INTERPRET на более гибкое EVALUATE
В 1994 году стандарт ANS заменил слово INTERPRET на EVALUATE


Иногда текстовый интерпретатор называют «внешним» (''англ.'' outer) интерпретатором, в противоположность [[Адресный интерпретатор|адресному («внутреннему») интерпретатору]].
Иногда текстовый интерпретатор называют «внешним» (''англ.'' outer) интерпретатором, в противоположность [[Адресный интерпретатор|адресному («внутреннему») интерпретатору]].
Строка 54: Строка 57:


== Реализация ==
== Реализация ==
Выход из бесконечного цикла [[BEGIN]]…[[AGAIN]] внутри INTERPRET происходит странным, но привычным для раннего Форта образом. Его обеспечивает служебное [[Пустое слово|«пустое слово»]] через манипуляцию [[Стек возвратов Каллисто|стеком возвратов]], когда исчерпывается входной поток.
Слова, исполняемые словом INTERPRET, могут вызывать [[Авост приложения|авост]].
<pre>
3381 ;#INTERPRET
3382 ; INTERPRET        ( −− )                              Интерпретировать входной поток.
3383 LINTER:        .DB    9
3384                .TEXT  "INTERPRET"
3385                .DW    LQSTAC
3386 INTER:          .DW CALL                                ; Интерпретировать последовательность слов, пока во входном потоке что−то есть.
3387 IT1:            .DW BL,WORD
3388                .DW DUP,TWOP,CAT, SAVIN,CSTOR          ; Сохранить вторую литеру, важную для обработки литерных констант в NUMBER
3389                .DW FIND, ZBRAN,IT3, STATE,UAT, LESS
3390                .DW ZBRAN,IT2, N2CFA, COMMA, BRAN,IT5
3391 IT2:            .DW N2CFA, EXEC, BRAN,IT5
3392 IT3:            .DW HERE, NUMB, DPL,AT, ONEP, ZBRAN,IT4, FL, FLITE, BRAN,IT5
3393 IT4:            .DW LITER
3394 IT5:            .DW QSTAC, BRAN,IT1
</pre>
Реализация транслятора строки INTERPRET из СП-Форта 3.07:
<PRE>
:INTERPRET
BEGIN
    BL WORD DUP C@ \ выделяем слова, пока не исчерпаем строку
WHILE
    FIND ?DUP \ ищем в словаре
    IF
      STATE @ = \ в зависимости от состояния компилируем или выполняем
      IF COMPILE, ELSE EXECUTE THEN
    ELSE
      ?LITERAL \ если не нашли, то проверяем "на литеральность"
    THEN
    ?STACK
REPEAT DROP
;
</PRE>
Реализация из SP-Forth 4.20:
<pre>
: INTERPRET_ ( -> ) \ интерпретировать входной поток
  BEGIN
    PARSE-NAME DUP
  WHILE
    SFIND ?DUP
    IF
        STATE @ =
        IF COMPILE, ELSE EXECUTE THEN
    ELSE
        S" NOTFOUND" SFIND
        IF EXECUTE
        ELSE 2DROP ?SLITERAL THEN
    THEN
    ?STACK
  REPEAT 2DROP
;
VARIABLE  &INTERPRET
' INTERPRET_ ' &INTERPRET TC-ADDR!
: INTERPRET &INTERPRET @ EXECUTE ;
</pre>
=== Советская реализация ===
Юрий Семёнов приводит следующее определение слова INTERPRET (стр. 140):
Юрий Семёнов приводит следующее определение слова INTERPRET (стр. 140):
   : INTERPRET BEGIN              ( начало бесконечного цикла)
   : INTERPRET BEGIN              ( начало бесконечного цикла)
Строка 183: Строка 122:
== Ссылки ==
== Ссылки ==
* {{Исходник|INTERPRET|INTERPRET}}
* {{Исходник|INTERPRET|INTERPRET}}
* См. слова [[STATE]], [[WORD]], [[EXECUTE]], [[LITERAL]] и [[FLITERAL]]
* [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://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\07.TISLO%20TIPOW%20TISEL ЧИСЛО ТИПОВ ЧИСЕЛ], [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\09.FUNKZIONIROWANIE%20FORT-SISTEMY ФУНКЦИОНИРОВАНИЕ ФОРТ-СИСТЕМЫ] и [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\11.RASSIRENIE%20KOMPILATORA:%20OPREDELAUSIE%20I%20KOMPILIRUUSIE%20SLOWA РАСШИРЕНИЕ КОМПИЛЯТОРА: ОПРЕДЕЛЯЮЩИЕ И КОМПИЛИРУЮЩИЕ СЛОВА] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\07.TISLO%20TIPOW%20TISEL ЧИСЛО ТИПОВ ЧИСЕЛ] в книге [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/sf9/sf9.html Under the Hood] и [http://www.forth.com/starting-forth/sf11/sf11.html Extending the Compiler] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\09.FUNKZIONIROWANIE%20FORT-SISTEMY ФУНКЦИОНИРОВАНИЕ ФОРТ-СИСТЕМЫ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\11.RASSIRENIE%20KOMPILATORA:%20OPREDELAUSIE%20I%20KOMPILIRUUSIE%20SLOWA РАСШИРЕНИЕ КОМПИЛЯТОРА: ОПРЕДЕЛЯЮЩИЕ И КОМПИЛИРУЮЩИЕ СЛОВА] в книге [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/sf9/sf9.html Under the Hood] в книге [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] ''(англ.)''




Строка 193: Строка 136:
[[Категория:Слова высокого уровня]]
[[Категория:Слова высокого уровня]]
[[Категория:Интерпретация входного потока Каллисто]]
[[Категория:Интерпретация входного потока Каллисто]]
[[Категория:Слова, способные вызывать авост приложения]]
[[Категория:Компилирующие слова]]
[[Категория:Слова, способные вызывать авост Каллисто]]
[[Категория:Архаичные слова]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)