Jump to content

Парсек (парсер)

Парсек
Оригинальный автор(ы) Олд Лейен, Паоло Мартини, Антуан Леттер
Разработчик(и) Герберт Валерио Ридель, Дерек Элкинс, Антуан Леттер, Роман Чепляка, Райан Скотт
Первоначальный выпуск 2 ноября 2006 г .; 17 лет назад ( 2006-11-02 ) [1]
Стабильная версия
3.1.14.0 / 10 августа 2019 г .; 4 года назад ( 10.08.2019 ) [2]
Репозиторий github /хаскелл /парсек
Написано в Хаскелл
Операционная система Linux , MacOS , Windows
Платформа Платформа Хаскелл
Тип Парсер-комбинатор , Библиотека
Лицензия БСД-3
Веб-сайт хакерство .haskell .org /упаковка /парсек

Parsec библиотека для написания парсеров на Haskell . [3] Он основан на комбинаторах парсеров высшего порядка , поэтому сложный парсер можно составить из множества более мелких. [4] Он был переопределен во многих других языках, включая Эрланг , [5] Эликсир , [6] ОКамл , [7] Ракетка , [8] и Ф# , [9] [10] а также императивные языки, такие как С# , [11] и Ява . [12]

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

Другие библиотеки-комбинаторы парсеров Haskell, полученные из Parsec, включают Megaparsec. [14] и Аттопарсек. [15]

Parsec — бесплатное программное обеспечение , выпущенное по лицензии BSD-3-Clause. [16]

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

parser = string "hello" <|> string "goodbye"
  1. ^ «парсек 2.0» . Хакадж . Проверено 3 сентября 2019 г.
  2. ^ «Выпуски» . Гитхаб . Проверено 3 сентября 2019 г.
  3. ^ «Парсек на Haskell вики» . Хаскелл Вики . Проверено 29 мая 2017 г.
  4. ^ Лейен, Даан; Мейер, Эрик (июль 2001 г.). «Parsec: комбинаторы монадических парсеров прямого стиля для реального мира» (PDF) . Исследования Майкрософт . Проверено 22 ноября 2014 г.
  5. ^ «Парсек Эрланг» . Битбакет . Проверено 23 ноября 2014 г.
  6. ^ «Проворный парсек» . Гитхаб . Проверено 18 декабря 2018 г.
  7. ^ «Парсек OCaml» (PDF) . Летний проект OCaml . Проверено 23 ноября 2014 г.
  8. ^ «Мегапарсак: Практические комбинаторы парсеров» .
  9. ^ «XParsec от Corsis» . XParsec . Проверено 29 мая 2017 г.
  10. ^ «ФПарсек» . Кванттек . Проверено 29 мая 2017 г.
  11. ^ «CSharp монада» . Гитхаб . Проверено 10 декабря 2014 г.
  12. ^ "ДжПарсек" . Гитхаб . Проверено 14 октября 2016 г.
  13. ^ «Компилятор Glasgow Haskell (AOSA Vol. 2)» . Архитектура приложений с открытым исходным кодом . Проверено 23 ноября 2014 г.
  14. ^ «мегапарсек: комбинаторы монадических парсеров» . Хакадж . Проверено 10 сентября 2018 г.
  15. ^ «attoparsec: быстрый анализ комбинатора байтовых строк и текста» . Хакадж . Проверено 10 сентября 2018 г.
  16. ^ «Парсек» . 25 октября 2021 г.
[ редактировать ]


Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 30e400fb9bb71764c695b0e3690841ba__1721981340
URL1:https://arc.ask3.ru/arc/aa/30/ba/30e400fb9bb71764c695b0e3690841ba.html
Заголовок, (Title) документа по адресу, URL1:
Parsec (parser) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)