Expression Grammar

expression

::= singularExpression | binaryExpression

singularExpression

::= unaryExpression | functionExpresion | ('(' expression ')') | switchCaseExpression | operand

unaryExpression

::= (('-'|'+'|'not') expression) | (expression '!')

binaryExpression

::= singularExpression (arithmeticOperators|comparisonOperators|logicalOperators) expression

arithmeticOperators

::= '+'|'-'|'*'|'/'|'^'

comparisonOperators

::= '>='|'>'|'<='|'<'|'='|'!='

logicalOperators

::= 'and'|'or'

functionExpression

::= functionName '(' expression (',' expression)* ')'

switchCaseExpression

::= 'case' ('when' expression 'then' expression)+ ('else' expression)? 'end'

operand

::= (literal | variable) ('deg'|'rad')?

literal

::= number | boolean | string

variable

::= LETTER (LETTER | DIGIT | UNDERSCORE)*

| '[' LETTER (MINUS | LETTER | DIGIT | UNDERSCORE | DOT)* ']'