구문 분석 표현 문법 템플릿 라이브러리 (PEGTL)는 구문 분석 표현 문법 (PEG)에 따른 파서를 생성하기위한 제로 의존성 C ++ 헤더 전용 구문 분석기 라이브러리입니다.
새로운 주요 버전을 개발하는 동안 메인 브랜치는 양립 할 수없는 변화를 겪을 수 있습니다. 안정적인 경험을 원하시면 메인 브랜치를 사용하지 않고 최신 릴리스를 다운로드하십시오.
PEGTL, 성공 또는 실패 이야기 및 기타 종류의 피드백에 관한 질문과 제안은 자유롭게 토론, 문제 또는 풀 요청을 열거 나 taocpp(at)icemx.net 의 저자에게 문의하십시오.
문법은 정기적 인 C ++ 코드로 작성되며, 템플릿 프로그래밍 (템플릿 메타 프로그래밍이 아님)으로 생성됩니다. 즉, PEG의 유도 정의 (및 기타 Parser-Combinator 접근)에 해당하는 중첩 된 템플릿 인스턴스화.
문법을 디버깅하고 사용자 정의 작업을 문법 규칙에 첨부하기위한 메커니즘과 마찬가지로 사용자가 결합하고 확장 할 수있는 포괄적 인 파서 규칙 세트가 포함되어 있습니다. 다음은 Parsing Expression Grammar 규칙이 PEGTL과 함께 C ++ 클래스로 구현되는 방법의 예입니다.
// PEG rule for integers consisting of a non-empty
// sequence of digits with an optional sign:
// sign ::= '+' / '-'
// integer ::= sign? digit+
// The same parsing rule implemented with the PEGTL:
using namespace tao ::pegtl ;
struct sign : one< ' + ' , ' - ' > {};
struct integer : seq< opt< sign >, plus< digit > > {};페그는 컨텍스트가없는 문법 (CFG)과 피상적으로 유사하지만 PEG의 결정 론적 특성은 매우 중요한 차이를 야기합니다. 포함 된 문법 분석은 왼쪽 재귀를 포함하여 PEG에서 몇 가지 전형적인 오류를 발견합니다.
PEGTL은 "Lean and Mean"으로 설계되었으며 핵심 라이브러리는 약 6000 줄의 코드로 구성됩니다. 복잡한 최적화보다 잘 조정 된 간단한 접근 방식을 선호하는 단순성과 효율성에 중점을 둡니다.
PEGTL은 주로 구문 분석 조합기 및 문법 규칙에 관심이 있으며, 라이브러리 사용자에게 구문 분석 실행의 다른 모든 측면을 완전히 제어 할 수있는 가능성을 제공합니다. 어떤 조치를 취할 것인지, 구문 분석 실행 중에 작성되는 데이터 구조가/어떤 데이터 구조가 생성되는지 여부는 전적으로 사용자에게 달려 있습니다.
문자열에서 탈출되지 않은 탈출 시퀀스, 일반적인 JSON 데이터 구조 구축 및 산술 표현식에 대한 현장 평가와 같은 일반적인 상황에 대한 몇 가지 예가 포함되어 있습니다.
템플릿 프로그래밍 및 템플릿 전문화를 사용하여 문법을 한 번 작성하고 다른 (또는 동일한) 구문 분석 실행에서 다른 (또는 동일한) 동작으로 여러 가지 방법으로 사용할 수 있습니다.
PEG 형식의 경우 Lexer 및 Parser 단계로의 분리가 일반적으로 떨어집니다. 모든 것이 단일 문법으로 수행됩니다. 규칙은 C ++로 템플릿 인스턴스화로 표현되며 PEGTL 문법을 최적화하는 것은 컴파일러의 작업입니다.
각 커밋은 여러 아키텍처, 운영 체제, 컴파일러 및 그 버전으로 자동 테스트됩니다.
각 커밋은 GCC 및 Clang Sanitizers, Clang의 정적 분석기 및 clang-tidy 로 확인됩니다. 또한 CodeQL을 사용하여 (보안) 문제를 스캔합니다.
코드 적용 범위는 자동으로 측정되고 단위 테스트는 핵심 라이브러리 코드의 100% (릴리스)를 포함합니다.
릴리스는 시맨틱 버전 작성에 따라 수행됩니다. 호환되지 않는 API 변경은 주요 버전간에 만 발생할 수 있습니다.
모든 기여에 대한 감사에는 PEGTL 및/또는 그 개발에 직접 기여한 사람들이 있습니다.
PEGTL은 C ++의 예술의 일부입니다.
저작권 (C) 2007-2023 Daniel Frey와 Dr. Colin Hirsch
PEGTL은 인증 된 오픈 소스 소프트웨어입니다. 여기에서 재현 된 Boost 소프트웨어 라이센스, 버전 1.0의 조건에 따라 라이센스가 부여됩니다.
소프트웨어 라이센스 부스트 - 버전 1.0- 2003 년 8 월 17 일
이에 따르면, 무료로, 소프트웨어의 사본을 얻고이 라이센스 ( "소프트웨어")가 다루는 소프트웨어 ( "소프트웨어")를 포함하여 소프트웨어의 파생 작품을 준비하고, 소프트웨어가 제공하는 3 분기를 허용하기 위해 소프트웨어 ( "소프트웨어")가 포함하는 문서를 수반하는 사람이나 조직에게 무료로 허가가 부여됩니다.
소프트웨어의 저작권 통지 및 위의 라이센스 보조금,이 제한 및 다음 면책 조항을 포함한이 전체 명세서는 소스 또는 파생 작품이 소스 언어 프로세서에 의해 생성 된 기계를 실행할 수있는 객체 코드의 형태로 만 있지 않는 한, 소프트웨어의 모든 사본 및 소프트웨어의 모든 파생물에 포함되어야합니다.
소프트웨어는 상업성, 특정 목적에 대한 적합성, 제목 및 비 침해에 대한 보증을 포함하여 명시 적 또는 묵시적 보증없이 "있는 그대로"제공됩니다. 어떠한 경우에도 저작권 보유자 또는 소프트웨어를 배포하는 모든 사람은 소프트웨어 또는 소프트웨어의 사용 또는 기타 거래에서 발생하는 계약, 불법 행위 또는 기타, 또는 기타 기타 책임에 대해 책임을지지 않아야합니다.