Начальный курс программирования на языке Форт

         

УКАЗАТЕЛИ ВХОДНОГО ПОТОКА, ИСПОЛЬЗУЕМЫЕ СЛОВОМ WORD


Откуда и что читать, слово WORD «понимает» по двум указателям. Первый из них >IN1

- относительный указатель. Он показывает, на сколько байтов относительно начала буфера входного потока уже продвинулся интерпретатор. Допустим, вы ввели текст STAR 30 SPACES

и нажали клавишу RETURN. Вначале переменная >IN устанавливается в нуль. После того как слово WORD прочитало строку STAR из входного потока, значение >IN становится равным 5.

1 Для пользователей систем фиг-Форта. В вашей системе это слово IN. Чтобы обеспечить соответствие нашему указателю, переопределите его:

: >IN ( -- a) IN ;

В своих программах вы можете изменять содержимое >IN с тем, чтобы установить необходимый вам порядок интерпретации слов.

Второй указатель - BLK. Вспомните, что входной поток представляет собой последовательность символов, которые могут быть либо в буфере входного текста, либо в загружаемом блоке. Слово BLK указывает, где именно они находятся. Это слово играет роль и флага, и указателя. Если BLK содержит нуль, то WORD сканирует буфер входного текста, а если ненулевое значение, то WORD сканирует блок, номер которого находится в BLK (поэтому вы не можете загружать блок 0).

Ниже показан адрес интерпретируемого в данный момент текста:СОДЕРЖИМОЕ BLK ТЕКУЩИЙ АДРЕС, ИСПОЛЬЗУЕМЫЙ СЛОВОМ WORD Нуль TIB >IN " + (>IN байт относительно начала буфера входного текста) Не нуль BLK @ BLOCK >IN @ + (>IN байт относительно начала блочного буфера)

На Форте адрес сканирования для слова WORD вычисляется следующим образом:... BLK @ ?DUP IF BLOCK ELSE TIB THEN >IN @ + ...

Заметьте, что WORD обращается к слову BLOCK, поэтому если текст интерпретируется из блока, то его содержимое обязательно уже находится в некотором буфере.



>IN

( -- a)

Пользовательская переменная, содержания смещение обрабатываемого символа относительно начала входного потока.

BLK

( -- а)

Пользовательская переменная, содержащая номер блока во внешней памяти, интерпретируемого в качестве входного потока. Если в BLK содержится нуль, то входной поток поступает из буфера входного текста.

  



Содержание раздела