ANTLR: A predicated‐<i>LL</i>(<i>k</i>) parser generator

T. J. Parr, Russell W. Quong

Software Practice and Experience · 1995 · 610 citations · 4 references

Concepts

TL;DR

Despite the parsing power of LR/LALR algorithms such as YACC, programmers often prefer hand‑written recursive‑descent parsers for their flexibility, error handling, and ease of debugging. This paper introduces ANTLR, a public‑domain parser generator that merges the flexibility of hand‑coded parsing with the convenience of a generator. ANTLR, part of PCCTS, integrates lexical and syntactic analysis, accepts LL(k) grammars for k > 1 with extended BNF, and automatically generates abstract syntax trees. ANTLR’s user‑friendly features—including predicates that eliminate hand‑tweaking—have led to widespread adoption by over 1,000 users worldwide, with ports to many platforms and a commercial C++ front‑end.

Abstract

Abstract Despite the parsing power of LR/LALR algorithms, e.g. YACC, programmers often choose to write recursive‐descent parsers by hand to obtain increased flexibility, better error handling, and ease of debugging. We introduce ANTLR, a public‐domain parser generator that combines the flexibility of hand‐coded parsing with the convenience of a parser generator, which is a component of PCCTS. ANTLR has many features that make it easier to use than other language tools. Most important, ANTLR provides predicates which let the programmer systematically direct the parse via arbitrary expressions using semantic and syntactic context; in practice, the use of predicates eliminates the need to hand‐tweak the ANTLR output, even for difficult parsing problems. ANTLR also integrates the description of lexical and syntactic analysis, accepts LL(k) grammars for k &gt; 1 with extended BNF notation, and can automatically generate abstract syntax trees. ANTLR is widely used, with over 1000 registered industrial and academic users in 37 countries. It has been ported to many popular systems such as the PC, Macintosh, and a variety of UNIX platforms; a commercial C++ front‐end has been developed as a result of one of our industrial collaborations.

References

4