Я пишу монадический парсер, используя Alex и Happy в Haskell.Показывать пользовательские ошибки при разборе Happy Haskell
Моя функция ошибки определяется следующим образом:
parseError :: Token -> Alex a
parseError _ = alexError "error occurred"
Как я могу отправить пользовательские ошибки (как несоответствующего типа при попытке добавить строку в число) во время синтаксического анализа?
UPDATE
Анализатор не нужно делать проверку типов, я делаю это внутри производства, так как я уследить типа операндов. Как сказано в комментарии, я не могу использовать parseError
, так есть способ распечатать ошибку и остановить парсер?
Просто передать другую строку, чем '«произошла ошибка»' ', чтобы alexError' ...? –
Хорошо, но мне нужно передать строку из моего правила производства, а функция 'parseError' принимает только параметр« Token », а не любую строку, которую я хочу – zeb
Я признаю, что я не очень хорошо знаком с alex или счастлив, поэтому простите если это глупый вопрос, но: если 'parseError' не делает то, что вы хотите, почему бы не изменить' parseError' или не использовать его полностью в пользу функции 'alexError', которая делает то, что вы хотите? –