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



         

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


В этих определениях для контроля вместе с адресом зарезервированного места передается число 1, которое проверяется с помощью слова ?PAIRS в словах, использующих переданный адрес. Такой простой способ контроля на практике оказывается вполне достаточным. При этом программист может встроить любой другой контроль по своему желанию.

Приведенное определение условного оператора связано с реализацией стандартных слов BRANCH и ?BRANCH, выполняющих переходы в шитом коде. Из соображений эффективности эти слова обычно задают как подпрограммы нижнего уровня в машинном языке. Тогда в зависимости от архитектуры ЭВМ может оказаться предпочтительней не абсолютный, как в приведенной реализации, а относительный адрес перехода, компилируемый в шитый код сразу после ссылки на статью BRANCH или ?BRANCH. Чтобы сделать определения, использующие эти слова, машиннонезависимыми, стандарт предусматривает следующие слова для организации таких ссылок:

>MARK ---> A >RESOLVE A ---> <MARK ---> A <RESOLVE A --->

Слово >MARK (от MARK — отметить) резервирует место для ссылки вперед и оставляет адрес зарезервированного места на стеке. Слово >RESOLVE (от RESOLVE — разрешить) снимает этот адрес со стека и вписывает в него ссылку на текущую вершину словаря в соответствии с принятой реализацией переходов в шитом коде, согласованной с реализацией слов BRANCH и ?BRANCH. Аналогично слова <MARK и <RESOLVE предназначены для организации ссылок назад. Слово <MARK кладет на стек текущий адрес вершины словаря, а слово <RESOLVE компилирует ссылку на переданную точку. Окончательно определения слов условного оператора можно задать следующим образом (как они и выглядят в большинстве практических реализаций):

: IF ( ---> A,1 ) COMPILE ? BRANCH >MARK 1 ; IMMEDIATE : THEN ( A,1 ---> ) 1 ?PAIRS >RESOLVE ; IMMEDIATE : ELSE ( A1,1 ---> A2,1 ) 1 ?PAIRS COMPILE BRANCH >MARK SWAP >RESOLVE 1 ; IMMEDIATE

Аналогичным образом реализуются слова для циклов с проверкой (рис. 2.6):




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