Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
grammar extcalc;
/*------------------------------------------------------------------
* PARSER RULES
*------------------------------------------------------------------*/
expr : plusminus* EOF ;
plusminus
: multdiv ( ( '+' | '-' ) multdiv )* ;
multdiv : factor ( ( '*' | '/' ) factor )* ;
factor : NUMBER | func | '(' plusminus ')' ;
func : NAME '(' plusminus ')' ;
/*------------------------------------------------------------------
* LEXER RULES
*------------------------------------------------------------------*/
NUMBER : (DIGIT)+ ('.' (DIGIT)+)* ;
NAME : (ALPHA)+ ;
WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { $channel = HIDDEN; } ;
fragment DIGIT : '0'..'9' ;
fragment ALPHA : 'a'..'z' ;
Парсер формул с помощью метода рекурсивного спуска