DOC ::= (VAR_DECL | RULE)* RULE ::= TARGET rarrow DEPS BLOCK TARGET ::= LITERAL+ DEPS ::= LITERAL* BLOCK ::= obrace CMD_LST cbrace CMD_LST ::= (CMD (comma CMD)* comma?)? CMD ::= LITERAL* LITERAL ::= ident | var | ARRAY VAR_DECL ::= var assign (LITERAL | ARRAY) ARRAY ::= opar LITERAL* cpar