sawine@0: prog = { rule } sawine@0: rule = pttrn sawine@0: | constrnt sawine@0: | flowp sawine@0: | COM sawine@0: flowp = FLOWP STRING "(" flowp_entry ")" sawine@0: flowp_entry = pttrn_lbl ":" constrnt_lbl sawine@0: pttrn_lbl = STRING sawine@0: constrnt_lbl = STRING sawine@0: constrnt = CONSTRNT STRING "(" cterm ")" sawine@0: cterm = TIMESEP AT string IS INTEGER si_unit sawine@0: | TIMESEP AT string_array IS INTEGER si_unit sawine@0: | TIMESEP AT string IS INTEGER si_unit sawine@0: FROM INTEGER UNTIL INTEGER sawine@0: | TIMESEP AT string_array IS INTEGER si_unit sawine@0: FROM INTEGER UNTIL INTEGER sawine@0: | TIMESEP AT string IS INTEGER si_unit sawine@0: AT FL int_array sawine@0: | TIMESEP AT string_array IS INTEGER si_unit sawine@0: AT FL int_array sawine@0: | TIMESEP AT string IS INTEGER si_unit sawine@0: FROM INTEGER UNTIL INTEGER AT FL int_array sawine@0: | TIMESEP AT string_array IS INTEGER si_unit sawine@0: FROM INTEGER UNTIL INTEGER AT FL int_array sawine@0: | cterm AND cterm sawine@0: si_unit = STRING sawine@0: pttrn = PATTERN ( STRING "(" term ")" | "(" term ")" ) sawine@0: term = int_pt int_op INTEGER sawine@0: | char_pt string_op string sawine@0: | string_pt string_op string sawine@0: | string_array_pt string_array_op string_array sawine@0: | string_array string_array_op string_array_pt sawine@0: | string string_string_array_op string_array_pt sawine@0: | string string_string_array_op char_array_pt sawine@0: | term OR term sawine@0: | term AND term sawine@0: | NOT term sawine@0: | "(" term ")"