I'm using java CUP to generate a LARL(1) parser for a tiny programming language. Is there a compact form to express optional non-terminals in a rule? For example, in the following rule
statement ::= IDENT WHITE EQ WHITE value WHITE SEMICOLON |
IDENT WHITE EQ WHITE value SEMICOLON |
IDENT WHITE EQ value SEMICOLON |
IDENT EQ value SEMICOLON |
block;
I repeat four times essentially the same thing, when it would be natural to put something like
statement ::= IDENT (WHITE) EQ (WHITE) value (WHITE) SEMICOLON |
block;