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

         

Динамическая идентификация - часть 4


В заключение осталось только аналогичным образом переопределить слово := (см. ):

: := " АДР" FIND DROP EXECUTE [COMPILE] ( ;

Сравнивая получившиеся определения, мы видим, что они существенно сократились в объеме: из них исчезли анализ текущего контекста и (соответственно) условные операторы, предписывающие выполнение разных действий в зависимости от результата анализа. Описанный подход особенно перспективен, когда требуется выполнить много разных операций над объектами, каждая из которых выполняется по-разному в зависимости от текущего контекста. Разбиение большой операции с множеством проверок и разветвлений на ряд мелких, каждая из которых выполняется в своем контексте, не только упрощает программирование и отладку, но и сокращает объем программы, так как эти мелкие специализированные операции для разных объектов часто можно совмещать:

К DEFINITIONS : ЗНАЧ ( PFA->N:ЗНАЧ) [ П ] ЗНАЧ ;

В приведенном определении слово ЗНАЧ для списка К не программируется вновь, а определяется через такое же слово из контекста П, тем самым сокращается общий объем отладки. Следуя по этому пути, можно вообще исключить слово АДР из списка К, поскольку в этом случае сообщение об ошибке выдаст слово АДР из списка FORTH, правда, с меньшей информацией — не будет напечатано имя константы. Если механизм динамической идентификации применяется для ряда не связанных между собой целей, то может оказаться неудобным выполнять переключение контекстов через одну и ту же глобальную переменную CONTEXT и выполнять поиск слова в текущем контексте словом FIND. Как правило, все форт-системы имеют более элементарное слово (FIND), которое получает в качестве параметра текстовую строку с именем слова и вход в список статей, в котором нужно выполнять поиск. Используя это слово, можно организовать поиск слова в любом списке или группе списков, уже не связывая его с текущим порядком поиска, принятым для слова FIND.

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




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