Text.ParserCombinators.ReadP
| Авторские права | (c) The University of Glasgow 2002 |
|---|---|
| Лицензия | в стиле BSD (см. файл libraries/base/LICENSE) |
| Сопровождающий | libraries@haskell.org |
| Стабильность | предварительная |
| Переносимость | непереносимый (локальная универсальная квантификация) |
| Безопасный Haskell | Safe |
| Язык | Haskell2010 |
Описание
Это модуль комбинаторов парсеров, изначально написанный Куном Классеном. Он разбирает все альтернативы параллельно, поэтому никогда не удерживает начало входной строки — распространённый источник утечек памяти у других парсеров. Комбинатор выбора (+++) действительно коммутативен: не имеет значения, какая ветвь «короче».
Тип ReadP
data ReadP a Исходный код
Экземпляры
Примитивные операции
get :: ReadP Char Исходный код
Считывает и возвращает следующий символ. Завершается неудачей, если ввод исчерпан.
look :: ReadP String Исходный код
Просмотр вперёд: возвращает оставшуюся часть входных данных, не потребляя её.
(+++) :: ReadP a -> ReadP a -> ReadP a infixr 5 Исходный код
Симметричный выбор.
(<++) :: ReadP a -> ReadP a -> ReadP a infixr 5 Исходный код
Локальный, исключающий, левосторонний выбор: если левый парсер локально выдаёт хотя бы один результат, правый парсер не используется.
gather :: ReadP a -> ReadP (String, a) Исходный код
Преобразует парсер в парсер, который выполняет ту же работу, но дополнительно возвращает точные считанные символы. ВАЖНОЕ ЗАМЕЧАНИЕ: gather вызывает ошибку времени выполнения, если его первый аргумент построен с использованием хотя бы одного вхождения readS_to_P.
Другие операции
pfail :: ReadP a Исходный код
Всегда завершается неудачей.
eof :: ReadP () Исходный код
Завершается успешно тогда и только тогда, когда достигнут конец ввода.
satisfy :: (Char -> Bool) -> ReadP Char Исходный код
Считывает и возвращает следующий символ, если он удовлетворяет заданному предикату.
char :: Char -> ReadP Char Исходный код
Разбирает и возвращает заданный символ.
string :: String -> ReadP String Исходный код
Разбирает и возвращает заданную строку.
munch :: (Char -> Bool) -> ReadP String Исходный код
Разбирает начальную последовательность из нуля или более символов, удовлетворяющих предикату. Всегда завершается успешно и ровно один раз, потребив все такие символы. Следовательно, НЕ эквивалентен (many (satisfy p)).
munch1 :: (Char -> Bool) -> ReadP String Исходный код
Разбирает начальную последовательность из одного или более символов, удовлетворяющих предикату. Завершается неудачей, если таких символов нет; иначе завершается успешно и ровно один раз, потребив все такие символы. Следовательно, НЕ эквивалентен (many1 (satisfy p)).
skipSpaces :: ReadP () Исходный код
Пропускает все пробельные символы.
choice :: [ReadP a] -> ReadP a Исходный код
Объединяет все парсеры из заданного списка.
count :: Int -> ReadP a -> ReadP [a] Исходный код
count n p разбирает n вхождений p подряд. Возвращается список результатов.
between :: ReadP open -> ReadP close -> ReadP a -> ReadP a Исходный код
between open close p разбирает open, затем p и, наконец, close. Возвращается только значение p.
option :: a -> ReadP a -> ReadP a Исходный код
option x p либо разбирает p, либо возвращает x, не потребляя входные данные.
optional :: ReadP a -> ReadP () Исходный код
optional p необязательно разбирает p и всегда возвращает ().
many :: ReadP a -> ReadP [a] Исходный код
Разбирает ноль или более вхождений заданного парсера.
many1 :: ReadP a -> ReadP [a] Исходный код
Разбирает одно или более вхождений заданного парсера.
skipMany :: ReadP a -> ReadP () Исходный код
Как many, но отбрасывает результат.
skipMany1 :: ReadP a -> ReadP () Исходный код
Как many1, но отбрасывает результат.
sepBy :: ReadP a -> ReadP sep -> ReadP [a] Исходный код
sepBy p sep разбирает ноль или более вхождений p, разделённых sep. Возвращает список значений, полученных от p.
sepBy1 :: ReadP a -> ReadP sep -> ReadP [a] Исходный код
sepBy1 p sep разбирает одно или более вхождений p, разделённых sep. Возвращает список значений, полученных от p.
endBy :: ReadP a -> ReadP sep -> ReadP [a] Исходный код
endBy p sep разбирает ноль или более вхождений p, разделённых и завершаемых sep.
endBy1 :: ReadP a -> ReadP sep -> ReadP [a] Исходный код
endBy p sep разбирает одно или более вхождений p, разделённых и завершаемых sep.
chainr :: ReadP a -> ReadP (a -> a -> a) -> a -> ReadP a Исходный код
chainr p op x разбирает ноль или более вхождений p, разделённых op. Возвращает значение, полученное в результате правоассоциативного применения всех функций, возвращённых op. Если вхождений p нет, возвращается x.
chainl :: ReadP a -> ReadP (a -> a -> a) -> a -> ReadP a Исходный код
chainl p op x разбирает ноль или более вхождений p, разделённых op. Возвращает значение, полученное в результате левоассоциативного применения всех функций, возвращённых op. Если вхождений p нет, возвращается x.
chainl1 :: ReadP a -> ReadP (a -> a -> a) -> ReadP a Source
Как chainl, но разбирает одно или более вхождений p.
chainr1 :: ReadP a -> ReadP (a -> a -> a) -> ReadP a Source
Как chainr, но разбирает одно или более вхождений p.
manyTill :: ReadP a -> ReadP end -> ReadP [a] Source
manyTill p end разбирает ноль или более вхождений p, пока не выполнится end. Возвращает список значений, возвращённых p.
Запуск парсера
type ReadS a = String -> [(a, String)] Source
Парсер типа a, представленный функцией, которая принимает String и возвращает список возможных результатов разбора в виде пар (a,String).
Обратите внимание, что этот тип парсера с возвратом при неудаче работает очень неэффективно; чтение большой структуры может быть довольно медленным (ср. ReadP).
readP_to_S :: ReadP a -> ReadS a Source
Преобразует парсер в функцию в стиле Haskell ReadS. Это основной способ «запустить» парсер ReadP: развёрнутый тип — readP_to_S :: ReadP a -> String -> [(a,String)]
readS_to_P :: ReadS a -> ReadP a Source
Преобразует функцию в стиле Haskell ReadS в парсер. Предупреждение: это добавляет локальный возврат при неудаче в результирующий парсер и, следовательно, может привести к снижению производительности.
Свойства
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.14.1/docs/libraries/base-4.22.0.0-66f8/Text-ParserCombinators-ReadP.html