216 lines
6.0 KiB
ANTLR
216 lines
6.0 KiB
ANTLR
grammar MathExpr;
|
|
|
|
// Top-level expression, with operator precedence (lowest to highest)
|
|
expr
|
|
: atom | compExpr
|
|
;
|
|
|
|
compExpr
|
|
: compExpr GT addExpr # GtExp
|
|
| compExpr GE addExpr # GeExp
|
|
| compExpr LT addExpr # LtExp
|
|
| compExpr LE addExpr # LeExp
|
|
| compExpr EQ addExpr # EqExp
|
|
| compExpr NE addExpr # NeExp
|
|
| addExpr # ToAdd
|
|
;
|
|
|
|
addExpr
|
|
: addExpr PLUS mulExpr # AddExp
|
|
| addExpr MINUS mulExpr # SubExp
|
|
| mulExpr # ToMul
|
|
;
|
|
|
|
mulExpr
|
|
: mulExpr MULT powExpr # MulExp
|
|
| mulExpr DIV powExpr # DivExp
|
|
| mulExpr MOD powExpr # ModExp
|
|
| powExpr # ToPow
|
|
;
|
|
|
|
powExpr
|
|
: unaryExpr POW powExpr # PowExp
|
|
| unaryExpr # ToUnary
|
|
;
|
|
|
|
unaryExpr
|
|
: PLUS unaryExpr # UnaryPlus
|
|
| MINUS unaryExpr # UnaryMinus
|
|
| atom # ToAtom
|
|
;
|
|
|
|
// Atoms: function calls, variable, number, constant, or parenthesized expression
|
|
atom
|
|
: func1 # Func1Exp
|
|
| func2 # Func2Exp
|
|
| func3 # Func3Exp
|
|
| func4 # Func4Exp
|
|
| funcN # FuncNExp
|
|
| VARIABLE # VariableExp
|
|
| NUMBER # NumberExp
|
|
| CONSTANT # ConstantExp
|
|
| LPAREN expr RPAREN # ParenExp
|
|
| PIPE expr PIPE # AbsExp
|
|
| LBRACKET expr (COMMA expr)* RBRACKET # ListExp
|
|
;
|
|
|
|
// Single-argument functions
|
|
func1
|
|
: SIN LPAREN expr RPAREN # SinFunc
|
|
| COS LPAREN expr RPAREN # CosFunc
|
|
| TAN LPAREN expr RPAREN # TanFunc
|
|
| ASIN LPAREN expr RPAREN # AsinFunc
|
|
| ACOS LPAREN expr RPAREN # AcosFunc
|
|
| ATAN LPAREN expr RPAREN # AtanFunc
|
|
| SINH LPAREN expr RPAREN # SinhFunc
|
|
| COSH LPAREN expr RPAREN # CoshFunc
|
|
| TANH LPAREN expr RPAREN # TanhFunc
|
|
| ASINH LPAREN expr RPAREN # AsinhFunc
|
|
| ACOSH LPAREN expr RPAREN # AcoshFunc
|
|
| ATANH LPAREN expr RPAREN # AtanhFunc
|
|
| ABS LPAREN expr RPAREN # AbsFunc
|
|
| SQRT LPAREN expr RPAREN # SqrtFunc
|
|
| LN LPAREN expr RPAREN # LnFunc
|
|
| LOG LPAREN expr RPAREN # LogFunc
|
|
| EXP LPAREN expr RPAREN # ExpFunc
|
|
| TNORM LPAREN expr RPAREN # TNormFunc
|
|
| SNORM LPAREN expr RPAREN # SNormFunc
|
|
| FLOOR LPAREN expr RPAREN # FloorFunc
|
|
| CEIL LPAREN expr RPAREN # CeilFunc
|
|
| ROUND LPAREN expr RPAREN # RoundFunc
|
|
| GAMMA LPAREN expr RPAREN # GammaFunc
|
|
| SIGM LPAREN expr RPAREN # sigmoidFunc
|
|
| SFFT LPAREN expr RPAREN # sfftFunc
|
|
| SIFFT LPAREN expr RPAREN # sifftFunc
|
|
| ANGL LPAREN expr RPAREN # anglFunc
|
|
| PRNT LPAREN expr RPAREN # printFunc
|
|
| FRACT LPAREN expr RPAREN # FractFunc
|
|
| RELU LPAREN expr RPAREN # ReluFunc
|
|
| SOFTPLUS LPAREN expr RPAREN # SoftplusFunc
|
|
| GELU LPAREN expr RPAREN # GeluFunc
|
|
| SIGN LPAREN expr RPAREN # SignFunc
|
|
| PRINT_SHAPE LPAREN expr RPAREN # PrintShapeFunc
|
|
| PINV LPAREN expr RPAREN # PinvFunc
|
|
| SUM LPAREN expr RPAREN # SumFunc
|
|
| MEAN LPAREN expr RPAREN # MeanFunc
|
|
| STD LPAREN expr RPAREN # StdFunc
|
|
| VAR LPAREN expr RPAREN # VarFunc
|
|
| MEDIAN LPAREN expr RPAREN # MedianFunc
|
|
;
|
|
|
|
// Two-argument functions
|
|
func2
|
|
: POWE LPAREN expr COMMA expr RPAREN # PowFunc
|
|
| ATAN2 LPAREN expr COMMA expr RPAREN # Atan2Func
|
|
| TMIN LPAREN expr COMMA expr RPAREN # TMinFunc
|
|
| TMAX LPAREN expr COMMA expr RPAREN # TMaxFunc
|
|
| STEP LPAREN expr COMMA expr RPAREN # StepFunc
|
|
| TOPK LPAREN expr COMMA expr RPAREN # TopkFunc
|
|
| BOTK LPAREN expr COMMA expr RPAREN # BotkFunc
|
|
| DOT LPAREN expr COMMA expr RPAREN # DotFunc
|
|
;
|
|
|
|
func3
|
|
: CLAMP LPAREN expr COMMA expr COMMA expr RPAREN # ClampFunc
|
|
| LERP LPAREN expr COMMA expr COMMA expr RPAREN # LerpFunc
|
|
| SMOOTHSTEP LPAREN expr COMMA expr COMMA expr RPAREN # SmoothstepFunc
|
|
| RANGE LPAREN expr COMMA expr COMMA expr RPAREN # RangeFunc
|
|
;
|
|
|
|
func4
|
|
: SWAP LPAREN expr COMMA expr COMMA expr COMMA expr RPAREN # SwapFunc
|
|
;
|
|
|
|
// N-argument functions
|
|
funcN
|
|
: SMIN LPAREN expr (COMMA expr)* RPAREN # SMinFunc
|
|
| SMAX LPAREN expr (COMMA expr)* RPAREN # SMaxFunc
|
|
| MAP LPAREN expr (COMMA expr)+ RPAREN # MapFunc
|
|
| EZCONV LPAREN expr (COMMA expr)+ RPAREN # EzConvFunc
|
|
| CONV LPAREN expr (COMMA expr)+ RPAREN # ConvFunc
|
|
| PERM LPAREN expr COMMA expr RPAREN # PermuteFunc
|
|
| RESHAPE LPAREN expr COMMA expr RPAREN # ReshapeFunc
|
|
;
|
|
|
|
// LEXER RULES
|
|
|
|
SIN : 'sin';
|
|
COS : 'cos';
|
|
TAN : 'tan';
|
|
ASIN : 'asin';
|
|
ACOS : 'acos';
|
|
ATAN : 'atan';
|
|
ATAN2 : 'atan2';
|
|
SINH : 'sinh';
|
|
COSH : 'cosh';
|
|
TANH : 'tanh';
|
|
ASINH : 'asinh';
|
|
ACOSH : 'acosh';
|
|
ATANH : 'atanh';
|
|
ABS : 'abs';
|
|
SQRT : 'sqrt';
|
|
LN : 'ln';
|
|
LOG : 'log';
|
|
EXP : 'exp';
|
|
SMIN : 'smin';
|
|
SMAX : 'smax';
|
|
TMIN : 'tmin';
|
|
TMAX : 'tmax';
|
|
TNORM : 'tnorm';
|
|
SNORM : 'snorm';
|
|
FLOOR : 'floor';
|
|
CEIL : 'ceil';
|
|
ROUND : 'round';
|
|
GAMMA : 'gamma';
|
|
POWE : 'pow';
|
|
SIGM : 'sigm';
|
|
CLAMP : 'clamp';
|
|
SFFT : 'fft';
|
|
SIFFT : 'ifft';
|
|
ANGL : 'angle';
|
|
PRNT : 'print';
|
|
PRINT_SHAPE : 'print_shape' | 'pshp';
|
|
LERP : 'lerp';
|
|
STEP : 'step';
|
|
SMOOTHSTEP : 'smoothstep';
|
|
FRACT : 'fract';
|
|
RELU : 'relu';
|
|
SOFTPLUS : 'softplus';
|
|
GELU : 'gelu';
|
|
SIGN : 'sign';
|
|
MAP : 'map';
|
|
EZCONV : 'ezconvolution' | 'ezconv';
|
|
CONV : 'convolution' | 'conv';
|
|
SWAP : 'swap';
|
|
PERM : 'permute' | 'perm';
|
|
RESHAPE : 'reshape' | 'rshp';
|
|
RANGE : 'range';
|
|
TOPK : 'topk';
|
|
BOTK : 'botk';
|
|
PINV : 'pinv';
|
|
|
|
PLUS : '+';
|
|
MINUS : '-';
|
|
MULT : '*';
|
|
DIV : '/';
|
|
MOD : '%';
|
|
POW : '^';
|
|
|
|
GE : '>=';
|
|
GT : '>';
|
|
LE : '<=';
|
|
LT : '<';
|
|
EQ : '==';
|
|
NE : '!=';
|
|
PIPE : '|';
|
|
LPAREN : '(';
|
|
RPAREN : ')';
|
|
COMMA : ',';
|
|
LBRACKET : '[';
|
|
RBRACKET : ']';
|
|
|
|
CONSTANT : ('pi'|'PI'|'e'|'E');
|
|
NUMBER : [0-9]+ ('.' [0-9]+)?;
|
|
VARIABLE : [a-zA-Z_] [a-zA-Z_0-9]*;
|
|
WS : [ \t\r\n]+ -> skip;
|