У меня нет опыта ANTLR (к сожалению ...), но НЕТ способа заставить код на С работать с исключениями. Я отсылаю вас к более эффективному C ++, пункт 9: «Использование деструкторов для предотвращения утечек ресурсов»
Идея состоит в том, что если во время очистки выдается исключение, у вас нет информации о том, что уже удалено (), а что нет, и ваше программное обеспечение будет пропускать память. Если вы используете auto_ptr / scroped_ptr, вам не нужно об этом беспокоиться, так как компилятор сам с этим справится.
Но эта идиома только для C ++, C не был разработан с учетом исключений.