Я использую Happy для создания синтаксического анализатора.Переопределение «Internal Happy Error» - notHappyAtAll
Я обнаружил, что, когда я даю ему жетоны, которые соответствуют части грамматики на более низком уровне, чем верхний уровень (например, если он выражает свое собственное, это не является частью утверждения), я получаю «Внутренняя счастливая ошибка», а не ошибка синтаксического анализа.
Есть ли способ переопределить notHappyAtAll
, чтобы я мог напечатать лучшее сообщение об ошибке, чем «Internal Happy Error»? Очевидно, кроме изменения автоматически сгенерированного файла парсера, поскольку я должен был бы это делать каждый раз, когда я обновлял грамматику.
Возможно [счастливые документы] (http://haskell.org/happy/doc/html/sec-monads.html#sec-exception) помощь? Отказ от ответственности: может быть, нет. –
Если вы хотите совпадать с «фрагментами», а не всегда на верхнем уровне вашей грамматики, вам понадобятся несколько стартовых символов - см. Раздел 2.7 руководства Happy. –
Вы указали директиву ошибки в верхней части своей грамматики? Это должно быть формы '% error {parseError}' - 'parseError' - некоторая пользовательская функция. См. Главу 2 руководства. –