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



ЗАКЛЮЧЕНИЕ - часть 2


Далее повторяем цикл входного потока.

Для сравнения опишем алгоритм компилятора двоеточия. Начинаем цикл. В теле цикла выбираем очередное слово из входного потока и осуществляем поиск его определения в словаре. Если определение найдено, - это слово Форта. Слово немедленного исполнения сразу выполняем и проверяем, не исчерпан ли стек. Для слова, не имеющего признака немедленного исполнения, определяем адрес компиляции. Если определение слова в словаре не найдено, пытаемся преобразовать его в число и скомпилировать в качестве литерала. Затем повторяем цикл до тех пор, пока не исчерпается входной поток или система не будет переведена в режим интерпретации. Схема рассмотренного алгоритма:

(Если вам доступен исходный текст системы, мы рекомендуем вам изучить настоящие определения слов INTERPRET и ].)

Сравните обе диаграммы, и вы увидите, что интерпретатор может вызывать ] для того, чтобы определить, будет данное слово выполняться или компилироваться. Такая простота в организации системы позволит вам легко добавлять новые компилирующие слова.

Итак, существуют два способа расширения Форт-компилятора:

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

    Ниже приводится перечень слов Форта, рассмотренных в настоящей главе.

    DOES>

    период-выполнения: ( - a)

    Используется при создании определяющих слов. Отмечается конец участка периода компиляции и начала участка периода выполнения. Операции периода выполнения определены на высокоуровневом форте. Во время выполнения на стеке будет находиться pfa определенного слова.

    IMMEDIATE

    ( - )

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

    COMPILE xxx

    ( - )

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

    LITERAL

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

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

    [

    ( -- )

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

    ]

    ( -- )

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

    [COMPILE] xxxx

    ( - )

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

    INTERPRET

    ( -- )

    Интерпретация текста из входного потока по указателю >IN до исчерпания входного потока.




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