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]*