2016-05-05 29 views
3

我正在使用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'函數來做你想做的事情? –

回答

1

我已經實現這個功能解決了這個問題:

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

,我把它從當檢測到錯誤