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


НЕСКОЛЬКО ДОПОЛНИТЕЛЬНЫХ СЛОВ УПРАВЛЕНИЯ КОМПИЛЯЦИИ - часть 5


Но это решение далеко не изящно и зависит от реализации. Другой вариант - вызов слова .": : H." COMPILE НЕГАТИВНОЕ [СОМРILE] ." COMPILE -НЕГАТИВНОЕ ; IMMEDIATE

Перед вами определение компилирующего слова. Посмотрим, что оно компилирует. Если использовать его в определении : ТЕСТ H." Ура!" ;

то компилируется следующий фрагмент:

ТЕСТ

Поле связи

Поле кода

НЕГАТИВНОЕ

dot"

4

У

Р

А

!

-НЕГАТИВНОЕ

EXIT

Наше компилирующее слово выполняет три функции:

  • компилирует адрес слова НЕГАТИВНОЕ в ТЕСТ (так что НЕГАТИВНОЕ будет выполняться в период исполнения слова ТЕСТ);
  • инициирует слово .", которое в свою очередь компилирует dot", и компилирует фрагмент, набранный в строке;
  • компилирует адрес слова -НЕГАТИВНОЕ.

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

Если вам трудно сразу «переварить» все вышеизложенное, то будем надеяться, что по мере освоения этих слов в процессе практической работы вы испытаете радость познания. Возможно, другие языки и проще в изучении, но скажите, какой иной язык, кроме Форта, позволит вам расширить компилятор?

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

Ниже приведены все дополнительные слова управления компиляцией, введенные в данном разделе.

LITERAL

период-компиляции: ( n -- ) териод-вполнемия: ( -- n)

Используется только внутри определения через двоеточие. Во время компиляции значение из стека компилируется как литерал в определение. Во время выполнения это значение будет помещено на стек.

[

( -- )

Переключение с режима компиляции на режим интерпретации.

]

( -- )

Переключение на режим компиляции.

[COMPILE] xxxx

( - )

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

Полезный прием. Ввод с клавиатуры длинных определении. В некоторых Форт-системах нет возможности вводить с клавиатуры определения, состоящие из нескольких строк, потому что при нажатии клавиши RETURN работа в режиме компиляции прекращается. Выход из такого положения - инициировать компилятор в начале каждой строки:

: ?ОБЪЕМ ( длина ширина высота -- )<return> ] 6 > ROT 22 > ROT 19 > AND AND<return> ] IF ." Подходит " THEN ;<rgturn> ok




Начало  Назад  Вперед