MAKEFILE: ========= <makefile> ::= '(' + "makefile" + { <makerule-clause> | <common-clause> }* ')' <makerule-clause> ::= <file-clause> | <all-clause> | <md5-clause> | <always-clause> | <once-clause> | <perms-clause> | <md5-perms-clause> | <paranoid-clause> <common-clause> ::= '(' + "common" + <makerule-clause>* + ')' <file-clause> ::= '(' + <fille-clause-identifier> + <target-spec> + <prereq-spec> + <action>+ + ')' <all-clause> ::= '(' + <all-clause-identifier> + <target-spec> + <prereq-spec> + <action>+ + ')' <md5-clause> ::= '(' + <md5-clause-identifier> + <target-spec> + <prereq-spec> + <action-spec> + ')' <perms-clause> ::= '(' + <perms-clause-identifier> + <target-spec> + <prereq-spec> + <action-spec> + ')' <md5-perms-clause> ::= '(' + <md5-perms-clause-identifier> + <target-spec> + <prereq-spec> + <action-spec> + ')' <paranoid-clause> ::= '(' + <paranoid-clause-identifier> + <target-spec> + <prereq-spec> + <action-spec> + ')' <always-clause> ::= '(' + <always-clause-identifier> + <target-spec> + <prereq-spec> + <action-spec> + ')' <once-clause> ::= '(' + <once-clause-identifier> + <target-spec> + <prereq-spec> + <action-spec> + ')' <file-clause-identifier> ::= "file" | "makefile-rule" | "is-out-of-date?" <all-clause-identifier> ::= "all" <md5-clause-identifier> ::= "md5" <perms-clause-identifier> ::= "perms" <md5-perms-clause-identifier> ::= "md5-perms" <paranoid-clause-identifier> ::= "paranoid" <always-clause-identifier> ::= "always" <once-clause-identifier> ::= "once" <common-target-spec> ::= <target-descr> | <target> | <target-list> <target-descr> ::= <target-pattern> | <target-rx> <target-pattern> ::= '"' + <prefix> + '%' + <suffix> + '"' <prefix> ::= <letter-or-digit>* <suffix> ::= <letter-or-digit>* <target-rx> ::= '(' + "rx" + '(' + <submatch-connector> + <submatch-clause>{3} + ')' + ')' <common-prereq-spec> ::= <prereq-descr> <prereq-pattern> ::= '"' + <prefix> + '%' + <suffix> + '"' <prereq-descr> ::= '(' + { <prereq-pattern> | <prereq> }* + ')' <target-spec> ::= <target> | <target-list> <target> ::= <filename> <target-list> ::= '(' + <filename>+ + ')' <prereq-spec> ::= <prereq-list> <prereq> ::= <filename> <prereq-list> ::= '(' + <prereq>* + ')' <action> ::= <function-call> | <value> <filename> ::= '"' + {<dir-separator> + { 'a'-'z''A'-'Z''0'-'9' ... }+ }+ + '"'