Текущая версия |
Ваш текст |
Строка 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 использовал [[WORD]], чтобы считывать слова, разделённые пробелами и [[NUMBER]] для оцифровки слов, в данном случае чисел с плавающей запятой. Подобный ввод в свободном формате был необычен для того времени, но более эффективным (компактней и быстрее) и надёжным. Фортрановский ввод был отформатирован в конкретные колонки и ошибки набора приводили к многочисленным задержкам. |
| | |
| | Этот интерпретатор использовал закодированную на Фортране конструкцию IF … ELSE IF, в поисках совпадения одного символа. |
|
| |
|
| Слова, исполняемые словом 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 (из Лиспа). |
| <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:
| | В 1966 году Чак Мур, будучи гуру MCP на 5500, работал в Realtime Systems, Inc (RSI). В то время интерпретатор принимал слова, первые 6 символов которого были значащими, так как размер слова 5500 составлял 48 бит. |
| <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
| | В 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 |
|
| |
|
| ' INTERPRET_ ' &INTERPRET TC-ADDR!
| | В 1994 году стандарт ANS заменил слово INTERPRET на EVALUATE |
|
| |
|
| : INTERPRET &INTERPRET @ EXECUTE ;
| | Иногда текстовый интерпретатор называют «внешним» (''англ.'' outer) интерпретатором, в противоположность адресному («внутреннему») интерпретатору. |
| </pre>
| |
|
| |
|
| === Советская реализация === | | == Реализация INTERPRET == |
| Юрий Семёнов приводит следующее определение слова INTERPRET (стр. 140): | | Юрий Семёнов приводит следующее описание слова INTERPRET (стр. 140): |
| : INTERPRET BEGIN ( начало бесконечного цикла) | | : INTERPRET BEGIN ( начало бесконечного цикла) |
| FINDN ( поиск очередного имени в словаре) | | FINDN ( поиск очередного имени в словаре) |
Строка 157: |
Строка 93: |
| 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: |
Строка 100: |
| [[Категория:Слова высокого уровня]] | | [[Категория:Слова высокого уровня]] |
| [[Категория:Интерпретация входного потока Каллисто]] | | [[Категория:Интерпретация входного потока Каллисто]] |
| [[Категория:Слова, способные вызывать авост приложения]] | | [[Категория:Слова Каллисто без стековых диаграмм]] |
| [[Категория:Компилирующие слова]]
| |
| [[Категория:Слова, способные вызывать авост Каллисто]]
| |
| [[Категория:Архаичные слова]]
| |