grammar SemanticPredicateReduction; options { language=CSharp3; TokenLabelType=CommonToken; } @lexer::namespace{Antlr3.Runtime.Test} @parser::namespace{Antlr3.Runtime.Test} start : mainprog optional? EOF; mainprog : '(' args ')'; args : ID ID*; optional: ':' args element ':' args element2; element : {true}?=>args2; element2: {false}?=>args3; args2 : ID ID*; args3 : ID ID* ; WS : (' '|'\t'|'\n'|'\r')+; ID : ('a'..'z')+;