![](/user_photo/1334_ivfwg.png)
- •Алфавит языка
- •Лексика
- •Лексемы
- •Переменные
- •Символы и ключевые слова
- •Числовые литералы
- •Сегменты строк
- •Ограничители
- •Комментарии
- •Определение данных
- •Простые термы
- •Составные термы
- •Структуры
- •Списки
- •Недоопределённые множества
- •Унификация термов
- •Структура программы
- •Классы
- •Атрибуты классов
- •Инициализаторы слотов
- •Конструкторы
- •Проект
- •Пакеты
- •Трансляция исходных файлов
- •Структура пространства поиска
- •Экземпляры классов
- •Процессы
- •Состояния процесса
- •Порты процессов
- •Резиденты
- •Построение пространства поиска
- •Исполнение конструкторов
- •Построение слотов
- •Предложения классов
- •Атомарные формулы
- •Простые атомы
- •Бинарные отношения
- •Объявления функций
- •Подцели предложений
- •Вызовы функций
- •Выражения
- •Стратегия управления
- •Исполнение вызова предиката
- •Исполнение предложения
- •Механизм задержки исполнения
- •Откат программы
- •Акторы и повторные доказательства
- •Акторы
- •Общие переменные
- •Построение общих переменных
- •Согласование акторов процесса
- •Сопоставление локальных значений
- •Исполнение повторных доказательств
- •Согласование процессов
- •Классификация сообщений
- •Прямые сообщения
- •Потоковые сообщения
- •Исключительные ситуации
- •Встроенные предикаты и операторы
- •Корректное разрушающее присваивание
- •Актуализация производных значений
- •Сводка синтаксиса
- •Свойства, зависящие от реализации
- •Термины и определения
- •Список понятий языка
7.5. ИСКЛЮЧИТЕЛЬНЫЕ СИТУАЦИИ |
81 |
процесса 5.2, сообщение 7.4, сорт глобального значения 7.2, сорт значения порта 5.2.2, сорт порта 5.2.2, состояние порта 5.2.2, состояние процесса 5.2.1, сформированный процесс 5.2.1, терм 3, унификация 3.3, фаза 5.2, фиксированное значение 7.2, формирование миров 5.4.1, формирование процесса 5.4.1, goal 5.4.1.
7.5Исключительные ситуации
Исключительной ситуацией называется аварийное состояние вычислительного процесса, зарегистрированное во время исполнения программы. Обработкой исключительной ситуации называются действия, осуществляемые программой в случае возникновения исключительной ситуации.
Любые исключительные ситуации, возникающие в ходе доказательства, считаются локальными по отношению к самому внутреннему из вложенных акторов, в котором эта ситуация возникла. Доказательство такого актора останавливается и объявляется неудачным, все его результаты отменяются таким образом, как это происходит при откате программы.
После прекращения доказательства актора P, в том же самом мире, где был исполнен соответствующий акторный вызов, автоматически вызывается предикат
alarm(Exception),
аргументом которого является «обозначение» обрабатываемой исключительной ситуации — неотрицательное целое число или символ. Если доказательство предиката alarm заканчивается успехом, обработка исключительной ситуации завершается, после чего происходит откат из точки вызова доказательства актора P. Если доказательство заканчивается неудачей, происходит вызов исключительной ситуации с тем же обозначением на следующем уровне вложенности акторов. Если в ходе доказательства предиката alarm возникает новая исключительная ситуация, её обработка также осуществляется на следующем уровне вложенности акторов.
Если в результате возникновения исключительной ситуации прекращается доказательство некоторого актора процесса G, не являющегося вложенным по отношению к какому-либо другому актору этого процесса, управление передаётся встроенному обработчику ошибок.
![](/html/1334/253/html_RfVEKHJy9i.kbI7/htmlconvd-BWdMQE82x1.jpg)
82 Глава 7. АКТОРЫ И ПОВТОРНЫЕ ДОКАЗАТЕЛЬСТВА
Действия встроенного обработчика ошибок должны быть определены в конкретной реализации языка. При этом, однако, встроенному обработчику ошибок не разрешается самостоятельно приостанавливать или прекращать исполнение каких-либо процессов программы.
Исключительная ситуация может быть вызвана из программы с помощью встроенного управляющего оператора
break(Exception),
где Exception — обозначение исключительной ситуации. Если значение аргумента оператора не является обозначением исключительной ситуации, или если в качестве аргумента использована несвязанная переменная, исполнение оператора завершается неудачей. Допускается использование оператора break без аргумента, в этом случае обозначением исключительной ситуации считается константа 0 (ноль).
Обозначения исключительных ситуаций, вызываемых на системном уровне (за пределами текста программы), должны быть определены в конкретной реализации языка.
Пример. Вызов исключительной ситуации.
class ’Example’ specializing ’TextPage’:
[
goal:–
break(’name of exception’). alarm(Code):–
write("Exception: ",Code).
]
В результате доказательства предиката goal будет напечатано:
Exception: name of exception
Ссылки: актор 7.1, акторный вызов 6.2, вложенные акторы 7.1, встроенный оператор 8, встроенный предикат 8, доказательство актора 6.3.1, значение терма 3, исполнение предиката 6.3.1, исполнение программы 4, исполнение процесса 5.2, константа 3.1, мир 5.1, несвязанная переменная 3.1, откат 6.3.4, программа 4, процесс 5.2, символ 2.1.2, число 3.1, class 2.1.2, goal 5.4.1, specializing 2.1.2.