10

何らかのカスタムタイプの解析エラーを取得することは可能ですか? たとえば、エラーからコンテキストの解析に関する詳細情報を取得できればすばらしいでしょう。また、エラー情報をテキスト メッセージの形式で表示するのはあまり便利ではないようです。

4

1 に答える 1

8

Rhymoid が観察しているように、残念ながら直接は不可能です。

Parsec独自の のようなモナドと組み合わせてEitherも役に立ちません — 終了するのが早すぎる ( ParsecTover Either) か遅すぎる( EitherTover ) でしょうParsecT

どうしてもやりたい場合は、次のようにできます: ParsecTover を使用しState (SourcePos, YourErrorType)ます。(エラーがバックトラックされるため、Parsec のユーザー状態は使用できません。)

構造化されたエラー値を発行するたびに、現在の場所を使用して州に記録しますが、現在の場所が既に記録されている場所よりも遠い場合に限ります(場所が等しい場合は、何らかの方法でエラーをマージしたい場合があります。おそらく、それらのリストを保持します。)

最後に、モナド スタックを実行すると、最終状態とParseErrorを含むが与えられますSourcePos。2 つの位置が一致していることを確認してください。そうでない場合 (つまり、Parsec のSourcePos方が遠い場合)、このエラーのエラー値はありません。

于 2013-05-16T22:21:20.593 に答える