Helpers digit = ['0' .. '9']; Tokens union = 'union'; unitcircle = 'unitcircle'; scale = 'scale'; lpar = '('; rpar = ')'; comma = ',' ; number = digit+; Productions region = {unitcircle} unitcircle | {union} union lpar [r1]:region comma [r2]:region rpar | {scale} scale lpar number comma region rpar;