@mike-lischke/antlr-tgen
Version:
A generator for antlr-ng runtime test cases
65 lines (57 loc) • 2.1 kB
Plain Text
[notes]
This is a regression test for #239 "recoursive parser using implicit tokens
ignore white space lexer rule". https://github.com/antlr/antlr4/issues/239
[type]
Parser
[grammar]
grammar Expr;
prog : expression EOF;
expression
: ID '(' expression (',' expression)* ')' # doFunction
| '(' expression ')'# doParenthesis
| '!' expression # doNot
| '-' expression # doNegate
| '+' expression # doPositiv
| expression '^' expression # doPower
| expression '*' expression # doMultipy
| expression '/' expression # doDivide
| expression '%' expression # doModulo
| expression '-' expression # doMinus
| expression '+' expression # doPlus
| expression '=' expression # doEqual
| expression '!=' expression # doNotEqual
| expression '>' expression # doGreather
| expression '>=' expression # doGreatherEqual
| expression '\<' expression # doLesser
| expression '\<=' expression # doLesserEqual
| expression K_IN '(' expression (',' expression)* ')' # doIn
| expression ( '&' | K_AND) expression# doAnd
| expression ( '|' | K_OR) expression # doOr
| '[' expression (',' expression)* ']'# newArray
| K_TRUE # newTrueBoolean
| K_FALSE # newFalseBoolean
| NUMBER # newNumber
| DATE # newDateTime
| ID # newIdentifier
| SQ_STRING# newString
| K_NULL # newNull
;
// Fragments
fragment DIGIT : '0' .. '9';
fragment UPPER : 'A' .. 'Z';
fragment LOWER : 'a' .. 'z';
fragment LETTER : LOWER | UPPER;
fragment WORD : LETTER | '_' | '$' | '#' | '.';
fragment ALPHANUM : WORD | DIGIT;
// Tokens
ID : LETTER ALPHANUM*;
NUMBER : DIGIT+ ('.' DIGIT+)? (('e'|'E')('+'|'-')? DIGIT+)?;
DATE : '\'' DIGIT DIGIT DIGIT DIGIT '-' DIGIT DIGIT '-' DIGIT DIGIT (' ' DIGIT DIGIT ':' DIGIT DIGIT ':' DIGIT DIGIT ('.' DIGIT+)?)? '\'';
SQ_STRING : '\'' ('\'\'' | ~'\'')* '\'';
DQ_STRING : '"' ('\\\\"' | ~'"')* '"';
WS : [ \t\n\r]+ -> skip ;
COMMENTS : ('/*' .*? '*' '/' | '//' ~'\n'* '\n' ) -> skip;
[start]
prog
[input]
Test(1,3)