프로젝트 소개

.Gram(DotGram)은 Roslyn 소스 생성기로 구현된 컴파일 타임 파서 생성기입니다. C# 특성에 포함되거나 별도의 .gram 파일로 작성된 사용자 정의 .Gram 표기법의 문법 정의를 받아 일반 C# 파서 코드를 소비 어셈블리에 직접 내보내며, 런타임 파서 엔진, 문법 그래프, 인터프리터 라이브러리가 필요하지 않습니다. 주요 기능: - 단일 문법에서 강력한 형식의 `Parse`, `TryParse`, `Find` 메서드를 생성합니다. - 이름이 지정된 캡처는 생성된 결과 형식의 속성이 되며, 결과는 기존 생성자나 `required` 속성에 직접 매핑될 수 있습니다. - 하나의 문법은 `with` 치환을 통해 여러 파서를 게시할 수 있으며(예: 다른 숫자 형식, 방언 버전), 각 파서는 생성 시점에 완전히 특수화됩니다. - 제한된 버퍼를 사용해 `TextReader` 또는 `IEnumerable<string>`에 대한 스트리밍 파싱을 지원하며, 벤치마크에 따르면 입력 크기에 관계없이 메모리 사용량이 일정합니다. - `recover` 절을 통한 레코드 지향 오류 복구를 통해 파서가 잘못된 레코드를 건너뛰고 계속 진행할 수 있습니다. - 컴파일 타임 진단은 문법 소스로 다시 연결됩니다. - `[GramInclude]`를 통한 문법 라이브러리는 프로젝트 경계를 넘어 구성할 수 있게 하며, 포함하는 어셈블리는 자체 치환 규칙에 따라 다시 생성됩니다. - C# 액션(`=> @(...)`)과 가드(`when @(...)`)를 통해 문법이 계산 작업을 C#에 위임할 수 있습니다. 패키지: - **DotGram** — 핵심 생성기 및 런타임 의존성이 없는 파서 기반. - **DotGram.Sql** — SQL 파서: ISO SQL:2023, SQL-92, T-SQL(SQL-92 기반 방언)을 지원하며, 하나의 문법으로 호환성 수준별 파서를 제공합니다. - **DotGram.Web** — JSON, JSON Pointer/Patch, 미디어 타입, 구조화된 필드, 링크, 쿠키, URI, 이메일, 타임스탬프, 언어 태그 등에 대한 RFC 준수 파서로, 각 파서는 해당 사양의 테스트 스위트를 충족합니다. - **DotGram.ExpressionLanguage** — `System.Linq.Expressions` 트리를 직접 내보내는 C# 스타일 표현식 언어(연산자, 리터럴, 지역 변수, 블록, 루프, switch, try, 멤버, 호출, `new` 지원). - **DotGram.Finance** — 형식화된 필드, char/byte 스트림에 대한 지연 열거, 길이 구분 이진 데이터, `FixField.Invalid`를 통한 복구 기능을 갖춘 FIX 프로토콜 파서입니다. 호환성: .NET Standard 2.0+, Roslyn 4.14+, Visual Studio 17.8+. 런타임 의존성이 전혀 없습니다. MIT 라이선스로 제공됩니다.