파섹(파서)
Parsec (parser)원본 작성자 | 다안 레이젠, 파올로 마르티니, 앙투안 후작 |
---|---|
개발자 | 허버트 발레리오 리델, 데릭 엘킨스, 앙투안 후터, 로만 첼랴카, 라이언 스콧 |
초기 릴리즈 | 2006년 11월 2일[1] 전 ) |
안정적 해제 | 3.1.14.0 / 2019년 8월 10일;[2] 전 |
리포지토리 | github |
기록 위치 | 하스켈 |
운영 체제 | Linux, macOS, Windows |
플랫폼 | 하스켈 플랫폼 |
유형 | 파서 결합기, 라이브러리 |
면허증 | BSD-3 |
웹사이트 | hackage |
파르세크는 하스켈에서 파서를 쓰는 도서관이다.[3]고차 파서 콤비네이터를 기반으로 하기 때문에 복잡한 파서를 여러 개의 작은 파서(parser)로 만들 수 있다.[4]에를랑,[5] 엘릭시르,[6] OCaml,[7] F#[8][9] 등 다른 여러 언어와 더불어 C#,[10] 자바와 같은 명령어에서도 재조명되었다.[11]
파서 결합기 기반 프로그램은 일반적으로 파서 발생기 기반[citation needed] 프로그램보다 속도가 느리기 때문에 파섹은 일반적으로 작은 도메인별 언어에, 해피는 GHC와 같은 컴파일러에 사용된다.[12]
Parsec에서 파생된 다른 Haskell 파서 결합기 라이브러리에는 Megaparsec과[13] Attoparsec이 있다.[14]
Parsec은 BSD-3-Clause 라이선스에 따라 출시된 무료 소프트웨어다.[15]
예
파르섹으로 쓰인 파서스는 특정 문자열을 인식하는 파서 등 단순 파서부터 시작해 이를 결합해 행동이 더 복잡한 파서(parser)를 구축한다.예를 들어,digit
숫자를 파싱하고string
특정 문자열을 구문 분석하다(예:"hello"
).
Parsec과 같은 파서 결합기 라이브러리는 파서들을 실제 값으로 실행할 수 있는 유틸리티 기능을 제공한다.문자열에서 한 자릿수를 인식하는 파서는 두 가지 기능으로 나눌 수 있다. 하나는 파서를 생성하기 위한 것이고, 다른 하나는main
이러한 유틸리티 함수 중 하나를 호출하는 함수(parse
이 경우) 파서를 실행하려면:
수입하다 텍스트.Parsec -- 일반 구문 분석 유틸리티 기능 보유 수입하다 텍스트.Parsec차르 - 특정 기본 결합기 포함 타자를 치다 파서 = 스트림 s m 차르 => 파르세크T s u m 끈 파서 :: 파서 파서 = 끈을 매다 "안녕" 본래의 :: IO () 본래의 = 인쇄하다 (파스를 치다 파서 "[시험"] "헬로 월드") - '안녕하십니까'를 인쇄
우리는 a를 정의한다.Parser
타이프로 서명하다parser
읽기 쉬운만약 우리가 이 프로그램을 바꾸고 싶다면, 그 중 어느 쪽이든 읽어보라고 말해라."hello"
또는 끈"goodbye"
, 우리는 교환원을 이용할 수 있다.< >
, 에 의해 제공됨Alternative
typeclass, 두 파서를 하나의 파서로 결합하여 다음 중 하나를 시도하는 방법:
파서 = 끈을 매다 "안녕" < > 끈을 매다 "goodbye"
참조
- ^ "parsec 2.0". Hackage. Retrieved 3 September 2019.
- ^ "Releases". Github. Retrieved 3 September 2019.
- ^ "Parsec on Haskell wiki". Haskell Wiki. Retrieved 29 May 2017.
- ^ Leijen, Daan; Meijer, Erik (July 2001). "Parsec: Direct Style Monadic Parser Combinators For The Real World" (PDF). Microsoft Research. Retrieved 22 November 2014.
- ^ "Parsec Erlang". BitBucket. Retrieved 23 November 2014.
- ^ "Nimble Parsec". Github. Retrieved 18 December 2018.
- ^ "Parsec OCaml" (PDF). The OCaml Summer Project. Retrieved 23 November 2014.
- ^ "XParsec by corsis". XParsec. Retrieved 29 May 2017.
- ^ "FParsec". Quanttec. Retrieved 29 May 2017.
- ^ "CSharp monad". Github. Retrieved 10 December 2014.
- ^ "JParsec". Github. Retrieved 14 October 2016.
- ^ "The Glasgow Haskell Compiler (AOSA Vol. 2)". The Architecture of Open Source Applications. Retrieved 23 November 2014.
- ^ "megaparsec: Monadic parser combinators". Hackage. Retrieved 2018-09-10.
- ^ "attoparsec: Fast combinator parsing for bytestrings and text". Hackage. Retrieved 2018-09-10.
- ^ "Parsec". 25 October 2021.