Язык Форт и его реализации



         

Стек возвратови реализация структур управления - часть 3


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

Вот еще пример определения важного стандартного слова:

: LITERAL ( A ---> A/ ) STATE @ IF COMPILE LIT , THEN ; IMMEDIATE

Слово LITERAL анализирует текущее состояние текстового интерпретатора: если это компиляция, то компилирует значение, находящееся на вершине стека, как литерал в шитый код; в противном случае это значение остается на стеке.

Теперь у нас достаточно средств, чтобы выразить стандартные структуры управления, как обычные определения, через двоеточие. Например, слова для условного оператора можно определить так:

: IF ( ---> A ) COMPILE ?BRANCH HERE 2 ALLOT ; IMMEDIATE : THEN ( A ---> ) HERE SWAP ! ; IMMEDIATE : ELSE ( A1 ---> A2 ) COMPILE BRANCH HERE 2 ALLOT HERE ROT ! ; IMMEDIATE

Все эти слова имеют признак немедленного исполнения, который придается им словом IMMEDIATE, исполненным сразу после завершения каждого определения. Это означает, что данные слова будут исполняться, а не компилироваться, как остальные, во время обработки тела определений текстовым интерпретатором форт-системы.

На рис. 2.5 показана последовательность состояний словаря и стека в разные моменты обработки фрагмента A B IF C D THEN E F в теле определения через двоеточие. Эту обработку выполняет текстовый интерпретатор, находящийся в состоянии компиляции. В результате строится последовательность адресов словарных статей в соответствии с принятой техникой шитого кода.

Рис. 2.5. Компиляция условного оператора

Пусть слова A, B, ..., F являются обычными форт-словами, не имеющими признака немедленного исполнения. Тогда соответствующие им адреса будут компилироваться на вершину словаря.

Состояние I на рис. 2.5. соответствует моменту обработки непосредственно перед вводом слова IF. На вершине словаря скомпилированы адреса статей A и B и указатель вершины HERE указывает на следующий адрес.


Содержание  Назад  Вперед