Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.

Grammar syntax

All grammars are of the form:


See Rule and subrule options for a list of valid rule options and their semantics.

Lexer, Parser and Tree Parser rules


Rules in a lexical grammar are token names:


special cases of identifier names. Lexer rules must start with an upper case letter, parser and tree parser rules must start with a lower case letter.

Code Block
LexerRuleName : ('A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;

ParserRuleName : ('a'..'z') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;

TreeParserRuleName : ('a'..'z') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;

Here are some common lexical rules for programming languages:

No Format
WS  : (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;}
    : '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}
    : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}

The $channel=HIDDEN; action places those tokens on a hidden channel. They are still sent to the parser, but the parser does not see them. Actions, however, can ask for the hidden channel tokens. If you want to literally throw out tokens then use action skip(); (see org.antlr.runtime.Lexer.skip()).