Expression syntax

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: [0123456789]+
    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_]*