Парсек (парсер) - Parsec (parser)
| Оригинальный автор (ы) | Даан Лейен, Паоло Мартини, Антуан Латтер |
|---|---|
| Разработчики) | Герберт Валерио Ридель, Дерек Элкинс, Антуан Латтер, Роман Чепляка, Райан Скотт |
| изначальный выпуск | 2 ноября 2006 г . |
| Стабильный выпуск | 3.1.14.0 / 10 августа 2019 г .
|
| Репозиторий | github |
| Написано в | Haskell |
| Операционная система | Linux , macOS , Windows |
| Платформа | Платформа Haskell |
| Тип | Комбинатор парсеров , Библиотека |
| Лицензия | BSD-3 |
| Интернет сайт | взломать |
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"
Рекомендации
внешняя ссылка
| Эта статья о бесплатном программном обеспечении с открытым исходным кодом является незавершенной . Вы можете помочь Википедии, расширив ее . |