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;} ; COMMENT : '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;} ; LINE_COMMENT : '//' ~('\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()).
...