Node:Input File Grammar, Next:Simple instructions, Previous:Input File Format, Up:Input File Format
The grammar is in EBNF format, with a|b meaning
"a or b", {c} meaning 0 or more repetitions
of c and [d] meaning 0 or 1 repetitions of d.
Vmgen input is not free-format, so you have to take care where you put
newlines (and, in a few cases, white space).
description: {instruction|comment|eval-escape|c-escape}
instruction: simple-inst|superinst
simple-inst: ident '(' stack-effect ')' newline c-code newline newline
stack-effect: {ident} '--' {ident}
super-inst: ident '=' ident {ident}
comment: '\ ' text newline
eval-escape: '\E ' text newline
c-escape: '\C ' text newline
Note that the \s in this grammar are meant literally, not as
C-style encodings for non-printable characters.
There are two ways to delimit the C code in simple-inst:
{ at the start of a line (i.e., not even
white space before it), you have to end it with a } at the start
of a line (followed by a newline). In this case you may have empty
lines within the C code (typically used between variable definitions and
statements).
{. Then the C code ends at the first
empty line, so you cannot have empty lines within this code.
The text in comment, eval-escape and c-escape must
not contain a newline. Ident must conform to the usual
conventions of C identifiers (otherwise the C compiler would choke on
the Vmgen output), except that idents in stack-effect may have a
stack prefix (for stack prefix syntax, see Eval escapes).
The c-escape passes the text through to each output file (without
the \C). This is useful mainly for conditional compilation
(i.e., you write \C #if ... etc.).
In addition to the syntax given in the grammer, Vmgen also processes
sync lines (lines starting with #line), as produced by m4
-s (see Invoking m4) and similar
tools. This allows associating C compiler error messages with the
original source of the C code.
Vmgen understands a few extensions beyond the grammar given here, but
these extensions are only useful for building Gforth. You can find a
description of the format used for Gforth in prim.