module Travis
expr = exp2 { or exp2 } exp2 = oprd { and oprd } oprd = term | '(' expr ')' | not expr
var = 'type'
| 'repo' | 'head_repo' | 'os' | 'dist' | 'group' | 'sudo' | 'language' | 'sender' | 'fork' | 'branch' | 'head_branch' | 'tag' | 'commit_message';
func = 'env' || 'concat'; pred = 'present' | 'blank';
eq = '=' | '==' | '!='; re = '=~' | '~=` | '!~'; in = 'in' | 'not in' | 'IN' | 'NOT IN'; is = 'is' | 'is not' | 'IS' | 'IS NOT'; or = 'or' | 'OR' | '||'; and = 'and' | 'AND' | '&&';
list = oprd | oprd ',' list; call = func '(' list ')'; val = word | quoted;
oprd = var | val | call;
term = oprd is pred
| oprd in '(' list ')' | oprd re regx | oprd eq oprd | oprd;
expr = expr or expr
| expr and expr | not expr | '(' expr ')' | term