The general syntax is:
[ { <native-macro-name> | <user-defined-name> } ] [ <arg> ... ]
The syntax for <arg> depends on the particular macro,
but is generally a full expression (see Macro Expression Syntax).
Here are the exceptions to that general rule:
INVOKE macros, implicit or explicit, must be followed by
a list of name/string value pairs. The string values are
simple expressions, as described above.
That is, the INVOKE syntax is one of these two:
<user-macro-name> [ <name> [ = <expression> ] ... ] INVOKE <name-expression> [ <name> [ = <expression> ] ... ]
FOR <name> [ <separator-string> ] FOR <name> (...Scheme expression list) FOR <name> IN <string-entry> [ ... ]
where:
must be a simple name.
is inserted between copies of the enclosed block. Do not try to use “IN” as your separator string. It won’t work.
is an entry in a list of strings. “<name>” is assigned
each value from the “IN” list before expanding the FOR block.
is expected to contain one or more of the for-from,
for-to, for-by, and for-sep functions.
(See FOR - Emit a template block multiple times, and AutoGen Scheme Functions)
The first two forms iterate over the FOR block if <name>
is found in the AutoGen values. The last form will create the AutoGen
value named <name>.
DEFINE macros must be followed by a simple name.
Anything after that is ignored. Consequently, that “comment space”
may be used to document any named values the macro expects to have
set up as arguments. See DEFINE - Define a user AutoGen macro.
COMMENT, ELSE, ESAC and the END*
macros take no arguments and ignore everything after the macro name
(e.g. see COMMENT - A block of comment to be ignored)