Probassigns: probassign+=Probassign ('+' probassign+=Probassign)*; Probassign: (Probability ':')? nextstateassign+=Nextstateassign ('&'nextstateassign+=Nextstateassign)*; Probability: mult+=Mult (('+'|'-') mult+=Mult)*; Mult: sign+=Sign (('*'|'/') sign+=Sign)*; Sign: ('+'|'-')* Prob; Prob: name+=Name | Val | '('probability+=Probability')'; Nextstateassign: ('(' newstate+=Newstate '=' stateexpr+=Stateexpr ')')+;
Furthermore, each type that is added to the currently possible return types automatically extends the current return type of the parser rule.