在解析时显示自定义错误Happy Haskell

问题描述:

我正在使用Alex和Happy在Haskell编写monadic解析器。在解析时显示自定义错误Happy Haskell

我的误差函数的定义如下:

parseError :: Token -> Alex a 
parseError _ = alexError "error occurred" 

如何发送自定义错误(如不正确类型,而试图添加一个字符串到数字)解析过程?


UPDATE

解析器并不需要做的类型检查,我正在做的制作里面,因为我跟踪的操作数类型。 正如在评论中所说,我不能使用parseError,那么有没有办法打印错误并停止解析器?

+0

只是通过不同的字符串比'生产“发生错误”''到alexError' ...? –

+0

好吧,但我需要从我的生产规则中传递字符串,'parseError'函数只需要一个'Token'参数,而不是我想要的任何字符串 – zeb

+0

我承认我不是很熟悉alex或happy,所以原谅如果这是一个愚蠢的问题,但是:如果'parseError'没有做你想做的事情,为什么不改变'parseError',或者避免完全使用它来支持'alexError'函数来做你想做的事情? –

我已经实现这个功能解决了这个问题:

fatalError :: (Show a1, Show a) => [Char] -> a -> a1 -> t 
fatalError s l c = error ("Error at line " ++ (show l) ++ " column " ++ (show c) ++ ": " ++ s) 

,我把它从当检测到错误