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


ВЫХОД НА ВЕРХНИЙ УРОВЕНЬ


Вам, вероятно, интересно узнать, что произойдет после того, как мы исполнили последний EXIT в слове ОБЕД Чей адрес возврата находится в стеке? Куда предстоит вернуться.

Напомним, что слово ОБЕД было запущено на выполнение словом EXECUTE, которое является компонентой слова INTERPRET. Последнее осуществляет циклический процесс непрерывной проверки входного потока. Допустим, вы уже отобедали, и во входном потоке ничего нет для интерпретирования.

В этом случае при выполнении EXIT слова INTERPRET вы выходите на определение самого верхнего уровня с именем QUIT. В упрощенной форме QUIT выглядит следующим образом:: QUIT BEGIN RESET QUERY INTERPRET ." ok" CR FALSE UNTIL ; где RESET очищает стек возвратов, а QUERY настраивает входной поток на буфер входного текста.

(Определение QUIT в вашей системе может отличаться от приведенной.) Как видите, после слова INTERPRET следует сообщение точки - кавычки «ok» и CR, что и должно появиться на экране после завершения интерпретации. Далее идет выражение FALSE UNTIL, которое, безусловно, обеспечивает возврат в начало цикла, где вы очищаете стек возврата и снова ожидаете ввода.

Если исполнить QUIT на любом уровне выполнения, то немедленно прекратится вычисление по нашей программе и принудительно начнется выполнение цикла QUIT. Стек возвратов очистится (независимо от того, сколько в нем находится уровней адресов возврата, после чего вы никогда больше не сможете воспользоваться ни одним из них), а система будет ожидать ввода. Теперь вам понятно, почему слово QUIT может применяться для того, чтобы сообщение «ok» не выдавалось.

Другие способы использования QUIT. Еще два важных слова обращаются к QUIT: ABORT, которое, кроме всего прочего, очищает стек данных, и ABORT". Второе слово

  • выбирает из стека флаг и определяет по нему, нужно ли выполнять ABORT (при истинном значении нужно);
  • перед аварийным завершением выдает сообщение, предписанное вами для конкретной аварийной ситуации.

Слово ABORT" было введено в конце гл. 4. Как правило, оно применяется в начале определений пользовательских слов (наивысшего уровня) для того, чтобы проверить хотя бы наличие аргументов в стеке, требуемых для выполнения этих слов. Например, вы можете написать следующее определение: : LIST ( n -- ) ГЛУБИНА-СТЕКА 1 < ABORT" Нет номера блока " LIST ;

или в более общем виде:: АРГУМЕНТЫ ( n -- ) ГЛУБИНА-СТЕКА < NOT ABORT" Значения?" ;

что может быть использовано так: : LIST ( n -- ) 1 АРГУМЕНТЫ LIST ;




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



Книжный магазин