1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<!--Converted with LaTeX2HTML 98.1p1 release (March 2nd, 1998)
originally by Nikos Drakos (nikos@cbl.leeds.ac.uk), CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Generated Data Types</TITLE>
<META NAME="description" CONTENT="Generated Data Types">
<META NAME="keywords" CONTENT="tpman">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<LINK REL="STYLESHEET" HREF="tpman.css">
<LINK REL="next" HREF="node17.html">
<LINK REL="previous" HREF="node15.html">
<LINK REL="up" HREF="node15.html">
<LINK REL="next" HREF="node17.html">
</HEAD>
<BODY >
<!--Navigation Panel-->
<A NAME="tex2html323"
HREF="node17.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html319"
HREF="node15.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html313"
HREF="node15.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html321"
HREF="node4.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="/usr/share/latex2html/icons/contents.png"></A>
<A NAME="tex2html322"
HREF="node58.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index"
SRC="/usr/share/latex2html/icons/index.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html324"
HREF="node17.html">Generated Functions</A>
<B> Up:</B> <A NAME="tex2html320"
HREF="node15.html">Output</A>
<B> Previous:</B> <A NAME="tex2html314"
HREF="node15.html">Output</A>
<BR>
<BR>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION00071000000000000000"> </A>
<A NAME="gen-types"> </A>
<BR>
Generated Data Types
</H2>
For each phylum a C data type is generated.
Its name is the same as the phylum so it can be arbitrarily used in a C
program.
Technically, it is a structure containing the attributes, a variant
selector (cf. the operator) and a union of the alternatives.
Note that this scheme allows type checking over C programs to check if a
term is constructed from the correct phyla.
An additional data type is <I>YYSTYPE</I><A NAME="1347"> </A>,
which can be used in <I>yacc</I>-generated<A NAME="1348"> </A>
parsers to construct terms.
The generated C for the example in Section <A HREF="node7.html#input-terms">1.1</A> and
Section <A HREF="node8.html#attr-terms-input">1.2</A>
is given below.
Note, it is rarely necessary to directly refer to these C structures, as function definitions
are much more convenient.
<A NAME="433"> </A><A NAME="434"> </A>
<PRE><HR><!--lgrindfile: generated_data_type_example.k 14:54 Jul 22 1996-->
<B>typedef</B> <B>enum</B> { ..., sel_Neg = 4, sel_Minus = 5, sel_Plus = 6, sel_Zero = 7,
sel_Nilexprlist = 8, sel_Consexprlist = 9, ... } kc_enum_operators;
<BR>
<B>typedef</B> <B>struct</B> kc_tag_expr *expr; <I>/* note that a `expr' is a pointer to a `struct kc_tag_expr'*/</I>
<B>typedef</B> <B>struct</B> kc_tag_exprlist *exprlist;
<BR>
<B>struct</B> kc_tag_expr {
kc_enum_operators prod_sel;
<B>union</B> {
<B>struct</B> {
expr expr_1;
} Neg;
<B>struct</B> {
expr expr_1;
expr expr_2;
} Minus;
<B>struct</B> {
expr expr_1;
expr expr_2;
} Plus;
} u;
<B>float</B> value; <I>/* an attribute */</I>
};
<BR>
<B>struct</B> kc_tag_exprlist {
kc_enum_operators prod_sel;
<B>union</B> {
<B>struct</B> {
expr expr_1;
exprlist exprlist_1;
} Consexprlist;
} u;
};
<HR></PRE>
<P>
The term processor generates a C type definition <I>boolean</I><A NAME="1349"> </A>
with constants <I>True</I><A NAME="1350"> </A>
and <I>False</I><A NAME="1351"> </A>
that have the usual C interpretation (namely <I>int</I>, 1, and 0).
<P>
The names of all the rewrite and unparse views are collected in enumeration types <I>rview</I><A NAME="1352"> </A> respectively <I>uview</I><A NAME="1353"> </A>.
Whether or not the user has used it, these types contains a value
<I>base_riew</I><A NAME="1354"> </A> respectively
<I>base_uview</I><A NAME="1355"> </A>.
<P>
<HR>
<!--Navigation Panel-->
<A NAME="tex2html323"
HREF="node17.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next"
SRC="/usr/share/latex2html/icons/next.png"></A>
<A NAME="tex2html319"
HREF="node15.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up"
SRC="/usr/share/latex2html/icons/up.png"></A>
<A NAME="tex2html313"
HREF="node15.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous"
SRC="/usr/share/latex2html/icons/prev.png"></A>
<A NAME="tex2html321"
HREF="node4.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents"
SRC="/usr/share/latex2html/icons/contents.png"></A>
<A NAME="tex2html322"
HREF="node58.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index"
SRC="/usr/share/latex2html/icons/index.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html324"
HREF="node17.html">Generated Functions</A>
<B> Up:</B> <A NAME="tex2html320"
HREF="node15.html">Output</A>
<B> Previous:</B> <A NAME="tex2html314"
HREF="node15.html">Output</A>
<!--End of Navigation Panel-->
<ADDRESS>
<I></I>
<BR><I>2000-04-17</I>
</ADDRESS>
</BODY>
</HTML>
|