File: node16.html

package info (click to toggle)
kimwitu-doc 10a-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, sarge
  • size: 1,192 kB
  • ctags: 341
  • sloc: makefile: 166; yacc: 125; ansic: 40; lex: 18; sh: 2
file content (159 lines) | stat: -rw-r--r-- 5,919 bytes parent folder | download | duplicates (2)
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">&#160;</A>
<A NAME="gen-types">&#160;</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">&#160;</A>,
which can be used in <I>yacc</I>-generated<A NAME="1348">&#160;</A>
parsers to construct terms.
The generated C for the example in Section&nbsp;<A HREF="node7.html#input-terms">1.1</A> and
Section&nbsp;<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">&#160;</A><A NAME="434">&#160;</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">&#160;</A>
 with constants <I>True</I><A NAME="1350">&#160;</A>
and <I>False</I><A NAME="1351">&#160;</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">&#160;</A> respectively <I>uview</I><A NAME="1353">&#160;</A>.
Whether or not the user has used it, these types contains a value
<I>base_riew</I><A NAME="1354">&#160;</A> respectively
<I>base_uview</I><A NAME="1355">&#160;</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>