diff --git a/more_math/Parser/MathExpr.g4 b/more_math/Parser/MathExpr.g4 index f6344d5..859dfab 100644 --- a/more_math/Parser/MathExpr.g4 +++ b/more_math/Parser/MathExpr.g4 @@ -49,66 +49,72 @@ atom | VARIABLE # VariableExp | NUMBER # NumberExp | CONSTANT # ConstantExp - | '(' expr ')' # ParenExp + | LPAREN expr RPAREN # ParenExp | PIPE expr PIPE # AbsExp - | '[' expr (',' expr)* ']' # ListExp + | LBRACKET expr (COMMA expr)* RBRACKET # ListExp ; // Single-argument functions func1 - : SIN '(' expr ')' # SinFunc - | COS '(' expr ')' # CosFunc - | TAN '(' expr ')' # TanFunc - | ASIN '(' expr ')' # AsinFunc - | ACOS '(' expr ')' # AcosFunc - | ATAN '(' expr ')' # AtanFunc - | SINH '(' expr ')' # SinhFunc - | COSH '(' expr ')' # CoshFunc - | TANH '(' expr ')' # TanhFunc - | ASINH '(' expr ')' # AsinhFunc - | ACOSH '(' expr ')' # AcoshFunc - | ATANH '(' expr ')' # AtanhFunc - | ABS '(' expr ')' # AbsFunc - | SQRT '(' expr ')' # SqrtFunc - | LN '(' expr ')' # LnFunc - | LOG '(' expr ')' # LogFunc - | EXP '(' expr ')' # ExpFunc - | TNORM '(' expr ')' # TNormFunc - | SNORM '(' expr ')' # SNormFunc - | FLOOR '(' expr ')' # FloorFunc - | CEIL '(' expr ')' # CeilFunc - | ROUND '(' expr ')' # RoundFunc - | GAMMA '(' expr ')' # GammaFunc - | SIGM '(' expr ')' # sigmoidFunc - | SFFT '(' expr ')' # sfftFunc - | SIFFT '(' expr ')' # sifftFunc - | ANGL '(' expr ')' # anglFunc - | PRNT '(' expr ')' # printFunc - | FRACT '(' expr ')' # FractFunc - | RELU '(' expr ')' # ReluFunc - | SOFTPLUS '(' expr ')' # SoftplusFunc - | GELU '(' expr ')' # GeluFunc - | SIGN '(' expr ')' # SignFunc - | PRINT_SHAPE '(' expr ')' # PrintShapeFunc - | PINV '(' expr ')' # PinvFunc + : 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 '(' expr ',' expr ')' # PowFunc - | ATAN2 '(' expr ',' expr ')' # Atan2Func - | TMIN '(' expr ',' expr ')' # TMinFunc - | TMAX '(' expr ',' expr ')' # TMaxFunc - | STEP '(' expr ',' expr ')' # StepFunc - | TOPK '(' expr ',' expr ')' # TopkFunc - | BOTK '(' expr ',' expr ')' # BotkFunc + : 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 '(' expr ',' expr ',' expr ')' # ClampFunc - | LERP '(' expr ',' expr ',' expr ')' # LerpFunc - | SMOOTHSTEP '(' expr ',' expr ',' expr ')' # SmoothstepFunc - | RANGE '(' expr ',' expr ',' expr ')' # RangeFunc + : 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 @@ -117,13 +123,13 @@ func4 // N-argument functions funcN - : SMIN '(' expr (',' expr)* ')' # SMinFunc - | SMAX '(' expr (',' expr)* ')' # SMaxFunc - | MAP '(' expr (',' expr)+ ')' # MapFunc - | EZCONV '(' expr (',' expr)+ ')' # EzConvFunc - | CONV '(' expr (',' expr)+ ')' # ConvFunc - | PERM '(' expr ',' expr ')' # PermuteFunc - | RESHAPE '(' expr ',' expr ')' # ReshapeFunc + : 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 @@ -197,6 +203,11 @@ LT : '<'; EQ : '=='; NE : '!='; PIPE : '|'; +LPAREN : '('; +RPAREN : ')'; +COMMA : ','; +LBRACKET : '['; +RBRACKET : ']'; CONSTANT : ('pi'|'PI'|'e'|'E'); NUMBER : [0-9]+ ('.' [0-9]+)?;