2011-12-14 6 views
11

Я использую Happy для создания синтаксического анализатора.Переопределение «Internal Happy Error» - notHappyAtAll

Я обнаружил, что, когда я даю ему жетоны, которые соответствуют части грамматики на более низком уровне, чем верхний уровень (например, если он выражает свое собственное, это не является частью утверждения), я получаю «Внутренняя счастливая ошибка», а не ошибка синтаксического анализа.

Есть ли способ переопределить notHappyAtAll, чтобы я мог напечатать лучшее сообщение об ошибке, чем «Internal Happy Error»? Очевидно, кроме изменения автоматически сгенерированного файла парсера, поскольку я должен был бы это делать каждый раз, когда я обновлял грамматику.

+1

Возможно [счастливые документы] (http://haskell.org/happy/doc/html/sec-monads.html#sec-exception) помощь? Отказ от ответственности: может быть, нет. –

+0

Если вы хотите совпадать с «фрагментами», а не всегда на верхнем уровне вашей грамматики, вам понадобятся несколько стартовых символов - см. Раздел 2.7 руководства Happy. –

+0

Вы указали директиву ошибки в верхней части своей грамматики? Это должно быть формы '% error {parseError}' - 'parseError' - некоторая пользовательская функция. См. Главу 2 руководства. –

ответ

1

Эта проблема исправлена ​​в Happy 1.18.7.