The expression syntax is similar to the C language expressions. The main difference is that the expressions operate with Boolean type, so there is no need to distinguish Boolean and bitwise operators (&& and &, || and |, and so forth). There are also no assignment operations. The operations priority is the same as in C language.
Complete formal syntax definitions follow:
selector_expression ::- logic_expression ? first_expression : second_expression logic_expression logic_expression ::- logic_expression | logic_expression_and logic_expression_and logic_expression_and ::- logic_expression_and & logic_expression_cmp logic_expression_cmp logic_expression_cmp ::- logic_expression_cmp operation_cmp math_expression math_expression math_expression ::- math_expression operation_add math_expression_mul math_expression_mul math_expression_mul ::- math_expression_mul operation_mul unary_expression unary_expression unary_expression ::- unary_operator unary_expression (expression) constant identifier operation_cmp ::- = == != > < >= <= operation_add ::- + - operation_mul ::- * / unary_operation ::- + - ! constant ::- integer_constant // regular_expression: + string_constant // regular_expression:".*" boolean_constant // case_insensitive:TRUE, FALSE, ON, OFF // case_insensitive:YES, NO, OFF identifier ::- [a-zA-Z_][0-9a-zA-Z_]*