exp = group | or_exp ;
group = '(', or_exp, ')' ;
or_exp = and_exp, { or_delim, and_exp } ;
or_delim = '|' | ';' ;
and_exp = (function | group | and_strict), { ',', (function | group | and_strict) } ;
function = identifier, '(', [arg, { ',', arg }], ')' ;
and_strict = (function | group), { '&', (function | group) } ;
identifier = /[a-z]+/
arg = and_exp | arg_array | value ;
value = /[_0-9a-zA-Z]+/ ;
arg_array = '(', value, { ',', value }, ')' ;