Antlr (ANother Tool for Language Recognition)


ANTLR is lexer generator. It translates:

ANTLR is implemented in Java and generates lexer and parser in the following languages:

  • Java,
  • Ruby,
  • Python,
  • C,
  • C++,
  • C#
  • Javascript
  • and Objective C.

It grew from the old C/C++ PCCTS project. Java is then a “recent” addition in the ANTLR's lifetime.

ANTLR is licensed under BSD.

Getting started

Use cases

There are three use cases:

  • “validators.” to validate an input. Grammars for validators don't use actions or rewrite rules.
  • “processors.” to validate an input and process it. Grammars for processors use actions, but not rewrite rules.
  • “translators.” to validate and translate the input data structure into another data structure. Grammars for translators use actions (containing printlns) and/or rewrite rules.


  • Write the grammar using one or more files.
  • Optionally write StringTemplate templates for producing output.
  • Generate the lexer and parser classes from the grammar.
  • Write an application that uses the the generated classes.
ANTLRInputStream input = new ANTLRInputStream(sqlStream);
MyLanguageLexer lexer = new MyLanguageLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
MyLanguageParser parser = new MyLanguageParser(tokens);
CollectingErrorListener errorListener = new CollectingErrorListener();






StringTemplate is a library that supports using templates with placeholders for outputting text (ex. Java source code)

Powered by ComboStrap