/usr/share/mozart/doc/compiler/node7.html is in mozart-doc 1.4.0-8ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>C Syntax Tree Format</TITLE><LINK href="ozdoc.css" rel="stylesheet" type="text/css"></HEAD><BODY><TABLE align="center" border="0" cellpadding="6" cellspacing="6" class="nav"><TR bgcolor="#DDDDDD"><TD><A href="node6.html#appendix.narrator"><< Prev</A></TD><TD><A href="index.html">- Up -</A></TD><TD><A href="node8.html#appendix.bytecode">Next >></A></TD></TR></TABLE><DIV id="appendix.syntax"><H1><A name="appendix.syntax">C Syntax Tree Format</A></H1><P> This appendix documents the syntax tree data structure used by the compiler. This information is only needed by implementors of custom front-ends. Most nodes are self-explanatory; if in doubt, it is recommended that you refer to the Gump sample implementing an Oz parser (installed at <CODE>examples/gump/OzParser.ozg</CODE>). </P><DIV class="apropos"><P class="margin">Input</P><P> </P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>input</I>></TD><TD align="center"> ::= </TD><TD><CODE>parseError</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>[</CODE><<I>compilation unit</I>><CODE>]</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P></DIV><DIV class="apropos"><P class="margin">Compilation Units</P><P> </P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>compilation unit</I>></TD><TD align="center"> ::= </TD><TD><<I>phrase</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>directive</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fDeclare(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>directive</I>></TD><TD align="center"> ::= </TD><TD><CODE>dirSwitch([</CODE><<I>switch</I>><CODE>])</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>dirPushSwitches</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>dirPopSwitches</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>dirLocalSwitches</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>switch</I>></TD><TD align="center"> ::= </TD><TD><CODE>on(</CODE><<I>switch name</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>off(</CODE><<I>switch name</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>switch name</I>></TD><TD align="center"> ::= </TD><TD><<I>atom</I>></TD></TR></TABLE></BLOCKQUOTE><P></P></DIV><H2><A name="label31">C.1 The Base Language</A></H2><DIV class="apropos"><P class="margin">Phrases</P><P> At the syntactical level, statements are not distinguished from expressions. Both are subsumed by <<I>phrase</I>>. In a top-down analysis of the tree, it can be determined which phrases need to be statements and which need to be expressions. The <CODE>fStepPoint</CODE> form is only required if you want to provide support for source-level debugging: It wraps the contained phrase into a step point (see <A href="../ozcar/index.html">``The Mozart Debugger''</A>); the atom can be freely chosen to indicate its kind (<CODE>call</CODE>, <CODE>conditional</CODE>, etc.). </P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>phrase</I>></TD><TD align="center"> ::= </TD><TD><CODE>fStepPoint(</CODE><<I>phrase</I>><CODE> </CODE><<I>atom</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fAnd(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fEq(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fAssign(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fOrElse(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fAndThen(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fOpApply(</CODE><<I>atom</I>><CODE> [</CODE><<I>phrase</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fOpApplyStatement(</CODE><<I>atom</I>><CODE> [</CODE><<I>phrase</I>><CODE>]</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"></TD><TD><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fDotAssign(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fObjApply(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fAt(</CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>atom literal</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>escapable variable</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>wildcard</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fSelf(</CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fDollar(</CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>int literal</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fFloat(</CODE><<I>float</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fRecord(</CODE><<I>label</I>><CODE> [</CODE><<I>record argument</I>><CODE>])</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fOpenRecord(</CODE><<I>label</I>><CODE> [</CODE><<I>record argument</I>><CODE>])</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fApply(</CODE><<I>phrase</I>><CODE> [</CODE><<I>phrase</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fProc(</CODE><<I>phrase</I>><CODE> [</CODE><<I>phrase</I>><CODE>] </CODE><<I>phrase</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"></TD><TD><CODE> [</CODE><<I>proc flag</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fFun(</CODE><<I>phrase</I>><CODE> [</CODE><<I>phrase</I>><CODE>] </CODE><<I>phrase</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"></TD><TD><CODE> [</CODE><<I>proc flag</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fFunctor(</CODE><<I>phrase</I>><CODE> [</CODE><<I>functor descriptor</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fClass(</CODE><<I>phrase</I>><CODE> [</CODE><<I>class descriptor</I>><CODE>]</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"></TD><TD><CODE> [</CODE><<I>meth</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fLocal(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fBoolCase(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>opt else</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fCase(</CODE><<I>phrase</I>><CODE> [</CODE><<I>case clause</I>><CODE>]</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"></TD><TD><CODE> </CODE><<I>opt else</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fFOR([</CODE><<I>for decl</I>><CODE>] </CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fLockThen(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fLock(</CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fThread(</CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fTry(</CODE><<I>phrase</I>><CODE> </CODE><<I>catch</I>><CODE> </CODE><<I>finally</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fRaise(</CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fSkip(</CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>label</I>></TD><TD align="center"> ::= </TD><TD><<I>atom literal</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>variable</I>></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>atom literal</I>></TD><TD align="center"> ::= </TD><TD><CODE>fAtom(</CODE><<I>literal</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>variable</I>></TD><TD align="center"> ::= </TD><TD><CODE>fVar(</CODE><<I>atom</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>escapable variable</I>></TD><TD align="center"> ::= </TD><TD><<I>variable</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fEscape(</CODE><<I>variable</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>wildcard</I>></TD><TD align="center"> ::= </TD><TD><CODE>fWildcard(</CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>int literal</I>></TD><TD align="center"> ::= </TD><TD><CODE>fInt(</CODE><<I>int</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>record argument</I>></TD><TD align="center"> ::= </TD><TD><<I>phrase</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fColon(</CODE><<I>feature</I>><CODE> </CODE><<I>phrase</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P>Procedures can carry flags (atoms following the <CODE><SPAN class="keyword">proc</SPAN></CODE> or <CODE><SPAN class="keyword">fun</SPAN></CODE> keyword). For the moment, the only recognized flags are <CODE>instantiate</CODE> (the body's code is copied upon application), <CODE>lazy</CODE> (the body has by-need semantics), <CODE>dynamic</CODE> (disable static-call optimization of this procedure), and <CODE>sited</CODE> (cannot be pickled). Other atoms are silently ignored. </P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>proc flag</I>></TD><TD align="center"> ::= </TD><TD><<I>atom literal</I>></TD></TR></TABLE></BLOCKQUOTE><P></P></DIV><DIV class="apropos"><P class="margin">Functors</P><P> </P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>functor descriptor</I>></TD><TD align="center"> ::= </TD><TD><CODE>fRequire([</CODE><<I>import decl</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fPrepare(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fImport([</CODE><<I>import decl</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fExport([</CODE><<I>export decl</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fDefine(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>import decl</I>></TD><TD align="center"> ::= </TD><TD><CODE>fImportItem(</CODE><<I>variable</I>><CODE> [</CODE><<I>aliased feature</I>><CODE>]</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"></TD><TD><CODE> </CODE><<I>opt import at</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>aliased feature</I>></TD><TD align="center"> ::= </TD><TD><<I>feature no var</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>variable</I>><CODE><SPAN class="keyword">#</SPAN></CODE><<I>feature no var</I>></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>opt import at</I>></TD><TD align="center"> ::= </TD><TD><CODE>fNoImportAt</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fImportAt(</CODE><<I>atom literal</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>export decl</I>></TD><TD align="center"> ::= </TD><TD><CODE>fExportItem(</CODE><<I>export item</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>export item</I>></TD><TD align="center"> ::= </TD><TD><<I>variable</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fColon(</CODE><<I>feature no var</I>><CODE> </CODE><<I>variable</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P></DIV><DIV class="apropos"><P class="margin">Classes</P><P> </P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>class descriptor</I>></TD><TD align="center"> ::= </TD><TD><CODE>fFrom([</CODE><<I>phrase</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fProp([</CODE><<I>phrase</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fAttr([</CODE><<I>attr or feat</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fFeat([</CODE><<I>attr or feat</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>attr or feat</I>></TD><TD align="center"> ::= </TD><TD><<I>escaped feature</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>escaped feature</I>><CODE><SPAN class="keyword">#</SPAN></CODE><<I>phrase</I>></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>meth</I>></TD><TD align="center"> ::= </TD><TD><CODE>fMeth(</CODE><<I>meth head</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>meth head</I>></TD><TD align="center"> ::= </TD><TD><<I>meth head 1</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fEq(</CODE><<I>meth head 1</I>><CODE> </CODE><<I>variable</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0" class="compact"><TR valign="top"><TD colspan="3"><<I>meth head 1</I>> ::= </TD></TR><TR valign="top"><TD> </TD><TD></TD><TD><<I>atom literal</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>escapable variable</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fRecord(</CODE><<I>meth head label</I>><CODE> [</CODE><<I>meth argument</I>><CODE>])</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fOpenRecord(</CODE><<I>meth head label</I>><CODE> [</CODE><<I>meth argument</I>><CODE>])</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>meth head label</I>></TD><TD align="center"> ::= </TD><TD><<I>atom literal</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>escapable variable</I>></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0" class="compact"><TR valign="top"><TD colspan="3"><<I>meth argument</I>> ::= </TD></TR><TR valign="top"><TD> </TD><TD></TD><TD><CODE>fMethArg(</CODE><<I>meth arg term</I>><CODE> </CODE><<I>default</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fMethColonArg(</CODE><<I>feature</I>><CODE> </CODE><<I>meth arg term</I>><CODE> </CODE><<I>default</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>meth arg term</I>></TD><TD align="center"> ::= </TD><TD><<I>variable</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>wildcard</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fDollar(</CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>default</I>></TD><TD align="center"> ::= </TD><TD><CODE>fNoDefault</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fDefault(</CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P></DIV><DIV class="apropos"><P class="margin">Features</P><P> </P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>feature no var</I>></TD><TD align="center"> ::= </TD><TD><<I>atom literal</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>int literal</I>></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>feature</I>></TD><TD align="center"> ::= </TD><TD><<I>feature no var</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>variable</I>></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>escaped feature</I>></TD><TD align="center"> ::= </TD><TD><<I>feature no var</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>escapable variable</I>></TD></TR></TABLE></BLOCKQUOTE><P></P></DIV><DIV class="apropos"><P class="margin">Other</P><P> </P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>case clause</I>></TD><TD align="center"> ::= </TD><TD><CODE>fCaseClause(</CODE><<I>pattern</I>><CODE> </CODE><<I>phrase</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>pattern</I>></TD><TD align="center"> ::= </TD><TD><<I>phrase</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fSideCondition(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>catch</I>></TD><TD align="center"> ::= </TD><TD><CODE>fNoCatch</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fCatch([</CODE><<I>case clause</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>finally</I>></TD><TD align="center"> ::= </TD><TD><CODE>fNoFinally</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>phrase</I>></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>opt else</I>></TD><TD align="center"> ::= </TD><TD><CODE>fNoElse(</CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>phrase</I>></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>for decl</I>></TD><TD align="center"> ::= </TD><TD><CODE>forFeature(</CODE><<I>atom literal</I>><CODE> </CODE><<I>phrase</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>forPattern(</CODE><<I>phrase</I>><CODE> </CODE><<I>for gen</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>for gen</I>></TD><TD align="center"> ::= </TD><TD><CODE>forGeneratorList(</CODE><<I>phrase</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>forGeneratorInt(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>opt phrase</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>forGeneratorC(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>opt phrase</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>opt phrase</I>></TD><TD align="center"> ::= </TD><TD><<I>phrase</I>> </TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE><SPAN class="keyword">unit</SPAN></CODE></TD></TR></TABLE></BLOCKQUOTE><P></P></DIV><DIV class="apropos"><P class="margin">Coordinates</P><P> Each triple consisting of an <<I>atom</I>> and two <<I>int</I>>s denotes a file name (<CODE><SPAN class="string">''</SPAN></CODE> if none known), a line number (starting at <CODE>1</CODE>; required) and a column number (starting at <CODE>0</CODE>; <CODE><SPAN class="keyword">~</SPAN>1</CODE> if none known). If two triples are given, then they denote the starting and ending coordinates of a construct. A <CODE>pos</CODE> may be turned into a <CODE>fineStep</CODE> or a <CODE>coarseStep</CODE>, denoting a step point for debugging. <CODE><SPAN class="keyword">unit</SPAN></CODE> is an unknown coordinate. </P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>coord</I>></TD><TD align="center"> ::= </TD><TD><CODE>pos(</CODE><<I>atom</I>><CODE> </CODE><<I>int</I>><CODE> </CODE><<I>int</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>pos(</CODE><<I>atom</I>><CODE> </CODE><<I>int</I>><CODE> </CODE><<I>int</I>><CODE> </CODE><<I>atom</I>><CODE> </CODE><<I>int</I>><CODE> </CODE><<I>int</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fineStep(</CODE><<I>atom</I>><CODE> </CODE><<I>int</I>><CODE> </CODE><<I>int</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fineStep(</CODE><<I>atom</I>><CODE> </CODE><<I>int</I>><CODE> </CODE><<I>int</I>><CODE> </CODE><<I>atom</I>><CODE> </CODE><<I>int</I>><CODE> </CODE><<I>int</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>coarseStep(</CODE><<I>atom</I>><CODE> </CODE><<I>int</I>><CODE> </CODE><<I>int</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>coarseStep(</CODE><<I>atom</I>><CODE> </CODE><<I>int</I>><CODE> </CODE><<I>int</I>><CODE> </CODE><<I>atom</I>><CODE> </CODE><<I>int</I>><CODE> </CODE><<I>int</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE><SPAN class="keyword">unit</SPAN></CODE></TD></TR></TABLE></BLOCKQUOTE><P></P></DIV><H2><A name="label32">C.2 Finite Domain Extensions and Combinators</A></H2><P> </P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>phrase</I>></TD><TD align="center"> += </TD><TD><<I>fd expression</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fFail(</CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fNot(</CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fCond([</CODE><<I>clause</I>><CODE>] </CODE><<I>opt else</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fOr([</CODE><<I>clause opt then</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fDis([</CODE><<I>clause opt then</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fChoice([</CODE><<I>phrase</I>><CODE>] </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0" class="compact"><TR valign="top"><TD colspan="3"><<I>fd expression</I>> ::= </TD></TR><TR valign="top"><TD> </TD><TD></TD><TD><CODE>fFdCompare(</CODE><<I>atom</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fFdIn(</CODE><<I>atom</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>clause</I>></TD><TD align="center"> ::= </TD><TD><CODE>fClause(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>clause opt then</I>></TD><TD align="center"> ::= </TD><TD><CODE>fClause(</CODE><<I>phrase</I>><CODE> </CODE><<I>phrase</I>><CODE> </CODE><<I>opt then</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>opt then</I>></TD><TD align="center"> ::= </TD><TD><CODE>fNoThen(</CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>phrase</I>></TD></TR></TABLE></BLOCKQUOTE><P></P><H2><A name="label33">C.3 Gump Extensions</A></H2><P> </P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0" class="compact"><TR valign="top"><TD colspan="3"><<I>compilation unit</I>> += </TD></TR><TR valign="top"><TD> </TD><TD></TD><TD><CODE>fSynTopLevelProductionTemplates([</CODE><<I>prod clause</I>><CODE>])</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>phrase</I>></TD><TD align="center"> += </TD><TD><CODE>fScanner(</CODE><<I>variable</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"></TD><TD><CODE> [</CODE><<I>class descriptor</I>><CODE>] [</CODE><<I>meth</I>><CODE>]</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"></TD><TD><CODE> [</CODE><<I>scanner rule</I>><CODE>] </CODE><<I>atom</I>><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fParser(</CODE><<I>variable</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"></TD><TD><CODE> [</CODE><<I>class descriptor</I>><CODE>] [</CODE><<I>meth</I>><CODE>]</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"></TD><TD><CODE> </CODE><<I>token clause</I>><CODE> [</CODE><<I>parser descriptor</I>><CODE>] </CODE><<I>int</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"></TD><TD><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>grammar symbol</I>></TD><TD align="center"> ::= </TD><TD><<I>atom literal</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>variable</I>></TD></TR></TABLE></BLOCKQUOTE><P></P><DIV class="apropos"><P class="margin">Scanners</P><P> </P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>scanner rule</I>></TD><TD align="center"> ::= </TD><TD><CODE>fMode(</CODE><<I>variable</I>><CODE> [</CODE><<I>mode descriptor</I>><CODE>])</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>lex clause</I>></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>mode descriptor</I>></TD><TD align="center"> ::= </TD><TD><CODE>fInheritedModes([</CODE><<I>variable</I>><CODE>])</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>lex clause</I>></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>lex clause</I>></TD><TD align="center"> ::= </TD><TD><CODE>fLexicalAbbreviation(</CODE><<I>grammar symbol</I>><CODE> </CODE><<I>regex</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fLexicalRule(</CODE><<I>regex</I>><CODE> </CODE><<I>phrase</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>regex</I>></TD><TD align="center"> ::= </TD><TD><<I>string</I>></TD></TR></TABLE></BLOCKQUOTE><P></P></DIV><DIV class="apropos"><P class="margin">Parsers</P><P> </P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>token clause</I>></TD><TD align="center"> ::= </TD><TD><CODE>fToken([</CODE><<I>token decl</I>><CODE>])</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>token decl</I>></TD><TD align="center"> ::= </TD><TD><<I>atom literal</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>atom literal</I>><CODE><SPAN class="keyword">#</SPAN></CODE><<I>phrase</I>></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>parser descriptor</I>></TD><TD align="center"> ::= </TD><TD><<I>prod clause</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>syntax rule</I>></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0" class="compact"><TR valign="top"><TD colspan="3"><<I>prod clause</I>> ::= </TD></TR><TR valign="top"><TD> </TD><TD></TD><TD><CODE>fProductionTemplate(</CODE><<I>prod key</I>><CODE> [</CODE><<I>prod param</I>><CODE>]</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"></TD><TD><CODE> [</CODE><<I>syntax rule</I>><CODE>] [</CODE><<I>syn expression</I>><CODE>]</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"></TD><TD><CODE> [</CODE><<I>prod ret</I>><CODE>])</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>prod param</I>></TD><TD align="center"> ::= </TD><TD><<I>variable</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>wildcard</I>></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>prod key</I>></TD><TD align="center"> ::= </TD><TD><CODE>none<SPAN class="keyword">#</SPAN></CODE><<I>string</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>atom</I>><CODE><SPAN class="keyword">#</SPAN></CODE><<I>string</I>></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>prod ret</I>></TD><TD align="center"> ::= </TD><TD><CODE>none</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>variable</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fDollar(</CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>syntax rule</I>></TD><TD align="center"> ::= </TD><TD><CODE>fSyntaxRule(</CODE><<I>grammar symbol</I>><CODE> [</CODE><<I>syn formal</I>><CODE>]</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"></TD><TD><CODE> </CODE><<I>syn expression</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0"><TR valign="top"><TD><<I>syn formal</I>></TD><TD align="center"> ::= </TD><TD><<I>variable</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><<I>wildcard</I>></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fDollar(</CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P><BLOCKQUOTE><TABLE border="0" cellpadding="0" cellspacing="0" class="compact"><TR valign="top"><TD colspan="3"><<I>syn expression</I>> ::= </TD></TR><TR valign="top"><TD> </TD><TD></TD><TD><CODE>fSynApplication(</CODE><<I>grammar symbol</I>><CODE> [</CODE><<I>phrase</I>><CODE>])</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fSynAction(</CODE><<I>phrase</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fSynSequence([</CODE><<I>variable</I>><CODE>] [</CODE><<I>syn expression</I>><CODE>])</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fSynAlternative([</CODE><<I>syn expression</I>><CODE>])</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fSynAssignment(</CODE><<I>escapable variable</I>><CODE> </CODE><<I>syn expression</I>><CODE>)</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"> | </TD><TD><CODE>fSynTemplateInstantiation(</CODE><<I>prod key</I>><CODE> [</CODE><<I>syn expression</I>><CODE>]</CODE></TD></TR><TR valign="top"><TD></TD><TD align="center"></TD><TD><CODE> </CODE><<I>coord</I>><CODE>)</CODE></TD></TR></TABLE></BLOCKQUOTE><P></P></DIV></DIV><TABLE align="center" border="0" cellpadding="6" cellspacing="6" class="nav"><TR bgcolor="#DDDDDD"><TD><A href="node6.html#appendix.narrator"><< Prev</A></TD><TD><A href="index.html">- Up -</A></TD><TD><A href="node8.html#appendix.bytecode">Next >></A></TD></TR></TABLE><HR><ADDRESS><A href="http://www.ps.uni-sb.de/~kornstae/">Leif Kornstaedt</A><BR><SPAN class="version">Version 1.4.0 (20110908185330)</SPAN></ADDRESS></BODY></HTML>
|