Text.ParserCombinators.ReadP
| Copyright | (c) The University of Glasgow 2002 |
|---|---|
| License | BSD-style (see the file libraries/base/LICENSE) |
| Maintainer | libraries@haskell.org |
| Stability | provisional |
| Portability | non-portable (local universal quantification) |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Описание
Этот модуль содержит комбинаторы для анализаторов, первоначально написанные Koen Claessen. Он обрабатывает все альтернативы параллельно, поэтому никогда не сохраняет начало входной строки, что является распространённой причиной утечек памяти в других анализаторах. Комбинатор выбора (+++) по-настоящему коммутативен; порядок ветвей не влияет на результат.
Тип ReadP
Примеры реализации
Определено в GHC.Internal.Text.ParserCombinators.ReadP |
Основные операции
Потребляет и возвращает следующий символ. Возвращает ошибку, если входных данных больше нет.
Предварительный просмотр: возвращает оставшуюся часть входных данных без их потребления.
(+++) :: ReadP a -> ReadP a -> ReadP a infixr 5 Источник
Симметричный выбор.
(<++) :: ReadP a -> ReadP a -> ReadP a infixr 5 Источник
Локальный, исключительный, левосторонний выбор: если левый анализатор локально производит какой-либо результат, то правый анализатор не используется.
gather :: ReadP a -> ReadP (Строка, a) Источник
Преобразует анализатор в такой, который делает то же самое, но дополнительно возвращает точные прочитанные символы. ВАЖНОЕ ПРИМЕЧАНИЕ: gather возвращает ошибку выполнения, если его первый аргумент построен с использованием любых вхождений readS_to_P.
Другие операции
Всегда возвращает ошибку.
Успешно выполняется, если мы находимся в конце входных данных.
satisfy :: (Символ -> Булево) -> ReadP Символ Источник
Потребляет и возвращает следующий символ, если он удовлетворяет заданному предикату.
char :: Символ -> ReadP Символ Источник
Анализирует и возвращает указанный символ.
string :: Строка -> ReadP Строка Источник
Анализирует и возвращает указанную строку.
munch :: (Символ -> Булево) -> ReadP Строка Источник
Анализирует первый нулевой или более символов, удовлетворяющих предикату. Всегда успешно выполняется, точно один раз, потребляя все символы. Таким образом, НЕ то же самое, что (many (satisfy p)).
munch1 :: (Символ -> Булево) -> ReadP Строка Источник
Анализирует первый один или более символов, удовлетворяющих предикату. Возвращает ошибку, если не найдено ни одного, в противном случае успешно выполняется ровно один раз, потребляя все символы. Таким образом, НЕ то же самое, что (many1 (satisfy p)).
skipSpaces :: ReadP () Источник
Пропускает все пробелы.
choice :: [ReadP a] -> ReadP a Источник
Объединяет все анализаторы в указанном списке.
count :: Целое -> 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] Source
Парсит одно или несколько вхождений заданного парсера.
skipMany :: ReadP a -> ReadP () Source
Аналогично many, но игнорирует результат.
skipMany1 :: ReadP a -> ReadP () Source
Аналогично many1, но игнорирует результат.
sepBy :: ReadP a -> ReadP sep -> ReadP [a] Source
Парсит ноль или более вхождений p, разделенных sep. Возвращает список значений, возвращаемых p.
sepBy1 :: ReadP a -> ReadP sep -> ReadP [a] Source
Парсит одно или более вхождений p, разделенных sep. Возвращает список значений, возвращаемых p.
endBy :: ReadP a -> ReadP sep -> ReadP [a] Source
Парсит ноль или более вхождений p, разделенных и завершаемых sep.
endBy1 :: ReadP a -> ReadP sep -> ReadP [a] Source
Парсит одно или более вхождений p, разделенных и завершаемых sep.
chainr :: ReadP a -> ReadP (a -> a -> a) -> a -> ReadP a Source
Парсит ноль или более вхождений p, разделенных op. Возвращает значение, полученное посредством правого ассоциативного применения всех функций, возвращаемых op. Если вхождений p нет, возвращается x.
chainl :: ReadP a -> ReadP (a -> a -> a) -> a -> ReadP a Source
Парсит ноль или более вхождений 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
Парсит ноль или более вхождений 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.12.1/docs/libraries/base-4.21.0.0-8e62/Text-ParserCombinators-ReadP.html