GRAMMAR	 ::= (IGN_LIST | ( RULE_NUM ) RULE)+
IGN_LIST ::= '%IGNORE' '=' ( TERMINAL )+ ';'
RULE_NUM ::= [0-9]+
RULE	 ::= NONTERMINAL ':' BODY ( '|' BODY )* ';'
BODY	 ::= ( SYMBOL )*
SYMBOL	 ::= NONTERMINAL | TERMINAL 
NONTERMINAL ::= ('$'|'$$')[a-zA-Z_"][a-zA-Z_-"0-9]*
TERMINAL ::= [a-zA-Z_"][a-zA-Z_-"0-9]*