YACC / Bison과 ANTLR의 가장 큰 차이점은 이러한 도구가 처리 할 수있는 문법 유형입니다. YACC / Bison은 LALR 문법을 처리하고 ANTLR은 LL 문법을 처리합니다.
LALR 문법을 오랫동안 사용해온 사람들은 종종 LL 문법을 다루는 것이 더 어렵다는 것을 알게 될 것입니다. 그렇다고 문법이나 도구가 본질적으로 다루기가 더 어렵다는 것을 의미하지는 않습니다. 사용하기 쉬운 도구는 주로 문법 유형에 익숙합니다.
장점이있는 한, LALR 문법이 LL 문법보다 유리한 측면이 있으며 LL 문법이 LALR 문법보다 유리한 다른 측면이 있습니다.
YACC / Bison은 테이블 구동 파서를 생성하는데, 이는 "프로세싱 로직"이 파서 프로그램의 데이터에 포함되고 파서의 코드에는 포함되지 않음을 의미합니다. 매우 복잡한 언어에 대한 파서조차도 비교적 작은 코드 풋 프린트 (footprint)를 갖는다는 점이 장점이다. 이것은 하드웨어가 매우 제한적인 1960 년대와 1970 년대에 더 중요했습니다. 테이블 기반 파서 생성기는이 시대로 거슬러 올라 갔으며 당시에는 작은 코드 공간이 주요 요구 사항이었습니다.
ANTLR은 재귀 강하 파서를 생성하는데, 이는 문법의 각 생성 규칙이 파서 코드의 함수로 표현되므로 "프로세싱 로직"이 파서의 코드에 포함되어 있음을 의미합니다. 그 대가는 코드를 읽어 파서가하는 일을 이해하기 쉽다는 것입니다. 또한 재귀 강하 파서는 일반적으로 테이블 구동 파서보다 빠릅니다. 그러나 매우 복잡한 언어의 경우 코드 풋 프린트가 더 커집니다. 이것은 1960 년대와 1970 년대의 문제였습니다. 당시에는 하드웨어 제한 때문에 Pascal과 같은 비교적 작은 언어 만 이런 식으로 구현되었습니다.
ANTLR 생성 파서는 일반적으로 10.000 줄의 코드 이상에 있습니다. 필기 재귀 하강 파서는 종종 같은 야구장에 있습니다. Wirth의 Oberon 컴파일러는 코드 생성을 포함하여 약 4000 줄의 코드를 가진 가장 컴팩트 한 컴파일러 일 것입니다. 그러나 Oberon은 약 40 개의 생산 규칙을 가진 매우 컴팩트 한 언어입니다.
누군가 이미 지적했듯이 ANTLR의 큰 장점은 ANTLRworks라는 그래픽 IDE 도구입니다. 완벽한 문법 및 언어 디자인 연구소입니다. 입력 할 때 문법 규칙을 시각화하고 충돌이 발견되면 충돌이 무엇인지, 그리고 그 원인을 그래픽으로 보여줍니다. 심지어 왼쪽 재귀와 같은 충돌을 자동으로 리팩토링하고 해결할 수도 있습니다. 충돌이없는 문법이 있으면 ANTLRworks가 언어의 입력 파일을 구문 분석하고 구문 분석 트리와 AST를 빌드하고 IDE에 그래픽으로 트리를 표시 할 수 있습니다. 이는 많은 시간을 절약 할 수 있기 때문에 매우 큰 이점입니다. 코딩을 시작하기 전에 언어 디자인에서 개념적 오류를 발견 할 수 있습니다! LALR 문법에 해당하는 도구를 찾지 못했습니다. 해당 도구가없는 것 같습니다.
파서를 생성하지 않고 직접 코드를 작성하려는 사람들에게도 ANTLRworks는 언어 디자인 / 프로토 타이핑을위한 훌륭한 도구입니다. 가능한 최고의 도구 일 것입니다. 불행히도 LALR 파서를 작성하려는 경우 도움이되지 않습니다. 단순히 ANTLRworks를 활용하기 위해 LALR에서 LL로 전환하는 것이 가치가있을 수 있지만 일부 사람들에게는 문법 유형 전환이 매우 고통스러운 경험이 될 수 있습니다. 다시 말해 YMMV입니다.