핵심 요약
- 한 개발자가 Emacs 없이 Org-mode 문서를 HTML로 변환하기 위해 Guile Scheme의 PEG 모듈을 이용한 파서 'OrgWebAlchemy'를 개발했습니다.
- 정규식으로 파싱할수록 예외 처리가 꼬여 '파서 버그의 역사'가 되는 문제를 PEG 문법 기반의 AST 및 SXML 변환 구조로 깔끔하게 해결했습니다.
- 현재 중첩 목록, 헤딩, 표, 코드 블록 등을 지원하는 1.0 버전에 도달했으며 오픈소스로 공개되어 피드백을 받고 있습니다.
요약 한 개발자가 Emacs 없이도 Org-mode 문서를 HTML로 변환하기 위해 Guile Scheme 환경에서 PEG(구문 분석 표현 문법)를 활용한 파서 'OrgWebAlchemy'를 개발한 과정을 공유했습니다. 처음에는 단순 정규표현식(Regex)으로 파싱을 시도했으나, 중첩 목록, 들여쓰기 깊이, 각종 인라인 마크업, 소스 및 인용 블록 등 복잡한 예외 규칙이 늘어나면서 한계에 부딪혔다고 설명합니다. 끝없이 예외 조건을 덕지덕지 붙이는 정규표현식 방식은 언어의 명세를 나타내기보다 '파서 버그의 역사'를 기록하는 것에 불과하다는 깨달음을 얻었다고 덧붙였습니다.
이에 개발자는 GNU Guile의 `(ice-9 peg)` 모듈을 도입하여 문법 자체를 S-expression 형태의 PEG로 정의했습니다. 이 방식을 통해 Org 문서를 PEG로 분석해 AST(추상 구문 트리)를 생성하고, 이를 Lisp 친화적인 SXML 구조를 거쳐 최종 HTML로 렌더링하는 파이프라인을 구축했습니다. 특히 들여쓰기 기반의 중첩 리스트를 올바른 트리 구조로 변환하는 작업이 까다로웠으나 상당 부분 해결했으며, 헤딩, 문단, 다양한 블록, 링크, 표 등의 핵심 요소를 지원하는 v1.0 안정 버전에 도달했다고 밝혔습니다. 개발자는 SXML을 거치는 느슨한 결합 구조 덕분에 향후 마크다운 등 다른 포맷으로의 확장 가능성도 열려 있다고 전했습니다.
Sponsored · 광고