Spec-Zone.ru › Haskell 9

Text.ParserCombinators.ReadP

Авторские права (c) The University of Glasgow 2002
Лицензия в стиле BSD (см. файл libraries/base/LICENSE)
Сопровождающий libraries@haskell.org
Стабильность предварительная
Переносимость непереносимый (локальная универсальная квантификация)
Безопасный Haskell Safe
Язык Haskell2010

Содержание

  • Тип ReadP
  • Примитивные операции
  • Другие операции
  • Запуск парсера
  • Свойства

Описание

Это модуль комбинаторов парсеров, изначально написанный Куном Классеном. Он разбирает все альтернативы параллельно, поэтому никогда не удерживает начало входной строки — распространённый источник утечек памяти у других парсеров. Комбинатор выбора (+++) действительно коммутативен: не имеет значения, какая ветвь «короче».

Тип ReadP

data ReadP a Исходный код

Экземпляры
Подробности об экземплярах
Alternative ReadP Исходный код

Начиная с: base-4.6.0.0

Подробности об экземпляре

Определён в GHC.Internal.Text.ParserCombinators.ReadP

Методы

empty :: ReadP a Исходный код

(<|>) :: ReadP a -> ReadP a -> ReadP a Исходный код

some :: ReadP a -> ReadP [a] Исходный код

many :: ReadP a -> ReadP [a] Исходный код

Applicative ReadP Исходный код

Начиная с: base-4.6.0.0

Подробности об экземпляре

Определён в GHC.Internal.Text.ParserCombinators.ReadP

Методы

pure :: a -> ReadP a Исходный код

(<*>) :: ReadP (a -> b) -> ReadP a -> ReadP b Исходный код

liftA2 :: (a -> b -> c) -> ReadP a -> ReadP b -> ReadP c Исходный код

(*>) :: ReadP a -> ReadP b -> ReadP b Исходный код

(<*) :: ReadP a -> ReadP b -> ReadP a Исходный код

Functor ReadP Исходный код

Начиная с: base-2.1

Подробности об экземпляре

Определён в GHC.Internal.Text.ParserCombinators.ReadP

Методы

fmap :: (a -> b) -> ReadP a -> ReadP b Исходный код

(<$) :: a -> ReadP b -> ReadP a Исходный код

Monad ReadP Исходный код

Начиная с: base-2.1

Подробности об экземпляре

Определён в GHC.Internal.Text.ParserCombinators.ReadP

Методы

(>>=) :: ReadP a -> (a -> ReadP b) -> ReadP b Исходный код

(>>) :: ReadP a -> ReadP b -> ReadP b Исходный код

return :: a -> ReadP a Исходный код

MonadPlus ReadP Исходный код

Начиная с: base-2.1

Подробности об экземпляре

Определён в GHC.Internal.Text.ParserCombinators.ReadP

Методы

mzero :: ReadP a Исходный код

mplus :: ReadP a -> ReadP a -> ReadP a Исходный код

MonadFail ReadP Исходный код

Начиная с: base-4.9.0.0

Подробности об экземпляре

Определён в GHC.Internal.Text.ParserCombinators.ReadP

Методы

fail :: HasCallStack => String -> 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API