::= SPS ; ::= SPS | # ; ::= | ; ::= SPS AFFECT SPS SPS SEMI ; ::= IDENT SPS ASSIGN SPS QUOTE LEX QUOTE SPS SEMI ; ::= SPS SPS | SPS SPS | ; ::= BAR SPS | # ; ::= SPS | SPS | # ; ::= LESSER IDENT GREATER ; ::= QUOTE LEX QUOTE | IDENT ; ::= EPSILON ; ::= SPS ACTION SPS SPS ACTION SPS | # ; ::= CODE | NUM ; AFFECT ::= '::='; SPS ::= '(\n|\s)*'; LESSER ::= '<'; GREATER ::= '>'; IDENT ::= '[a-zA-Z]([a-z-A-Z0-9_-])*'; SEMI ::= ';'; QUOTE ::= '\''; LEX ::= '([^']|'')+'; EPSILON ::= '#'; BAR ::= '|'; ACTION ::= '@@' CODE ::= '(.*@@)'; NUM ::= '[1-9]([0-9]*)';