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 VAR_DECL ::= var assign ident