ANTLR “Tokens has non-LL(*) decision due to recursive rule invocations”
I recently became interested in domain specific languages(dsls) and just started reading “Language Implementation Patterns”. The author, Terence Parr, wrote this great tool called ANTLR which helps you in the scanning/parsing stage of constructing a compiler.
Sometimes you’ll see this error:
antlr warning " Tokens has non-LL(*) decision due to recursive rule invocations "
when you have an invalid LL grammar such as an invalid non-recursive rule(see more on the antlr mailing list), but you maybe getting this error due to a syntax mistake.
Unlike Jflex(a scanner) and CUP(a parser), ANTLR is a both a lexer/scanner and parser. Only use all caps for the lexing(scanning) rules! Parsing statements use lower case or camel case.
grammar test;
NUMBER : '0'..'9'+;
TERM : NUMBER | '(' EXPRESSION ')';
EXPRESSION : TERM (('+'|'-') TERM)*;
should be:
grammar test;
NUMBER : '0'..'9'+;
TERM : NUMBER | '(' expr ')';
expr : TERM (('+'|'-') TERM)*;