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)* ']'