Parsek (tahlilchi) - Parsec (parser)

Parsek
Asl muallif (lar)Daan Leyxen, Paolo Martini, Antuan Lester
Tuzuvchi (lar)Herbert Valerio Riedel, Derek Elkins, Antuan Later, Roman Cheplyaka, Rayan Skott
Dastlabki chiqarilish2006 yil 2-noyabr; 14 yil oldin (2006-11-02)[1]
Barqaror chiqish
3.1.14.0 / 2019 yil 10-avgust; 15 oy oldin (2019-08-10)[2]
Omborgithub.com/ haskell/ parsek
YozilganXaskell
Operatsion tizimLinux, macOS, Windows
PlatformaHaskell platformasi
TuriAyrıştırıcı kombinator, Kutubxona
LitsenziyaBSD-3
Veb-saytxakerlik.haskell.org/ paket/ parsek

Parsek a kutubxona yozish uchun ajraluvchilar yilda Xaskell.[3] Bu yuqori darajadagi buyurtmaga asoslangan ajralish kombinatorlari, shuning uchun ko'plab kichiklardan murakkab parserni tayyorlash mumkin.[4] U ko'plab boshqa tillarda, shu jumladan, qayta tiklandiErlang,[5],Elixir,[6],OCaml,[7] va F #,[8][9]shu qatorda; shu bilan birga imperativ tillar kabi C #,[10] va Java.[11]

Parser kombinatoriga asoslangan dastur odatda a ga nisbatan sekinroq ajralish generatori asoslangan dastur, Parsec odatda kichik uchun ishlatiladi domenga xos tillar, esa Baxtli kabi kompilyatorlar uchun ishlatiladi GHC.[12]

Parsecdan olingan boshqa Haskell tahlil qiluvchi kombinatorining kutubxonalariga Megaparsec kiradi[13] va Attoparsec.[14]

Parsek bepul dasturiy ta'minot BSD-3-Clause litsenziyasi asosida chiqarilgan.[15]

Misol

Parsek tilida yozilgan tahlilchilar oddiy satrlardan boshlanadi, masalan, ba'zi bir satrlarni taniydi va ularni yanada murakkab xulq-atvori bilan ajratuvchi yaratish uchun birlashtiradi. Masalan, raqam raqamni ajratadi va mag'lubiyat ma'lum bir mag'lubiyatni tahlil qiladi (masalan "Salom").

Parsec singari komparatorli kutubxonalar ajraluvchilarni real qiymatlar bo'yicha ishlatish uchun yordamchi funktsiyalarni taqdim etadi. Ipdan bitta raqamni tanib olish uchun ajratuvchi ikkita funktsiyaga bo'linishi mumkin: biri ajratuvchi yaratish uchun va a asosiy ushbu yordamchi funktsiyalardan birini chaqiradigan funktsiya (tahlil qilish bu holda) tahlil qiluvchini ishga tushirish uchun:

Import Matn Pareks      - umumiy tahlil funktsiyalari mavjudImport Matn.Parsec.Char - o'ziga xos asosiy kombinatorlarni o'z ichiga oladituri Ayrim = Oqim s m Char => ParsecT s siz m Iptahlilchi :: Ayrimtahlilchi = mag'lubiyat "Salom"asosiy :: IO ()asosiy = chop etish (tahlil qilish tahlilchi "" "Salom Dunyo")- "o'ng" "salom" ni bosib chiqaradi

Biz aniqlaymiz Ayrim imzo yozish uchun yozing tahlilchi o'qish osonroq. Agar biz ushbu dasturni o'zgartirmoqchi bo'lsak, mag'lubiyatni ham o'qing "Salom" yoki ip "Xayr", biz operatordan foydalanishimiz mumkin <|>tomonidan taqdim etilgan Shu bilan bir qatorda typeclass, ikkita tahlilchini bitta tahlilchiga birlashtirish uchun:

tahlilchi = mag'lubiyat "Salom" <|> mag'lubiyat "Xayr"

Adabiyotlar

  1. ^ "parsec 2.0". Hackage. Olingan 3 sentyabr 2019.
  2. ^ "Relizlar". Github. Olingan 3 sentyabr 2019.
  3. ^ "Parsec Haskell wiki-da". Haskell Wiki. Olingan 29 may 2017.
  4. ^ "Parsec: Haqiqiy dunyo uchun to'g'ridan-to'g'ri uslubdagi monadik parser kombinatorlari" (PDF). Microsoft tadqiqotlari. Olingan 22 noyabr 2014.
  5. ^ "Parsec Erlang". BitBucket. Olingan 23 noyabr 2014.
  6. ^ "Nimble Parsec". Github. Olingan 18 dekabr 2018.
  7. ^ "Parsec OCaml" (PDF). OCaml yozgi loyihasi. Olingan 23 noyabr 2014.
  8. ^ "XParsec by corsis". XParsec. Olingan 29 may 2017.
  9. ^ "FParsec". Kvantek. Olingan 29 may 2017.
  10. ^ "CSharp monad". Github. Olingan 10 dekabr 2014.
  11. ^ "JParsec". Github. Olingan 14 oktyabr 2016.
  12. ^ "Glasgow Haskell kompilyatori (AOSA 2-jild)". Ochiq manbali dasturlarning arxitekturasi. Olingan 23 noyabr 2014.
  13. ^ "megaparsec: Monadik ajralish kombinatorlari". Hackage. Olingan 2018-09-10.
  14. ^ "attoparsec: baytstringlar va matn uchun tezkor kombinatorni tahlil qilish". Hackage. Olingan 2018-09-10.
  15. ^ https://github.com/haskell/parsec/blob/master/LICENSE

Tashqi havolalar