C++ 개발자를 위한 새로운 LALR(1) 파서 생성기 '얀트라(Yantra)'가 공개되어 주목받고 있습니다. 얀트라는 렉서(lexer), 파서(parser), AST(추상 구문 트리) 순회기(walker)를 모두 하나의 도구에서 생성하며, 특히 전체 AST를 먼저 구축한 다음 상향식(top-down)으로 순회하며 의미론적 액션(semantic actions)을 실행하는 독특한 접근 방식을 취합니다. 이는 기존 파서 생성기들이 파싱(parsing) 중 규칙이 축소될 때마다 하향식(bottom-up)으로 액션을 실행하여 부모 노드의 정보를 알기 어려웠던 한계를 극복합니다.
얀트라는 유니코드/UTF8 입력 지원, 다중 모드 렉서, 푸시 기반 파서 등 다양한 핵심 기능을 제공합니다. 특히, 파서 전체를 단일 C++ 파일로 생성하는 '아말가메이티드(amalgamated) 모드'를 지원하여 기존 프로젝트에 쉽게 통합할 수 있습니다. 이는 Yacc, Bison, Lemon과 같은 전통적인 LALR(1) 파서 생성기들이 파싱 중 액션을 실행하여 AST를 직접 구축하고 순회하는 별도의 과정을 요구했던 것과 대조적입니다. 얀트라는 C++ 표준 라이브러리 외에 별다른 의존성 없이 CMake로 쉽게 빌드할 수 있으며, C++23 컴파일러를 지원합니다.
이러한 얀트라의 접근 방식은 컴파일러, 코드 생성기 등 복잡한 언어 처리 도구를 개발하는 C++ 개발자들에게 큰 이점을 제공합니다. 전체 AST를 미리 볼 수 있기 때문에 문법 규칙에 따라 다양한 코드 생성 로직을 유연하게 구현할 수 있으며, 단일 문법으로 여러 언어의 코드를 생성하는 등 활용 가능성이 넓어집니다. ANTLR과 비교했을 때, 얀트라는 LALR(1) 알고리즘의 효율성을 유지하면서도 ANTLR의 LL(*) 알고리즘과 유사한 상향식 AST 순회 기능을 제공하며, C++ 전용 도구로서 JVM 의존성 없이 네이티브 C++ 실행 파일을 생성한다는 점에서 차별점을 가집니다. 이는 C++ 프로젝트의 빌드 체인을 간소화하고 성능을 최적화하는 데 기여할 수 있습니다.