[1] ebnf ::= (declaration | rule)*
[2] declaration ::= '@terminals' | pass
[3] rule ::= LHS expression
[4] expression ::= alt
[5] alt ::= seq ('|' seq)*
[6] seq ::= diff+
[7] diff ::= postfix ('-' postfix)?
[8] postfix ::= primary POSTFIX?
[9] primary ::= HEX | SYMBOL | O_RANGE | RANGE | STRING1 | STRING2 | ('(' expression ')')
[10] pass ::= '@pass' expression
@terminals # Productions for terminals
[11] LHS ::= ('[' SYMBOL ']' #x20+)? SYMBOL #x20* '::='
[12] SYMBOL ::= ([a-z] | [A-Z] | [0-9] | '_' | '.')+
[13] HEX ::= '#x' ([a-f] | [A-F] | [0-9])+
[14] RANGE ::= '[' ((R_CHAR '-' R_CHAR) | (HEX '-' HEX) | R_CHAR | HEX)+ '-'? (']' - LHS)
[15] O_RANGE ::= '[^' ((R_CHAR '-' R_CHAR) | (HEX '-' HEX) | R_CHAR | HEX)+ '-'? ']'
[16] STRING1 ::= '"' (CHAR - '"')* '"'
[17] STRING2 ::= "'" (CHAR - "'")* "'"
[18] CHAR ::= [#x09#x0A#x0D] | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x00010000-#x0010FFFF]
[19] R_CHAR ::= CHAR - (']' | '-' | HEX)
[20] POSTFIX ::= [?*+]
[21] PASS ::= [#x09#x0A#x0D#x20] | ((('#' - '#x') | '//') [^#x0A#x0D]*) | ('/*' (('*' [^/])? | [^*])* '*/') | ('(*' (('*' [^)])? | [^*])* '*)')
@pass PASS