Парсек (парсер) - Parsec (parser)

Парсек
Оригинальный автор (ы) Даан Лейен, Паоло Мартини, Антуан Латтер
Разработчики) Герберт Валерио Ридель, Дерек Элкинс, Антуан Латтер, Роман Чепляка, Райан Скотт
изначальный выпуск 2 ноября 2006 г . ; 14 лет назад  ( 2006-11-02 )
Стабильный выпуск
3.1.14.0 / 10 августа 2019 г . ; 18 месяцев назад  ( 2019-08-10 )
Репозиторий github .com / haskell / parsec
Написано в Haskell
Операционная система Linux , macOS , Windows
Платформа Платформа Haskell
Тип Комбинатор парсеров , Библиотека
Лицензия BSD-3
Интернет сайт взломать .haskell .org / package / parsec

Parsec - это библиотека для написания парсеров на Haskell . Он основан на комбинаторах синтаксического анализатора более высокого порядка , поэтому сложный синтаксический анализатор может быть составлен из множества более мелких. Он был повторно реализован во многих других языках, включая Erlang , Elixir , OCaml и F # , а также в императивных языках, таких как C # и Java .

Поскольку программа на основе синтаксического анализатора обычно работает медленнее, чем программа на основе синтаксического анализатора , Parsec обычно используется для небольших предметно-ориентированных языков , в то время как Happy используется для компиляторов, таких как GHC .

Другие библиотеки комбинаторов синтаксического анализатора Haskell, унаследованные от Parsec, включают Megaparsec и Attoparsec.

Parsec - это бесплатное программное обеспечение, выпущенное под лицензией BSD-3-Clause.

Пример

Синтаксические анализаторы, написанные на Parsec, начинаются с более простых синтаксических анализаторов, таких как те, которые распознают определенные строки, и комбинируют их для создания синтаксического анализатора с более сложным поведением. Например, digit анализирует цифру и string анализирует определенную строку (например, "hello" ).

Библиотеки комбинаторов синтаксического анализа, такие как Parsec, предоставляют служебные функции для запуска синтаксических анализаторов реальных значений. Синтаксический анализатор для распознавания одной цифры из строки может быть разделен на две функции: одну для создания синтаксического анализатора и main функцию, которая вызывает одну из этих служебных функций ( parse в данном случае) для запуска синтаксического анализатора:

import Text.Parsec      -- has general parsing utility functions
import Text.Parsec.Char -- contains specific basic combinators
type Parser = Stream s m Char => ParsecT s u m String

parser :: Parser
parser = string "hello"

main :: IO ()
main = print (parse parser "<test>" "hello world")
-- prints 'Right "hello"'

Мы определяем Parser тип, чтобы parser упростить чтение сигнатуры типа . Если бы мы хотели изменить эту программу, скажем, чтобы прочитать строку "hello" или строку "goodbye" , мы могли бы использовать оператор <|> , предоставляемый Alternative классом типов, для объединения двух синтаксических анализаторов в один синтаксический анализатор, который пытается либо:

parser = string "hello" <|> string "goodbye"

Рекомендации

внешняя ссылка