Но это решение далеко не
Но это решение далеко не изящно и зависит от реализации. Другой вариант - вызов слова .": : 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
Содержание Назад Вперед