0

私はattoparsecパーサーを持っていて、それをテストしていますが、パーサーの一部にコメントしてテストを実行すると、パーサーが返されずLeft "parse error at line ..."、代わりにRight [].

parseOnlyこれ以上入力がないことを明確にするために使用していることに注意してください。

それ以外の場合は、部分的に解析された入力を取得すると便利です。これは間違いなく便利であり、私はそれを持っていることをうれしく思います。ただし、入力全体が消費されていないことをお知らせしたいと思います。たぶん、最後に消費された文字の文字オフセットを取得するか、それが必要な場合は、少なくともオプションが返されLeftます。

関連する場合、パーサーはそこにあります。

たとえば、次の行にコメントすると:

            <|> PlainText <$> choice (string <$> ["[", "]", "*", "`"])

テストを実行すると、たとえば次のようになります。

  1) notes parsing tests parses notes properly
       simple test
       expected: Right [NormalLine [PlainText "one line* # hello world"]]
        but got: Right []

これはそのテストからのものです。

4

1 に答える 1

2

入力全体を消費することがテストのプロパティであるか、テストだけであるかに応じて、orでparseNoteDocumentどちらかを拡張します。endOfInputatEnd

Parser次のように、ドキュメントに適切なを定義することをお勧めします

parseNoteDocument' :: Text -> Parsec NoteDocument
parseNoteDocument' = many parseLine

そして、それに関して定義parseNoteDocumentします。次に、次を使用parseNoteDocument'して特定のテキストを解析するヘルパーを定義することにより、テストで使用できます

parseNoteDocument' <* endOfInput

入力全体が確実に消費されるようにします。

于 2015-06-21T19:14:33.200 に答える