Реализация прерываний и обработки ошибок

Чтобы не усложнять обработку ошибок и не разделять их на внутренние и внешние, реализовано всего два класса для сообщения об ошибоках, накопительные и непосредственные + возврат значений.

Накопительные ошибки и их реализация

Накопительные ошибки используются при обработке исходного текста программы при его парсинге, анализа или компиляции. Накопительнность данных ошибок заключается в том, что процесс обработки исходного текста прерывается не сразу после возникновения первой ошибки, а только после превышения определнного лимита (по умолчанию –nlc-error-limit=10).

Для логирования места возникновения ошибки используется макрос LOG_ERROR и при необходиости инкремент количества ошибок, или без оного (LOG_WARNING, LOG_INFO, LOG_DEBUG, LOG_DUMP) и обязательной пометкой термина TermPtr как причины её возникновения.

После превышения лимита накопительных ошибок или при их наличии и завершении исходного текста программы, генерируется обычное исключение std::exception с описанием причины (последней ошибки).

Непосредственные ошибки и их реализация

Непосредственные ошибки применяются при выполнении (интерпретции) тела программы и предназнчены для информирования пользователя о возникновении ошибки прерывания работы программы. Так как контекст (текущий термин или строка в исходном файла) как правило не доступны, то сразу генерируется обычное исключение std::exception с описанием причины возникновения, а идентификация места её возникновения с конкретным исходным местом в тексте программы возлагается на обработчик прерываний.

Возврат знечений

Для обработки перываний потока выполения, используются отдельные С++ классы, которые не являются наследниками std::exception, чтобы специально разделить код обработки возврата значений от обработки ошибок, а при выполнении (генерации кода) именованные прерывания могут быть реализованы вообще без использования исключений (return, break, continue или goto)!

    :IntAny --+-> :IntPlus
    (ObjPtr)  |
              |
              +-> :IntMinus