start: rule+ rule: ntermdef | assocdef ntermdef: IDENTIFIER ":=" rhs ("|" rhs)* rhs: token+ ("@" annotation+)? token: STRING | IDENTIFIER annotation: IDENTIFIER "=" value assocdef: "assoc" STRING lr lr: LEFT | RIGHT LEFT: "left" RIGHT: "right" WORD: ("a".."z" | "0".."9")+ value: STRING | SIGNED_NUMBER | "True" | "False" %import common.WS %import common.SIGNED_NUMBER %ignore WS %import common.ESCAPED_STRING -> STRING %import common.CNAME -> IDENTIFIER