File: output_2.html

package info (click to toggle)
eli-doc 4.4.0-4
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 13,256 kB
  • ctags: 4,583
  • sloc: makefile: 42
file content (347 lines) | stat: -rw-r--r-- 17,303 bytes parent folder | download
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
<HTML>
<HEAD>
<!-- This HTML file has been created by texi2html 1.29
     from ../tnf/output.tnf on 12 Febuary 2003 -->

<TITLE>Tasks related to generating output - Commonly used Output patterns for PTG</TITLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF" LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000" BACKGROUND="gifs/bg.gif">
<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0" VALIGN=BOTTOM>
<TR VALIGN=BOTTOM>
<TD WIDTH="160" VALIGN=BOTTOM><IMG SRC="gifs/elilogo.gif" BORDER=0>&nbsp;</TD>
<TD WIDTH="25" VALIGN=BOTTOM><img src="gifs/empty.gif" WIDTH=25 HEIGHT=25></TD>
<TD ALIGN=LEFT WIDTH="600" VALIGN=BOTTOM><IMG SRC="gifs/title.gif"></TD>
</TR>
</TABLE>

<HR size=1 noshade width=785 align=left>
<TABLE BORDER=0 CELLSPACING=2 CELLPADDING=0>
<TR>
<TD VALIGN=TOP WIDTH="160">
<h4>General Information</h4>

<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="index.html">Eli: Translator Construction Made Easy</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="gindex_toc.html">Global Index</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="faq_toc.html" >Frequently Asked Questions</a> </td></tr>
</table>

<h4>Tutorials</h4>

<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="EliRefCard_toc.html">Quick Reference Card</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="novice_toc.html">Guide For new Eli Users</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="news_toc.html">Release Notes of Eli</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="nametutorial_toc.html">Tutorial on Name Analysis</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="typetutorial_toc.html">Tutorial on Type Analysis</a></td></tr>
</table>

<h4>Reference Manuals</h4>

<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="ui_toc.html">User Interface</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="pp_toc.html">Eli products and parameters</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="lidoref_toc.html">LIDO Reference Manual</a></td></tr>
</table>

<h4>Libraries</h4>

<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="lib_toc.html">Eli library routines</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="modlib_toc.html">Specification Module Library</a></td></tr>
</table>

<h4>Translation Tasks</h4>

<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="lex_toc.html">Lexical analysis specification</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="syntax_toc.html">Syntactic Analysis Manual</a></td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="comptrees_toc.html">Computation in Trees</a></td></tr>
</table>

<h4>Tools</h4>

<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="lcl_toc.html">LIGA Control Language</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="show_toc.html">Debugging Information for LIDO</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="gorto_toc.html">Graphical ORder TOol</a> </td></tr>
</table>
<p>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="fw_toc.html">FunnelWeb User's Manual</a> </td></tr>
</table>
<p>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="ptg_toc.html">Pattern-based Text Generator</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="deftbl_toc.html">Property Definition Language</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="oil_toc.html">Operator Identification Language</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="tp_toc.html">Tree Grammar Specification Language</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="clp_toc.html">Command Line Processing</a> </td></tr>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="cola_toc.html">COLA Options Reference Manual</a> </td></tr>
</table>
<p>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="idem_toc.html">Generating Unparsing Code</a> </td></tr>
</table>
<p>
<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="mon_toc.html">Monitoring a Processor's Execution</a> </td></tr>
</table>

<h4>Administration</h4>

<table BORDER=0 CELLSPACING=0 CELLPADDING=0>
<tr valign=top><td><img src="gifs/gelbekugel.gif" WIDTH=7 HEIGHT=7 ALT=" o"> </td><td><a href="sysadmin_toc.html">System Administration Guide</a> </td></tr>
</table>

<HR WIDTH="100%">
<CENTER>&nbsp;<A HREF="mailto:elibugs@cs.colorado.edu"><IMG SRC="gifs/button_mail.gif" NOSAVE BORDER=0 HEIGHT=32 WIDTH=32></A><A HREF="mailto:elibugs@cs.colorado.edu">Questions, Comments, ....</A></CENTER>

</TD>
<TD VALIGN=TOP WIDTH="25"><img src="gifs/empty.gif" WIDTH=25 HEIGHT=25></TD>

<TD VALIGN=TOP WIDTH="600">
<H1>Tasks related to generating output</H1>
<P>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT=""><A HREF="output_1.html"><IMG SRC="gifs/prev.gif" ALT="Previous Chapter" BORDER="0"></A>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT=""><A HREF="output_3.html"><IMG SRC="gifs/next.gif" ALT="Next Chapter" BORDER="0"></A>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT=""><A HREF="output_toc.html"><IMG SRC="gifs/up.gif" ALT="Table of Contents" BORDER="0"></A>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT="">
<HR size=1 noshade width=600 align=left>
<H1><A NAME="SEC2" HREF="output_toc.html#SEC2">Commonly used Output patterns for PTG</A></H1>
<P>
The module <CODE>PtgCommon</CODE> provides definitions for frequently used
PTG patterns.  These patterns fall into two categories:
The first one supports different types of output leaves; the
second contains frequently used patterns for building sequences.
<P>
The module does not have generic parameters.
It is used by including
<PRE>
   $/Output/PtgCommon.fw
</PRE>
in a <CODE>.specs</CODE> file.
<P>
The module introduces PTG specifications for patterns named <CODE>Id,
AsIs, CString, PString, CChar, Numb, Seq, CommaSeq</CODE>. When using
<CODE>PtgCommon.fw</CODE> these names must
not be specified in any other PTG specification.
<P>
The functions provided by this module 
may be used in <TT>`.lido'</TT> specifications or in
<TT>`.c'</TT> files. To introduce prototypes for the defined functions, use
the header file <CODE>PtgCommon.h</CODE>. 
<P>
<H4>Frequently Used Patterns</H4>
<A NAME="IDX6"></A>
<P>
The module <CODE>PtgCommon</CODE> provides useful and 
commonly used PTG patterns, especially for the output of
non-literal terminal symbols.
They are documented
both by showing their PTG pattern definitions and the signature of
the resulting pattern functions:
<P>
<A NAME="IDX7"></A>
<A NAME="IDX8"></A>
<DL COMPACT>
<DT><CODE>Pattern:            <CODE>Id: [PtgOutId $ int]</CODE></CODE>
<DD><DT><CODE>Resulting Function: <CODE>PTGNode PTGId(int id)</CODE></CODE>
<DD>The argument <CODE>id</CODE> must refer to an identifier or a string stored in
the character storage module of Eli, see  <A HREF="lib_1.html#SEC6">Character Storage Module of Library Reference Manual</A>. The PTG pattern produces the
same identifier or character string in the output.
<A NAME="IDX9"></A>
<A NAME="IDX10"></A>
<A NAME="IDX11"></A>
<P>
<DT><CODE>Pattern:            <CODE>AsIs: $ string</CODE></CODE>
<DD><DT><CODE>Resulting Function: <CODE>PTGNode PTGAsIs(char *string)</CODE></CODE>
<DD>The PTG pattern produces the specified argument <CODE>string</CODE> in the output.
The character string is not copied, only the pointer is.
<A NAME="IDX12"></A>
<A NAME="IDX13"></A>
<A NAME="IDX14"></A>
<P>
<DT><CODE>Pattern:            <CODE>Numb: $ int</CODE></CODE>
<DD><DT><CODE>Resulting Function: <CODE>PTGNode PTGNumb(int numb)</CODE></CODE>
<DD>The PTG pattern produces the given integral number.
<A NAME="IDX15"></A>
<A NAME="IDX16"></A>
<A NAME="IDX17"></A>
<A NAME="IDX18"></A>
<P>
<DT><CODE>Pattern:            <CODE>CString: [CPtgOutstr $ string]</CODE></CODE>
<DD><DT><CODE>Resulting Function: <CODE>PTGNode PTGCString(char *string)</CODE></CODE>
<DD><DT><CODE>and                 <CODE>PTGNode PTGCStringId(int id)</CODE></CODE>
<DD>The argument is a string.
The PTG pattern function produces the same character string 
quoted according to the rules of the C language.
<CODE>PTGCStringId</CODE> is macro based on <CODE>PTGCString</CODE>.
It takes an index into the character storage module of
Eli, see 
 <A HREF="lib_1.html#SEC6">Character Storage Module of Library Reference Manual</A>.
It produces the string stored there 
quoted according to the rules of the C language..
<P>
<A NAME="IDX19"></A>
<A NAME="IDX20"></A>
<A NAME="IDX21"></A>
<A NAME="IDX22"></A>
<P>
<DT><CODE>Pattern:            <CODE>PString: [PPtgOutstr $ string]</CODE></CODE>
<DD><DT><CODE>Resulting Function: <CODE>PTGNode PTGPString(char *string)</CODE></CODE>
<DD><DT><CODE>and                 <CODE>PTGNode PTGPStringId(int id)</CODE></CODE>
<DD>The argument is a string.
The PTG pattern function produces the same character string 
quoted according to the rules of the Pascal language.
<CODE>PTGPStringId</CODE> is macro based on <CODE>PTGPString</CODE>.
It takes an index into the character storage module of
Eli, see  <A HREF="lib_1.html#SEC6">Character Storage Module of Library Reference Manual</A>. It produces the string stored there 
quoted according to the rules of the Pascal language..
<A NAME="IDX23"></A>
<A NAME="IDX24"></A>
<A NAME="IDX25"></A>
<P>
<DT><CODE>Pattern:            <CODE>CChar: [CPtgOutchar $ int]</CODE></CODE>
<DD><DT><CODE>Resulting Function: <CODE>PTGNode PTGCChar(int c)</CODE></CODE>
<DD>The PTG pattern produces the specified value as C character literal.
<A NAME="IDX26"></A>
<A NAME="IDX27"></A>
<P>
<DT><CODE>Pattern:            <CODE>Seq: $ $</CODE></CODE>
<DD><DT><CODE>Resulting Function: <CODE>PTGNode PTGPSeq(PTGNode, PTGNode)</CODE></CODE>
<DD>Takes two arguments and yields a new node that prints the concatenation
of the given patterns.
<A NAME="IDX28"></A>
<A NAME="IDX29"></A>
<P>
<DT><CODE>Pattern:            <CODE>CommaSeq: $ { ", " } $</CODE></CODE>
<DD><DT><CODE>Resulting Function: <CODE>PTGNode PTGPCommaSeq(PTGNode, PTGNode)</CODE></CODE>
<DD>Takes two arguments and yields their concatenation
separated by a comma. By enclosing the separator
with braces, it is assured that a comma will be printed, only if none of the
arguments refers to the predefined value <CODE>PTGNULL</CODE> that
yields an empty output. This makes the pattern well suited to be used
in conjunction with the <CODE>CONSTITUENTS</CODE> construct. 
See  <A HREF="ptg_2.html#SEC6">Optional Parts in Patterns of Pattern-based text generator</A>, for details.
<A NAME="IDX30"></A>
<A NAME="IDX31"></A>
<P>
<DT><CODE>Pattern:            <CODE>Eol: $ "\n"</CODE></CODE>
<DD><DT><CODE>Resulting Function: <CODE>PTGNode PTGEol(PTGNode)</CODE></CODE>
<DD>This pattern attaches a newline at the end of the given text. 
Note that the 
PTG output functions do not automatically put a newline at the end of the output.
</DL>
<P>
<H4>Useful Embedded Functions</H4>
<P>
The functions embedded in the PTG patterns defined in
<CODE>PTGCommon.fw</CODE> (See  <A HREF="output_2.html#SEC2">Commonly used Output patterns for PTG</A>) might also be useful
in user defined patterns. These functions are:
<P>
<A NAME="IDX32"></A>
<DL COMPACT>
<DT><CODE><CODE>void PtgOutId (PTG_OUTPUT_FILE fs, int c);</CODE></CODE>
<DD>takes an index into the character storage module of
Eli, see  <A HREF="lib_1.html#SEC6">Character Storage Module of Library Reference Manual</A>. It outputs the string stored there.
<A NAME="IDX33"></A>
<P>
<DT><CODE><CODE>void (PTG_OUTPUT_FILE fs, char *s);</CODE></CODE>
<DD>takes a string argument and outputs the same string quoted according
to the rules of the C language.
<A NAME="IDX34"></A>
<P>
<DT><CODE><CODE>void (PTG_OUTPUT_FILE fs, int c);</CODE></CODE>
<DD>takes an integer character code and outputs the character.
<A NAME="IDX35"></A>
<P>
<DT><CODE><CODE>void (PTG_OUTPUT_FILE fs, int c);</CODE></CODE>
<DD>takes a string argument and outputs the same string quoted according
to the rules of the Pascal language.
<P>
</DL>
<P>
<H4>Examples</H4>
<P>
The first example will use a PTG pattern that prints an identifier or a
floating point number. This is done by defining the symbol role
<CODE>PtgLeaf</CODE> that computes a <CODE>ptg</CODE> attribute. It generates the
source text of the identifier when processed through a ptg processing
function. This role can be inherited by a tree symbol that appears
directly above a terminal, that was processed through the <CODE>mkidn</CODE>
gla processor.
<P>
<PRE>
   CLASS SYMBOL PtgLeaf: ptg: PTGNode;
 
   CLASS SYMBOL PtgLeaf COMPUTE
      THIS.ptg = PTGId(TERM);
   END;
</PRE>
<P>
In this example, the class symbol <CODE>PtgLeaf</CODE> can be used
later to denote all the different grammar symbols that compute ptg leaf
patterns. This is done for example in the second example, that computes
a PTG pattern that prints all occurrences of <CODE>PtgLeaf</CODE> in a comma 
separated list.
<P>
<PRE>
   CLASS SYMBOL LeafCommaList: ptg: PTGNode;
   CLASS SYMBOL LeafCommaList COMPUTE
      THIS.ptg = 
        CONSTITUENTS PtgLeaf.ptg 
        WITH (PTGNode, PTGCommaSeq, IDENTICAL, PTGNull);
   END;
</PRE>
<P>
Please refer to  <A HREF="lidoref_4.html#SEC5">Symbol Specifications of Lido Reference Manual</A>, for an explanation of symbol computations,
see  <A HREF="lidoref_9.html#SEC16">CONSTITUENT(S) of Lido Reference Manual</A>,
for an explanation of the <CODE>CONSTITUENT(S)</CODE>-construct and
read  <A HREF="lidoref_12.html#SEC21">Predefined Entities of Lido Reference Manual</A>, for an explanation of the predefined <CODE>IDENTICAL</CODE>-function. 
<A NAME="IDX36"></A>
<P>
<H4>Special Situation when Using C String Literals</H4>
<P>
A special situation occurs, if C string literals are input tokens and 
are to be reproduced identically. 
Two different token processors can be used to store the string:
If the <CODE>c_mkstr</CODE> processor is specified in a <TT>`.gla'</TT> file,
<PRE>
   CStringLit: $\" (auxCString) [c_mkstr]
</PRE>
the string is interpreted and the result is stored.
Such a string can be processed with the
pattern functions <CODE>PTGCStringId()</CODE> and <CODE>PTGPStringId()</CODE> 
to yield C or Pascal string literals on output.
However, as strings are null terminated in Eli, the first occurrence of
an embedded zero-character terminates the string, and the result is
truncated. A solution for this would be to not interpret the control
sequences and to store the string verbatim as it is provided on input. 
That is achieved by the token processor <CODE>mkstr</CODE>:
<PRE>
   CStringLit: $\" (auxCString) [mkstr]
</PRE>
<A NAME="IDX37"></A>
As control sequences are not interpreted by <CODE>mkstr</CODE>,
<CODE>PTGPString</CODE> and <CODE>PTGCString</CODE> can not be used to
produce an identical output string. Instead, the pattern function
<CODE>PTGAsIs</CODE> is to be used. Since the latter token processor can handle
embedded zero characters, it is used in the 
canned description <CODE>C_STRING_LIT</CODE> for C string literals.
See  <A HREF="lex_2.html#SEC13">Canned Descriptions of Lexical Analysis</A>.
<A NAME="IDX38"></A>
<A NAME="IDX39"></A>
<P>
<HR size=1 noshade width=600 align=left>
<P>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT=""><A HREF="output_1.html"><IMG SRC="gifs/prev.gif" ALT="Previous Chapter" BORDER="0"></A>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT=""><A HREF="output_3.html"><IMG SRC="gifs/next.gif" ALT="Next Chapter" BORDER="0"></A>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT=""><A HREF="output_toc.html"><IMG SRC="gifs/up.gif" ALT="Table of Contents" BORDER="0"></A>
<IMG SRC="gifs/empty.gif" WIDTH=25 HEIGHT=25 ALT="">
<HR size=1 noshade width=600 align=left>
</TD>
</TR>
</TABLE>

</BODY></HTML>