8
ANTLR Andrew Pangborn & Zach Busser

ANTLR Andrew Pangborn & Zach Busser. ANTLR in a Nutshell ANother Tool for Language Recognition generates lexers generates parsers (and parse trees) Java-based,

Embed Size (px)

Citation preview

Page 1: ANTLR Andrew Pangborn & Zach Busser. ANTLR in a Nutshell ANother Tool for Language Recognition generates lexers generates parsers (and parse trees) Java-based,

ANTLRAndrew Pangborn & Zach Busser

Page 2: ANTLR Andrew Pangborn & Zach Busser. ANTLR in a Nutshell ANother Tool for Language Recognition generates lexers generates parsers (and parse trees) Java-based,

ANTLR in a Nutshell• ANother Tool for Language Recognition

• generates lexers

• generates parsers (and parse trees)

• Java-based, but has runtime implementations in other languages like python, javascript, c, c#, obj-c

• An LL(*) parser

• EBNF grammar notation

Page 3: ANTLR Andrew Pangborn & Zach Busser. ANTLR in a Nutshell ANother Tool for Language Recognition generates lexers generates parsers (and parse trees) Java-based,

ANTLR Features

• Hierarchical lexical rules

• Abstract Syntax Tree generation

• Inline code execution

• Tree grammars

Page 4: ANTLR Andrew Pangborn & Zach Busser. ANTLR in a Nutshell ANother Tool for Language Recognition generates lexers generates parsers (and parse trees) Java-based,

ANTLR Pros

•Target languages besides Java – C, python, Javascript, etc.

•LL(*) - not limited to 1 lookahead token

•Simpler to debug than LALR grammars (no cryptic shift-reduce / reduce-reduce errors)

•ANTLRWorks

Page 5: ANTLR Andrew Pangborn & Zach Busser. ANTLR in a Nutshell ANother Tool for Language Recognition generates lexers generates parsers (and parse trees) Java-based,

ANTLR Shortcomings

• An LL parser – cannot support left-recursive grammars like YACC or PJ2

• Recursive descent approach not great for efficiency

• No mechanism for specifying operator precedence

Page 6: ANTLR Andrew Pangborn & Zach Busser. ANTLR in a Nutshell ANother Tool for Language Recognition generates lexers generates parsers (and parse trees) Java-based,

Getting started with ANTLR

• http://www.antlr.org/wiki/display/ANTLR3/FAQ+-+Getting+Started

Page 7: ANTLR Andrew Pangborn & Zach Busser. ANTLR in a Nutshell ANother Tool for Language Recognition generates lexers generates parsers (and parse trees) Java-based,

Demo Time!

• A simple 4-function expression parser

• 4-function expression evaluator

• AST generation example

Page 8: ANTLR Andrew Pangborn & Zach Busser. ANTLR in a Nutshell ANother Tool for Language Recognition generates lexers generates parsers (and parse trees) Java-based,

References

• http://www.corriganjc.net/weblog/archives/2007/06/the_antlr_trini.html

• http://www.antlr.org/wiki/display/ANTLR3/ANTLR+v3+documentation