2016-05-05 4 views
3

私はHaskellのAlexとHappyを使ってモナドパーサーを書いています。Happy Haskellの解析中にカスタムエラーを表示します

私の誤差関数は次のように定義されています

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

(数に文字列を追加しようとしたときに誤ったタイプのように)私は解析中にカスタムエラーを送信するにはどうすればよいですか?私は、オペランドのタイプを追跡するため、


UPDATE

パーサは型チェックを行う必要はありません、私は生産の内側にそれをやっています。 コメントで述べたように、parseErrorを使用することはできません。そのため、エラーを出力してパーサーを停止する方法はありますか?

+0

を検出した場合にだけ、 ''に '「エラーが発生しました」とは異なる文字列を渡す生産からそれを呼び出しますalexError' ...? –

+0

しかし、私はプロダクションルールの文字列を渡す必要があります。 'parseError'関数は' Token'パラメータをとります。文字列ではありません。 – zeb

+0

私はアレックスや幸せなことをあまり知らないと認めますなぜなら、 '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) 

を、私はエラーが

関連する問題