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