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



         

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


Во время работы данного определений слово R@ кладет на стек адрес возврата, указывающий в этот момент на следующий после адреса статьи LIT элемент в интерпретируемой последовательности адресов (см. рис. 2.4). Слово @ разыменовывает этот адрес, таким образом на стеке оказывается скомпилированное в шитый код число. Слова R> 2+ >R увеличивают адрес возврата на 2, чтобы обойти значение числа, т.е. чтобы оно не было воспринято как адрес некоторой статьи. Таким образом, в приведенном определении слова LIT реализован интересный способ передачи параметра через адрес возврата, невозможный в традиционных языках программирования.

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

: COMPILE ( ---> ) R@ @ , R> 2+ >R ; : BRANCH ( ---> ) R> @ >R ; : ?BRANCH ( A ---> ) R> SWAP IF 2+ ELSE @ THEN >R ;

Слово COMPILE (компилировать) комлилирует (т.е. добавляет) на вершину словаря значение, находящееся в шитом коде непосредственно за данной ссылкой на статью COMPILE. Слово BRANCH (переход) переустанавливает указатель интерпретации по адресу, скомпилированному вслед за данной ссылкой на статью BRANCH. Наконец, слово ?BRANCH снимает значение со стека и анализирует его: если это ЛОЖЬ (нуль), то оно работает, как BRANCH, — указатель интерпретации устанавливается по адресу, скомпилированному вслед за данной ссылкой на статью ?ВRANCH, а если это ИСТИНА (не нуль), то при интерпретации данной последовательности скомпилированный адрес перехода будет обойден. То обстоятельство, что в определении слова ?BRANCH используется условный оператор, для реализации условного оператора несущественно, потому что на практике слова BRANCH и ?BRANCH реализуются в форт-системах как подпрограммы нижнего уровня.


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