grammar t030specialStates; options { language = JavaScript; } @members { this.recover = function(input, re) { throw re; }; } r : ( {this.cond}? NAME | {!this.cond}? NAME WS+ NAME ) ( WS+ NAME )? EOF ; NAME: ('a'..'z') ('a'..'z' | '0'..'9')+; NUMBER: ('0'..'9')+; WS: ' '+;