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

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

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

Текущая версия Ваш текст
Строка 1: Строка 1:
'''INTERPRET''' (интерпретировать) — архаичное слово [[Каллисто]]. Текстовый интерпретатор.
'''INTERPRET''' (интерпретировать) — стандартное слово [[Каллисто]]. Текстовый интерпретатор.
INTERPRET      ( −− )                              Интерпретировать входной поток.
 
Интерпретирует последовательность слов, пока во входном потоке что-то есть.
Интерпретирует последовательность слов, пока там что-то есть.


== Ввод слова INTERPRET ==
== Ввод слова INTERPRET ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша 6|{{Серая клавиша|6}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша 2|{{Серая клавиша|2}}]]
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша 4|{{Серая клавиша|4}}]] [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша 6|{{Серая клавиша|6}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша 2|{{Серая клавиша|2}}]]


== История ==
== INTERPRET в предыдущем стандарте Forth-83 (англ.) ==
Слово INTERPRET появилось в 1958 году в самой первой версии интерпретатора Форта, написанного Чак Муром на Фортране для IBM EDPM 704 для [https://ru.wikipedia.org/wiki/%D0%A1%D0%BC%D0%B8%D1%82%D1%81%D0%BE%D0%BD%D0%BE%D0%B2%D1%81%D0%BA%D0%B0%D1%8F_%D0%B0%D1%81%D1%82%D1%80%D0%BE%D1%84%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BE%D0%B1%D1%81%D0%B5%D1%80%D0%B2%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D1%8F САО]. Тогда оно ещё не называлось INTERPRET, так в то время команды Форта кодировались числами.
 
Первый INTERPRET использовал [[WORD]], чтобы считывать с [https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D1%84%D0%BE%D0%BA%D0%B0%D1%80%D1%82%D0%B0 перфокарт] слова, разделённые пробелами и [[NUMBER]] для оцифровки слов, в данном случае чисел с плавающей запятой. Подобный ввод в свободном формате был необычен для того времени, но более эффективным (компактней, быстрее) и надёжным. Фортрановский ввод был отформатирован в конкретные колонки, что приводило к многочисленным повторным прогонам перфокарт из-за плохо выравненных колонок.
 
Этот интерпретатор использовал закодированную на Фортране конструкцию IF … ELSE IF, в поисках совпадения одного символа.
 
В программе CURVE, написанной Чак Муром для Burroughs B5500 в 1964 году ([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 Стэнфордский университет]), интерпретатор на Алголе с помощью IF… ELSE IF разбивал входной поток на 6-символьные входные слова, называвшиеся ATOM (из Лиспа).
 
В 1966 году Чак Мур, будучи гуру MCP на 5500, работал в Realtime Systems, Inc (RSI). В то время интерпретатор принимал слова, первые 6 символов которых были значащими, так как размер слова 5500 составлял 48 бит.
 
В 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
 
Иногда текстовый интерпретатор называют «внешним» (''англ.'' outer) интерпретатором, в противоположность [[Адресный интерпретатор|адресному («внутреннему») интерпретатору]].
 
=== INTERPRET в предыдущем стандарте Forth-83 (англ.) ===
       INTERPRET    --                            M,83
       INTERPRET    --                            M,83
           Begin text interpretation at the character indexed by the
           Begin text interpretation at the character indexed by the
Строка 31: Строка 14:
           buffer.  See:  "input stream"
           buffer.  See:  "input stream"


=== INTERPRET в стандарте Forth-79 (англ.) ===
== INTERPRET в стандарте Forth-79 (англ.) ==
  INTERPRET
  INTERPRET
     Begin interpretation at the character indexed by the  contents
     Begin interpretation at the character indexed by the  contents
Строка 39: Строка 22:
     buffer.
     buffer.


=== INTERPRET в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
== INTERPRET в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
  INTERPRET
  INTERPRET
         The outer text interpreter which sequentially executes or compiles
         The outer text interpreter which sequentially executes or compiles
Строка 53: Строка 36:
         See NUMBER.
         See NUMBER.


== Реализация ==
== История ==
Выход из бесконечного цикла [[BEGIN]]…[[AGAIN]] внутри INTERPRET происходит странным, но привычным для раннего Форта образом. Его обеспечивает служебное [[Пустое слово|«пустое слово»]] через манипуляцию [[Стек возвратов Каллисто|стеком возвратов]], когда исчерпывается входной поток.
Слово INTERPRET появилось в 1958 году в самой первой версии интерпретатора Форта, написанного Чак Муром на Фортране для IBM EDPM 704 для [https://ru.wikipedia.org/wiki/%D0%A1%D0%BC%D0%B8%D1%82%D1%81%D0%BE%D0%BD%D0%BE%D0%B2%D1%81%D0%BA%D0%B0%D1%8F_%D0%B0%D1%81%D1%82%D1%80%D0%BE%D1%84%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BE%D0%B1%D1%81%D0%B5%D1%80%D0%B2%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D1%8F САО]. Тогда оно ещё не называлось INTERPRET, так в то время команды Форта кодировались числами.


Слова, исполняемые словом INTERPRET, могут вызывать [[Авост приложения|авост]].
INTERPRET использовал [[WORD]], чтобы считывать слова, разделённые пробелами и [[NUMBER]] для оцифровки слов, в данном случае чисел с плавающей запятой. Подобный ввод в свободном формате был необычен для того времени, но более эффективным (компактней и быстрее) и надёжным. Фортрановский ввод был отформатирован в конкретные колонки и ошибки набора приводили к многочисленным задержкам.
<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:
Этот интерпретатор использовал закодированную на Фортране конструкцию IF … ELSE IF, в поисках совпадения одного символа.
<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
В программе CURVE, написанной Чак Муром для Burroughs B5500 в 1964 году ([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 Стэнфордский университет]), интерпретатор на Алголе с помощью IF… ELSE IF разбивал входной поток на 6-символьные входные слова, называвшиеся ATOM (из Лиспа).


' INTERPRET_ ' &INTERPRET TC-ADDR!
В 1966 году Чак Мур, будучи гуру MCP на 5500, работал в Realtime Systems, Inc (RSI). В то время интерпретатор принимал слова, первые 6 символов которого были значащими, так как размер слова 5500 составлял 48 бит.


: INTERPRET &INTERPRET @ EXECUTE ;
В Форте ANS слово INTERPRET было заменено словом EVALUATE
</pre>


=== Советская реализация ===
Иногда текстовый интерпретатор называют «внешним» (''англ.'' outer) интерпретатором, в противоположность адресному («внутреннему») интерпретатору.
Юрий Семёнов приводит следующее определение слова INTERPRET (стр. 140):
 
== Реализация INTERPRET ==
Юрий Семёнов приводит следующее описание слова INTERPRET (стр. 140):
   : INTERPRET BEGIN              ( начало бесконечного цикла)
   : INTERPRET BEGIN              ( начало бесконечного цикла)
           FINDN          ( поиск очередного имени в словаре)
           FINDN          ( поиск очередного имени в словаре)
Строка 157: Строка 91:
       ELSE  DROP  [COMPILE]  LITERAL  THEN
       ELSE  DROP  [COMPILE]  LITERAL  THEN
   THEN  AGAIN  ;
   THEN  AGAIN  ;
Описание и определение слова INTERPRET в ядре ФОРТ-ЕС:
<PRE>
INTERPRET + -> ИНТЕРПРЕТИРОВАТЬ ВХОДНОЙ ПОТОК                  40
                    Экран номер 40
( 31.03.84      EXPECT  OUERY INTERPRET  ФОРТ-СИСТЕМА  X )
: INTERPRET ( ->) BEGIN -FIND ?DUP IF
  1+ IF EXECUTE ELSE STATE @ IF , ELSE EXECUTE THEN  THEN
  ELSE NUMBER DPL @ 1+ IF [COMPILE] 2LITERAL
    ELSE DROP [COMPILE] LITERAL THEN THEN ?STACK AGAIN ;
</PRE>
Определение слова INTERPRET в FORTH ИТЭФ:
<PRE>
            HEAD    211Q,'INTERPRE',324Q,INTER,$COL      ; INTERPRET
  IT1:      DW  DFIND,ZBRAN,IT3-$,STATE,AT,LESS
            DW  ZBRAN,IT2-$,COMMA,BRAN,IT5-$
  IT2:      DW  EXEC,BRAN,IT5-$
  IT3:      DW  HERE,NUMB,DPL,AT,ONEP,ZBRAN,IT4-$,DLITE,BRAN,IT5-$
  IT4:      DW  DROP,LITER
  IT5:      DW  QSTAC,BRAN,IT1-$
</PRE>
== Ссылки ==
* {{Исходник|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\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://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] ''(англ.)''




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

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

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