Я конвертирую некоторый функционирующий код на Haskell, который использует Parsec, чтобы вместо этого использовать Attoparsec в надежде на повышение производительности.Я внес изменения, и все компилируется, но мой анализатор работает неправильно.
Я анализирую файл, который состоит из различных типов записей, по одному на строку.Каждая из моих отдельных функций для анализа записи или комментария работает правильно, но когда я пытаюсь написать функцию для компиляции последовательности записей, парсер всегда возвращает частичный результат, потому что он ожидает большего ввода.
Этодва основных варианта, которые я попробовал.У обоих одинаковые проблемы.
items :: Parser [Item]
items = sepBy (comment <|> recordType1 <|> recordType2) endOfLine
Для этого второго я изменил парсеры записей / комментариев, чтобы они использовали символы конца строки.
items :: Parser [Item]
items = manyTill (comment <|> recordType1 <|> recordType2) endOfInput
Что-то не так смой подход?Есть ли другой способ добиться того, что я пытаюсь сделать?