INTERPRET: различия между версиями
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
'''INTERPRET''' (интерпретировать) — стандартное слово [[Каллисто]]. Текстовый интерпретатор. | '''INTERPRET''' (интерпретировать) — стандартное слово [[Каллисто]]. Текстовый интерпретатор. | ||
INTERPRET ( −− ) Интерпретировать входной поток. | |||
Интерпретирует последовательность слов, пока во входном потоке что-то есть. | Интерпретирует последовательность слов, пока во входном потоке что-то есть. | ||
Строка 9: | Строка 9: | ||
Выход из бесконечного цикла BEGIN…AGAIN происходит необычным образом. Его обеспечивает служебное [[Пустое слово|«пустое слово»]] через манипуляцию [[Стек возвратов Каллисто|стеком возвратов]], когда исчерпывается входной поток. | Выход из бесконечного цикла BEGIN…AGAIN происходит необычным образом. Его обеспечивает служебное [[Пустое слово|«пустое слово»]] через манипуляцию [[Стек возвратов Каллисто|стеком возвратов]], когда исчерпывается входной поток. | ||
== 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 | ||
Строка 17: | Строка 34: | ||
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 | ||
Строка 25: | Строка 42: | ||
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 | ||
Строка 38: | Строка 55: | ||
this action. | this action. | ||
See NUMBER. | See NUMBER. | ||
== Реализация == | == Реализация == | ||
Строка 121: | Строка 121: | ||
== Ссылки == | == Ссылки == | ||
* {{Исходник|INTERPRET|INTERPRET}} | |||
* [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 Л.Броуди «Начальный курс программирования на языке Форт»] | ||
* [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://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 Л.Броуди «Начальный курс программирования на языке Форт»] | ||
Строка 135: | Строка 136: | ||
[[Категория:Слова высокого уровня]] | [[Категория:Слова высокого уровня]] | ||
[[Категория:Интерпретация входного потока Каллисто]] | [[Категория:Интерпретация входного потока Каллисто]] | ||
Версия от 23:35, 15 июня 2016
INTERPRET (интерпретировать) — стандартное слово Каллисто. Текстовый интерпретатор.
INTERPRET ( −− ) Интерпретировать входной поток.
Интерпретирует последовательность слов, пока во входном потоке что-то есть.
Ввод слова INTERPRET
В режиме ЛАТ последовательно нажмите клавиши 7 4 2 ИП × 6 × ИП 2
Детали реализации
Выход из бесконечного цикла BEGIN…AGAIN происходит необычным образом. Его обеспечивает служебное «пустое слово» через манипуляцию стеком возвратов, когда исчерпывается входной поток.
История
Слово INTERPRET появилось в 1958 году в самой первой версии интерпретатора Форта, написанного Чак Муром на Фортране для IBM EDPM 704 для САО. Тогда оно ещё не называлось INTERPRET, так в то время команды Форта кодировались числами.
Первый INTERPRET использовал WORD, чтобы считывать с перфокарт слова, разделённые пробелами и NUMBER для оцифровки слов, в данном случае чисел с плавающей запятой. Подобный ввод в свободном формате был необычен для того времени, но более эффективным (компактней, быстрее) и надёжным. Фортрановский ввод был отформатирован в конкретные колонки, что приводило к многочисленным повторным прогонам перфокарт из-за плохо выравненных колонок.
Этот интерпретатор использовал закодированную на Фортране конструкцию IF … ELSE IF, в поисках совпадения одного символа.
В программе CURVE, написанной Чак Муром для Burroughs B5500 в 1964 году (Национальная ускорительная лаборатория SLAC, Стэнфордский университет), интерпретатор на Алголе с помощью IF… ELSE IF разбивал входной поток на 6-символьные входные слова, называвшиеся ATOM (из Лиспа).
В 1966 году Чак Мур, будучи гуру MCP на 5500, работал в Realtime Systems, Inc (RSI). В то время интерпретатор принимал слова, первые 6 символов которых были значащими, так как размер слова 5500 составлял 48 бит.
В 1968 году Чак Мур работал в Mohasco Industries, Inc (Amsterdam NY, англ.). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово INTERPRET под именем QUERY
В 1994 году стандарт ANS заменил слово INTERPRET на EVALUATE
Иногда текстовый интерпретатор называют «внешним» (англ. outer) интерпретатором, в противоположность адресному («внутреннему») интерпретатору.
INTERPRET в предыдущем стандарте Forth-83 (англ.)
INTERPRET -- M,83 Begin text interpretation at the character indexed by the contents of >IN relative to the block number contained in BLK , continuing until the input stream is exhausted. If BLK contains zero, interpret characters from the text input buffer. See: "input stream"
INTERPRET в стандарте Forth-79 (англ.)
INTERPRET Begin interpretation at the character indexed by the contents of >IN relative to the block number contained in BLK, continuing until the input stream is exhausted. If BLK contains zero, interpret characters from the terminal input buffer.
INTERPRET в fig-FORTH Release 1 glossary, май 1979 (англ.)
INTERPRET The outer text interpreter which sequentially executes or compiles text from the input stream (terminal or disc) depending on STATE. If the word name cannot be found after a search of CONTEXT and then CURRENT it is converted to a number according to the current base. That also failing, an error message echoing the name with a " ?" will be given. Text input will be taken according to the convention for WORD. If a decimal point is found as part of a number, a double number value will be left. The decimal point has no other purpose than to force this action. See NUMBER.
Реализация
Юрий Семёнов приводит следующее определение слова INTERPRET (стр. 140):
: INTERPRET BEGIN ( начало бесконечного цикла) FINDN ( поиск очередного имени в словаре) IF ( если слово найдено) STATE @ < ( в стеке байт длины, STATE ; проверяется, не является ли слово оператором немедленного исполнения) IF ( если обычное слово) NAME> , ( запись CFA найденного слова в новое описание) ELSE ( если слово немедленного исполнения) NAME> EXECUTE ( исполнение найденного слова) THEN ELSE ( если слово не найдено, проверяется - может быть это число ?) HERE NUMBER DPL @ 1+ ( преобразование пос- ледовательности кодов ASCII в число) IF ( если число двойной длины) DLITERAL ( запись последовательности "LIT, число" в описание нового слова) ELSE DROP LITERAL ( запись в описание числа одинарной длины) THEN THEN ?STACK ( указатель стека в норме ?) AGAIN ;
У Баранова-Ноздрунова определение слова INTERPRET выглядит так (стр. 79):
: INTERPRET ( ---> ) BEGIN BL WORD FINDN ?DUP IF ( Проверить признак IMMEDIATE) 1+ IF NAME> EXECUTE ELSE NAME> STATE @ IF , ELSE EXECUTE THEN THEN ELSE ( Может быть это число?) NUMBER DPL @ 1+ IF [COMPILE] 2LITERAL ELSE DROP [COMPILE] LITERAL THEN THEN AGAIN ;
Описание и определение слова INTERPRET в ядре ФОРТ-ЕС:
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 ;
Определение слова INTERPRET в FORTH ИТЭФ:
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-$
Ссылки
- Исходный текст слова INTERPRET в Каллисто Классик 1.0
- ОСНОВЫ ФОРТА в книге Л.Броуди «Начальный курс программирования на языке Форт»
- ЧИСЛО ТИПОВ ЧИСЕЛ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- ФУНКЦИОНИРОВАНИЕ ФОРТ-СИСТЕМЫ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- РАСШИРЕНИЕ КОМПИЛЯТОРА: ОПРЕДЕЛЯЮЩИЕ И КОМПИЛИРУЮЩИЕ СЛОВА в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Fundamental Forth в книге Leo Brodie Starting Forth (англ.)
- Under the Hood в книге Leo Brodie Starting Forth (англ.)
- Extending the Compiler в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |