1 |
12 |
jlechner |
\input texinfo @c -*-texinfo-*-
|
2 |
|
|
|
3 |
|
|
@c NOTE THIS IS NOT A GOOD EXAMPLE OF HOW TO DO A MANUAL. FIXME!!!
|
4 |
|
|
@c NOTE THIS IS NOT A GOOD EXAMPLE OF HOW TO DO A MANUAL. FIXME!!!
|
5 |
|
|
|
6 |
|
|
|
7 |
|
|
@c %**start of header
|
8 |
|
|
@setfilename treelang.info
|
9 |
|
|
|
10 |
|
|
@include gcc-common.texi
|
11 |
|
|
|
12 |
|
|
@set copyrights-treelang 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005
|
13 |
|
|
|
14 |
|
|
@set email-general gcc@@gcc.gnu.org
|
15 |
|
|
@set email-bugs gcc-bugs@@gcc.gnu.org or bug-gcc@@gnu.org
|
16 |
|
|
@set email-patches gcc-patches@@gcc.gnu.org
|
17 |
|
|
@set path-treelang gcc/gcc/treelang
|
18 |
|
|
|
19 |
|
|
@set which-treelang GCC-@value{version-GCC}
|
20 |
|
|
@set which-GCC GCC
|
21 |
|
|
|
22 |
|
|
@set email-josling tej@@melbpc.org.au
|
23 |
|
|
@set www-josling http://www.geocities.com/timjosling
|
24 |
|
|
|
25 |
|
|
@c This tells @include'd files that they're part of the overall TREELANG doc
|
26 |
|
|
@c set. (They might be part of a higher-level doc set too.)
|
27 |
|
|
@set DOC-TREELANG
|
28 |
|
|
|
29 |
|
|
@c @setfilename usetreelang.info
|
30 |
|
|
@c @setfilename maintaintreelang.info
|
31 |
|
|
@c To produce the full manual, use the "treelang.info" setfilename, and
|
32 |
|
|
@c make sure the following do NOT begin with '@c' (and the @clear lines DO)
|
33 |
|
|
@set INTERNALS
|
34 |
|
|
@set USING
|
35 |
|
|
@c To produce a user-only manual, use the "usetreelang.info" setfilename, and
|
36 |
|
|
@c make sure the following does NOT begin with '@c':
|
37 |
|
|
@c @clear INTERNALS
|
38 |
|
|
@c To produce a maintainer-only manual, use the "maintaintreelang.info" setfilename,
|
39 |
|
|
@c and make sure the following does NOT begin with '@c':
|
40 |
|
|
@c @clear USING
|
41 |
|
|
|
42 |
|
|
@ifset INTERNALS
|
43 |
|
|
@ifset USING
|
44 |
|
|
@settitle Using and Maintaining GNU Treelang
|
45 |
|
|
@end ifset
|
46 |
|
|
@end ifset
|
47 |
|
|
@c seems reasonable to assume at least one of INTERNALS or USING is set...
|
48 |
|
|
@ifclear INTERNALS
|
49 |
|
|
@settitle Using GNU Treelang
|
50 |
|
|
@end ifclear
|
51 |
|
|
@ifclear USING
|
52 |
|
|
@settitle Maintaining GNU Treelang
|
53 |
|
|
@end ifclear
|
54 |
|
|
@c then again, have some fun
|
55 |
|
|
@ifclear INTERNALS
|
56 |
|
|
@ifclear USING
|
57 |
|
|
@settitle Doing Very Little at all with GNU Treelang
|
58 |
|
|
@end ifclear
|
59 |
|
|
@end ifclear
|
60 |
|
|
|
61 |
|
|
@syncodeindex fn cp
|
62 |
|
|
@syncodeindex vr cp
|
63 |
|
|
@c %**end of header
|
64 |
|
|
|
65 |
|
|
@c Cause even numbered pages to be printed on the left hand side of
|
66 |
|
|
@c the page and odd numbered pages to be printed on the right hand
|
67 |
|
|
@c side of the page. Using this, you can print on both sides of a
|
68 |
|
|
@c sheet of paper and have the text on the same part of the sheet.
|
69 |
|
|
|
70 |
|
|
@c The text on right hand pages is pushed towards the right hand
|
71 |
|
|
@c margin and the text on left hand pages is pushed toward the left
|
72 |
|
|
@c hand margin.
|
73 |
|
|
@c (To provide the reverse effect, set bindingoffset to -0.75in.)
|
74 |
|
|
|
75 |
|
|
@c @tex
|
76 |
|
|
@c \global\bindingoffset=0.75in
|
77 |
|
|
@c \global\normaloffset =0.75in
|
78 |
|
|
@c @end tex
|
79 |
|
|
|
80 |
|
|
@copying
|
81 |
|
|
Copyright @copyright{} @value{copyrights-treelang} Free Software Foundation, Inc.
|
82 |
|
|
|
83 |
|
|
Permission is granted to copy, distribute and/or modify this document
|
84 |
|
|
under the terms of the GNU Free Documentation License, Version 1.2 or
|
85 |
|
|
any later version published by the Free Software Foundation; with the
|
86 |
|
|
Invariant Sections being ``GNU General Public License'', the Front-Cover
|
87 |
|
|
texts being (a) (see below), and with the Back-Cover Texts being (b)
|
88 |
|
|
(see below). A copy of the license is included in the section entitled
|
89 |
|
|
``GNU Free Documentation License''.
|
90 |
|
|
|
91 |
|
|
(a) The FSF's Front-Cover Text is:
|
92 |
|
|
|
93 |
|
|
A GNU Manual
|
94 |
|
|
|
95 |
|
|
(b) The FSF's Back-Cover Text is:
|
96 |
|
|
|
97 |
|
|
You have freedom to copy and modify this GNU Manual, like GNU
|
98 |
|
|
software. Copies published by the Free Software Foundation raise
|
99 |
|
|
funds for GNU development.
|
100 |
|
|
@end copying
|
101 |
|
|
|
102 |
|
|
@ifnottex
|
103 |
|
|
@dircategory Programming
|
104 |
|
|
@direntry
|
105 |
|
|
* treelang: (treelang). The GNU Treelang compiler.
|
106 |
|
|
@end direntry
|
107 |
|
|
@ifset INTERNALS
|
108 |
|
|
@ifset USING
|
109 |
|
|
This file documents the use and the internals of the GNU Treelang
|
110 |
|
|
(@code{treelang}) compiler. At the moment this manual is not
|
111 |
|
|
incorporated into the main GCC manual as it is incomplete. It
|
112 |
|
|
corresponds to the @value{which-treelang} version of @code{treelang}.
|
113 |
|
|
@end ifset
|
114 |
|
|
@end ifset
|
115 |
|
|
@ifclear USING
|
116 |
|
|
This file documents the internals of the GNU Treelang (@code{treelang}) compiler.
|
117 |
|
|
It corresponds to the @value{which-treelang} version of @code{treelang}.
|
118 |
|
|
@end ifclear
|
119 |
|
|
@ifclear INTERNALS
|
120 |
|
|
This file documents the use of the GNU Treelang (@code{treelang}) compiler.
|
121 |
|
|
It corresponds to the @value{which-treelang} version of @code{treelang}.
|
122 |
|
|
@end ifclear
|
123 |
|
|
|
124 |
|
|
Published by the Free Software Foundation
|
125 |
|
|
51 Franklin Street, Fifth Floor
|
126 |
|
|
Boston, MA 02110-1301 USA
|
127 |
|
|
|
128 |
|
|
@insertcopying
|
129 |
|
|
@end ifnottex
|
130 |
|
|
|
131 |
|
|
@setchapternewpage odd
|
132 |
|
|
@c @finalout
|
133 |
|
|
@titlepage
|
134 |
|
|
@ifset INTERNALS
|
135 |
|
|
@ifset USING
|
136 |
|
|
@center @titlefont{Using and Maintaining GNU Treelang}
|
137 |
|
|
|
138 |
|
|
@end ifset
|
139 |
|
|
@end ifset
|
140 |
|
|
@ifclear INTERNALS
|
141 |
|
|
@title Using GNU Treelang
|
142 |
|
|
@end ifclear
|
143 |
|
|
@ifclear USING
|
144 |
|
|
@title Maintaining GNU Treelang
|
145 |
|
|
@end ifclear
|
146 |
|
|
@sp 2
|
147 |
|
|
@center Tim Josling
|
148 |
|
|
@page
|
149 |
|
|
@vskip 0pt plus 1filll
|
150 |
|
|
For the @value{which-treelang} Version*
|
151 |
|
|
@sp 1
|
152 |
|
|
Published by the Free Software Foundation @*
|
153 |
|
|
51 Franklin Street, Fifth Floor@*
|
154 |
|
|
Boston, MA 02110-1301, USA@*
|
155 |
|
|
@c Last printed ??ber, 19??.@*
|
156 |
|
|
@c Printed copies are available for $? each.@*
|
157 |
|
|
@c ISBN ???
|
158 |
|
|
@sp 1
|
159 |
|
|
@insertcopying
|
160 |
|
|
@end titlepage
|
161 |
|
|
@page
|
162 |
|
|
|
163 |
|
|
@ifnottex
|
164 |
|
|
|
165 |
|
|
@node Top, Copying,, (dir)
|
166 |
|
|
@top Introduction
|
167 |
|
|
@cindex Introduction
|
168 |
|
|
|
169 |
|
|
@ifset INTERNALS
|
170 |
|
|
@ifset USING
|
171 |
|
|
This manual documents how to run, install and maintain @code{treelang}.
|
172 |
|
|
It also documents the features and incompatibilities in the @value{which-treelang}
|
173 |
|
|
version of @code{treelang}.
|
174 |
|
|
@end ifset
|
175 |
|
|
@end ifset
|
176 |
|
|
|
177 |
|
|
@ifclear INTERNALS
|
178 |
|
|
This manual documents how to run and install @code{treelang}.
|
179 |
|
|
It also documents the features and incompatibilities in the @value{which-treelang}
|
180 |
|
|
version of @code{treelang}.
|
181 |
|
|
@end ifclear
|
182 |
|
|
@ifclear USING
|
183 |
|
|
This manual documents how to maintain @code{treelang}.
|
184 |
|
|
It also documents the features and incompatibilities in the @value{which-treelang}
|
185 |
|
|
version of @code{treelang}.
|
186 |
|
|
@end ifclear
|
187 |
|
|
|
188 |
|
|
@end ifnottex
|
189 |
|
|
|
190 |
|
|
@menu
|
191 |
|
|
* Copying::
|
192 |
|
|
* Contributors::
|
193 |
|
|
* GNU Free Documentation License::
|
194 |
|
|
* Funding::
|
195 |
|
|
* Getting Started::
|
196 |
|
|
* What is GNU Treelang?::
|
197 |
|
|
* Lexical Syntax::
|
198 |
|
|
* Parsing Syntax::
|
199 |
|
|
* Compiler Overview::
|
200 |
|
|
* TREELANG and GCC::
|
201 |
|
|
* Compiler::
|
202 |
|
|
* Other Languages::
|
203 |
|
|
* treelang internals::
|
204 |
|
|
* Open Questions::
|
205 |
|
|
* Bugs::
|
206 |
|
|
* Service::
|
207 |
|
|
* Projects::
|
208 |
|
|
* Index::
|
209 |
|
|
|
210 |
|
|
@detailmenu
|
211 |
|
|
--- The Detailed Node Listing ---
|
212 |
|
|
|
213 |
|
|
Other Languages
|
214 |
|
|
|
215 |
|
|
* Interoperating with C and C++::
|
216 |
|
|
|
217 |
|
|
treelang internals
|
218 |
|
|
|
219 |
|
|
* treelang files::
|
220 |
|
|
* treelang compiler interfaces::
|
221 |
|
|
* Hints and tips::
|
222 |
|
|
|
223 |
|
|
treelang compiler interfaces
|
224 |
|
|
|
225 |
|
|
* treelang driver::
|
226 |
|
|
* treelang main compiler::
|
227 |
|
|
|
228 |
|
|
treelang main compiler
|
229 |
|
|
|
230 |
|
|
* Interfacing to toplev.c::
|
231 |
|
|
* Interfacing to the garbage collection::
|
232 |
|
|
* Interfacing to the code generation code. ::
|
233 |
|
|
|
234 |
|
|
Reporting Bugs
|
235 |
|
|
|
236 |
|
|
* Sending Patches::
|
237 |
|
|
|
238 |
|
|
@end detailmenu
|
239 |
|
|
@end menu
|
240 |
|
|
|
241 |
|
|
@include gpl.texi
|
242 |
|
|
|
243 |
|
|
@include fdl.texi
|
244 |
|
|
|
245 |
|
|
@node Contributors
|
246 |
|
|
|
247 |
|
|
@unnumbered Contributors to GNU Treelang
|
248 |
|
|
@cindex contributors
|
249 |
|
|
@cindex credits
|
250 |
|
|
|
251 |
|
|
Treelang was based on 'toy' by Richard Kenner, and also uses code from
|
252 |
|
|
the GCC core code tree. Tim Josling first created the language and
|
253 |
|
|
documentation, based on the GCC Fortran compiler's documentation
|
254 |
|
|
framework. Treelang was updated to use the TreeSSA infrastructure by
|
255 |
|
|
James A. Morrison.
|
256 |
|
|
|
257 |
|
|
@itemize @bullet
|
258 |
|
|
@item
|
259 |
|
|
The packaging and compiler portions of GNU Treelang are based largely
|
260 |
|
|
on the GCC compiler.
|
261 |
|
|
@xref{Contributors,,Contributors to GCC,GCC,Using and Maintaining GCC},
|
262 |
|
|
for more information.
|
263 |
|
|
|
264 |
|
|
@item
|
265 |
|
|
There is no specific run-time library for treelang, other than the
|
266 |
|
|
standard C runtime.
|
267 |
|
|
|
268 |
|
|
@item
|
269 |
|
|
It would have been difficult to build treelang without access to Joachim
|
270 |
|
|
Nadler's guide to writing a front end to GCC (written in German). A
|
271 |
|
|
translation of this document into English is available via the
|
272 |
|
|
CobolForGCC project or via the documentation links from the GCC home
|
273 |
|
|
page @uref{http://gcc.gnu.org}.
|
274 |
|
|
@end itemize
|
275 |
|
|
|
276 |
|
|
@include funding.texi
|
277 |
|
|
|
278 |
|
|
@node Getting Started
|
279 |
|
|
@chapter Getting Started
|
280 |
|
|
@cindex getting started
|
281 |
|
|
@cindex new users
|
282 |
|
|
@cindex newbies
|
283 |
|
|
@cindex beginners
|
284 |
|
|
|
285 |
|
|
Treelang is a sample language, useful only to help people understand how
|
286 |
|
|
to implement a new language front end to GCC. It is not a useful
|
287 |
|
|
language in itself other than as an example or basis for building a new
|
288 |
|
|
language. Therefore only language developers are likely to have an
|
289 |
|
|
interest in it.
|
290 |
|
|
|
291 |
|
|
This manual assumes familiarity with GCC, which you can obtain by using
|
292 |
|
|
it and by reading the manuals @samp{Using the GNU Compiler Collection (GCC)}
|
293 |
|
|
and @samp{GNU Compiler Collection (GCC) Internals}.
|
294 |
|
|
|
295 |
|
|
To install treelang, follow the GCC installation instructions,
|
296 |
|
|
taking care to ensure you specify treelang in the configure step by adding
|
297 |
|
|
treelang to the list of languages specified by @option{--enable-languages},
|
298 |
|
|
e.g.@: @samp{--enable-languages=all,treelang}.
|
299 |
|
|
|
300 |
|
|
If you're generally curious about the future of
|
301 |
|
|
@code{treelang}, see @ref{Projects}.
|
302 |
|
|
If you're curious about its past,
|
303 |
|
|
see @ref{Contributors}.
|
304 |
|
|
|
305 |
|
|
To see a few of the questions maintainers of @code{treelang} have,
|
306 |
|
|
and that you might be able to answer,
|
307 |
|
|
see @ref{Open Questions}.
|
308 |
|
|
|
309 |
|
|
@ifset USING
|
310 |
|
|
@node What is GNU Treelang?, Lexical Syntax, Getting Started, Top
|
311 |
|
|
@chapter What is GNU Treelang?
|
312 |
|
|
@cindex concepts, basic
|
313 |
|
|
@cindex basic concepts
|
314 |
|
|
|
315 |
|
|
GNU Treelang, or @code{treelang}, is designed initially as a free
|
316 |
|
|
replacement for, or alternative to, the 'toy' language, but which is
|
317 |
|
|
amenable to inclusion within the GCC source tree.
|
318 |
|
|
|
319 |
|
|
@code{treelang} is largely a cut down version of C, designed to showcase
|
320 |
|
|
the features of the GCC code generation back end. Only those features
|
321 |
|
|
that are directly supported by the GCC code generation back end are
|
322 |
|
|
implemented. Features are implemented in a manner which is easiest and
|
323 |
|
|
clearest to implement. Not all or even most code generation back end
|
324 |
|
|
features are implemented. The intention is to add features incrementally
|
325 |
|
|
until most features of the GCC back end are implemented in treelang.
|
326 |
|
|
|
327 |
|
|
The main features missing are structures, arrays and pointers.
|
328 |
|
|
|
329 |
|
|
A sample program follows:
|
330 |
|
|
|
331 |
|
|
@smallexample
|
332 |
|
|
// @r{function prototypes}
|
333 |
|
|
// @r{function 'add' taking two ints and returning an int}
|
334 |
|
|
external_definition int add(int arg1, int arg2);
|
335 |
|
|
external_definition int subtract(int arg3, int arg4);
|
336 |
|
|
external_definition int first_nonzero(int arg5, int arg6);
|
337 |
|
|
external_definition int double_plus_one(int arg7);
|
338 |
|
|
|
339 |
|
|
// @r{function definition}
|
340 |
|
|
add
|
341 |
|
|
@{
|
342 |
|
|
// @r{return the sum of arg1 and arg2}
|
343 |
|
|
return arg1 + arg2;
|
344 |
|
|
@}
|
345 |
|
|
|
346 |
|
|
|
347 |
|
|
subtract
|
348 |
|
|
@{
|
349 |
|
|
return arg3 - arg4;
|
350 |
|
|
@}
|
351 |
|
|
|
352 |
|
|
double_plus_one
|
353 |
|
|
@{
|
354 |
|
|
// @r{aaa is a variable, of type integer and allocated at the start of}
|
355 |
|
|
// @r{the function}
|
356 |
|
|
automatic int aaa;
|
357 |
|
|
// @r{set aaa to the value returned from add, when passed arg7 and arg7 as}
|
358 |
|
|
// @r{the two parameters}
|
359 |
|
|
aaa=add(arg7, arg7);
|
360 |
|
|
aaa=add(aaa, aaa);
|
361 |
|
|
aaa=subtract(subtract(aaa, arg7), arg7) + 1;
|
362 |
|
|
return aaa;
|
363 |
|
|
@}
|
364 |
|
|
|
365 |
|
|
first_nonzero
|
366 |
|
|
@{
|
367 |
|
|
// @r{C-like if statement}
|
368 |
|
|
if (arg5)
|
369 |
|
|
@{
|
370 |
|
|
return arg5;
|
371 |
|
|
@}
|
372 |
|
|
else
|
373 |
|
|
@{
|
374 |
|
|
@}
|
375 |
|
|
return arg6;
|
376 |
|
|
@}
|
377 |
|
|
@end smallexample
|
378 |
|
|
|
379 |
|
|
@node Lexical Syntax, Parsing Syntax, What is GNU Treelang?, Top
|
380 |
|
|
@chapter Lexical Syntax
|
381 |
|
|
@cindex Lexical Syntax
|
382 |
|
|
|
383 |
|
|
Treelang programs consist of whitespace, comments, keywords and names.
|
384 |
|
|
@itemize @bullet
|
385 |
|
|
|
386 |
|
|
@item
|
387 |
|
|
Whitespace consists of the space character, a tab, and the end of line
|
388 |
|
|
character. Line terminations are as defined by the
|
389 |
|
|
standard C library. Whitespace is ignored except within comments,
|
390 |
|
|
and where it separates parts of the program. In the example below, A and
|
391 |
|
|
B are two separate names separated by whitespace.
|
392 |
|
|
|
393 |
|
|
@smallexample
|
394 |
|
|
A B
|
395 |
|
|
@end smallexample
|
396 |
|
|
|
397 |
|
|
@item
|
398 |
|
|
Comments consist of @samp{//} followed by any characters up to the end
|
399 |
|
|
of the line. C style comments (/* */) are not supported. For example,
|
400 |
|
|
the assignment below is followed by a not very helpful comment.
|
401 |
|
|
|
402 |
|
|
@smallexample
|
403 |
|
|
x = 1; // @r{Set X to 1}
|
404 |
|
|
@end smallexample
|
405 |
|
|
|
406 |
|
|
@item
|
407 |
|
|
Keywords consist of any of the following reserved words or symbols:
|
408 |
|
|
|
409 |
|
|
@itemize @bullet
|
410 |
|
|
@item @{
|
411 |
|
|
used to start the statements in a function
|
412 |
|
|
@item @}
|
413 |
|
|
used to end the statements in a function
|
414 |
|
|
@item (
|
415 |
|
|
start list of function arguments, or to change the precedence of operators in
|
416 |
|
|
an expression
|
417 |
|
|
@item )
|
418 |
|
|
end list or prioritized operators in expression
|
419 |
|
|
@item ,
|
420 |
|
|
used to separate parameters in a function prototype or in a function call
|
421 |
|
|
@item ;
|
422 |
|
|
used to end a statement
|
423 |
|
|
@item +
|
424 |
|
|
addition, or unary plus for signed literals
|
425 |
|
|
@item -
|
426 |
|
|
subtraction, or unary minus for signed literals
|
427 |
|
|
@item =
|
428 |
|
|
assignment
|
429 |
|
|
@item ==
|
430 |
|
|
equality test
|
431 |
|
|
@item if
|
432 |
|
|
begin IF statement
|
433 |
|
|
@item else
|
434 |
|
|
begin 'else' portion of IF statement
|
435 |
|
|
@item static
|
436 |
|
|
indicate variable is permanent, or function has file scope only
|
437 |
|
|
@item automatic
|
438 |
|
|
indicate that variable is allocated for the life of the current scope
|
439 |
|
|
@item external_reference
|
440 |
|
|
indicate that variable or function is defined in another file
|
441 |
|
|
@item external_definition
|
442 |
|
|
indicate that variable or function is to be accessible from other files
|
443 |
|
|
@item int
|
444 |
|
|
variable is an integer (same as C int)
|
445 |
|
|
@item char
|
446 |
|
|
variable is a character (same as C char)
|
447 |
|
|
@item unsigned
|
448 |
|
|
variable is unsigned. If this is not present, the variable is signed
|
449 |
|
|
@item return
|
450 |
|
|
start function return statement
|
451 |
|
|
@item void
|
452 |
|
|
used as function type to indicate function returns nothing
|
453 |
|
|
@end itemize
|
454 |
|
|
|
455 |
|
|
|
456 |
|
|
@item
|
457 |
|
|
Names consist of any letter or "_" followed by any number of letters,
|
458 |
|
|
numbers, or "_". "$" is not allowed in a name. All names must be globally
|
459 |
|
|
unique, i.e. may not be used twice in any context, and must
|
460 |
|
|
not be a keyword. Names and keywords are case sensitive. For example:
|
461 |
|
|
|
462 |
|
|
@smallexample
|
463 |
|
|
a A _a a_ IF_X
|
464 |
|
|
@end smallexample
|
465 |
|
|
|
466 |
|
|
are all different names.
|
467 |
|
|
|
468 |
|
|
@end itemize
|
469 |
|
|
|
470 |
|
|
@node Parsing Syntax, Compiler Overview, Lexical Syntax, Top
|
471 |
|
|
@chapter Parsing Syntax
|
472 |
|
|
@cindex Parsing Syntax
|
473 |
|
|
|
474 |
|
|
Declarations are built up from the lexical elements described above. A
|
475 |
|
|
file may contain one of more declarations.
|
476 |
|
|
|
477 |
|
|
@itemize @bullet
|
478 |
|
|
|
479 |
|
|
@item
|
480 |
|
|
declaration: variable declaration OR function prototype OR function declaration
|
481 |
|
|
|
482 |
|
|
@item
|
483 |
|
|
Function Prototype: storage type NAME ( optional_parameter_list )
|
484 |
|
|
|
485 |
|
|
@smallexample
|
486 |
|
|
static int add (int a, int b)
|
487 |
|
|
@end smallexample
|
488 |
|
|
|
489 |
|
|
@item
|
490 |
|
|
variable_declaration: storage type NAME initial;
|
491 |
|
|
|
492 |
|
|
Example:
|
493 |
|
|
|
494 |
|
|
@smallexample
|
495 |
|
|
int temp1 = 1;
|
496 |
|
|
@end smallexample
|
497 |
|
|
|
498 |
|
|
A variable declaration can be outside a function, or at the start of a
|
499 |
|
|
function.
|
500 |
|
|
|
501 |
|
|
@item
|
502 |
|
|
storage: automatic OR static OR external_reference OR external_definition
|
503 |
|
|
|
504 |
|
|
This defines the scope, duration and visibility of a function or variable
|
505 |
|
|
|
506 |
|
|
@enumerate 1
|
507 |
|
|
|
508 |
|
|
@item
|
509 |
|
|
automatic: This means a variable is allocated at start of the current scope and
|
510 |
|
|
released when the current scope is exited. This can only be used for variables
|
511 |
|
|
within functions. It cannot be used for functions.
|
512 |
|
|
|
513 |
|
|
@item
|
514 |
|
|
static: This means a variable is allocated at start of program and
|
515 |
|
|
remains allocated until the program as a whole ends. For a function, it
|
516 |
|
|
means that the function is only visible within the current file.
|
517 |
|
|
|
518 |
|
|
@item
|
519 |
|
|
external_definition: For a variable, which must be defined outside a
|
520 |
|
|
function, it means that the variable is visible from other files. For a
|
521 |
|
|
function, it means that the function is visible from another file.
|
522 |
|
|
|
523 |
|
|
@item
|
524 |
|
|
external_reference: For a variable, which must be defined outside a
|
525 |
|
|
function, it means that the variable is defined in another file. For a
|
526 |
|
|
function, it means that the function is defined in another file.
|
527 |
|
|
|
528 |
|
|
@end enumerate
|
529 |
|
|
|
530 |
|
|
@item
|
531 |
|
|
type: int OR unsigned int OR char OR unsigned char OR void
|
532 |
|
|
|
533 |
|
|
This defines the data type of a variable or the return type of a function.
|
534 |
|
|
|
535 |
|
|
@enumerate a
|
536 |
|
|
|
537 |
|
|
@item
|
538 |
|
|
int: The variable is a signed integer. The function returns a signed integer.
|
539 |
|
|
|
540 |
|
|
@item
|
541 |
|
|
unsigned int: The variable is an unsigned integer. The function returns an unsigned integer.
|
542 |
|
|
|
543 |
|
|
@item
|
544 |
|
|
char: The variable is a signed character. The function returns a signed character.
|
545 |
|
|
|
546 |
|
|
@item
|
547 |
|
|
unsigned char: The variable is an unsigned character. The function returns an unsigned character.
|
548 |
|
|
|
549 |
|
|
@end enumerate
|
550 |
|
|
|
551 |
|
|
@item
|
552 |
|
|
parameter_list OR parameter [, parameter]...
|
553 |
|
|
|
554 |
|
|
@item
|
555 |
|
|
parameter: variable_declaration ,
|
556 |
|
|
|
557 |
|
|
The variable declarations must not have initializations.
|
558 |
|
|
|
559 |
|
|
@item
|
560 |
|
|
initial: = value
|
561 |
|
|
|
562 |
|
|
@item
|
563 |
|
|
value: integer_constant
|
564 |
|
|
|
565 |
|
|
Values without a unary plus or minus are considered to be unsigned.
|
566 |
|
|
@smallexample
|
567 |
|
|
e.g.@: 1 +2 -3
|
568 |
|
|
@end smallexample
|
569 |
|
|
|
570 |
|
|
@item
|
571 |
|
|
function_declaration: name @{ variable_declarations statements @}
|
572 |
|
|
|
573 |
|
|
A function consists of the function name then the declarations (if any)
|
574 |
|
|
and statements (if any) within one pair of braces.
|
575 |
|
|
|
576 |
|
|
The details of the function arguments come from the function
|
577 |
|
|
prototype. The function prototype must precede the function declaration
|
578 |
|
|
in the file.
|
579 |
|
|
|
580 |
|
|
@item
|
581 |
|
|
statement: if_statement OR expression_statement OR return_statement
|
582 |
|
|
|
583 |
|
|
@item
|
584 |
|
|
if_statement: if ( expression ) @{ variable_declarations statements @}
|
585 |
|
|
else @{ variable_declarations statements @}
|
586 |
|
|
|
587 |
|
|
The first lot of statements is executed if the expression is
|
588 |
|
|
nonzero. Otherwise the second lot of statements is executed. Either
|
589 |
|
|
list of statements may be empty, but both sets of braces and the else must be present.
|
590 |
|
|
|
591 |
|
|
@smallexample
|
592 |
|
|
if (a==b)
|
593 |
|
|
@{
|
594 |
|
|
// @r{nothing}
|
595 |
|
|
@}
|
596 |
|
|
else
|
597 |
|
|
@{
|
598 |
|
|
a=b;
|
599 |
|
|
@}
|
600 |
|
|
@end smallexample
|
601 |
|
|
|
602 |
|
|
@item
|
603 |
|
|
expression_statement: expression;
|
604 |
|
|
|
605 |
|
|
The expression is executed, including any side effects.
|
606 |
|
|
|
607 |
|
|
@item
|
608 |
|
|
return_statement: return expression_opt;
|
609 |
|
|
|
610 |
|
|
Returns from the function. If the function is void, the expression must
|
611 |
|
|
be absent, and if the function is not void the expression must be
|
612 |
|
|
present.
|
613 |
|
|
|
614 |
|
|
@item
|
615 |
|
|
expression: variable OR integer_constant OR expression + expression
|
616 |
|
|
OR expression - expression OR expression == expression OR ( expression )
|
617 |
|
|
OR variable = expression OR function_call
|
618 |
|
|
|
619 |
|
|
An expression can be a constant or a variable reference or a
|
620 |
|
|
function_call. Expressions can be combined as a sum of two expressions
|
621 |
|
|
or the difference of two expressions, or an equality test of two
|
622 |
|
|
expressions. An assignment is also an expression. Expressions and operator
|
623 |
|
|
precedence work as in C.
|
624 |
|
|
|
625 |
|
|
@item
|
626 |
|
|
function_call: function_name ( optional_comma_separated_expressions )
|
627 |
|
|
|
628 |
|
|
This invokes the function, passing to it the values of the expressions
|
629 |
|
|
as actual parameters.
|
630 |
|
|
|
631 |
|
|
@end itemize
|
632 |
|
|
|
633 |
|
|
@cindex compilers
|
634 |
|
|
@node Compiler Overview, TREELANG and GCC, Parsing Syntax, Top
|
635 |
|
|
@chapter Compiler Overview
|
636 |
|
|
treelang is run as part of the GCC compiler.
|
637 |
|
|
|
638 |
|
|
@itemize @bullet
|
639 |
|
|
@cindex source code
|
640 |
|
|
@cindex file, source
|
641 |
|
|
@cindex code, source
|
642 |
|
|
@cindex source file
|
643 |
|
|
@item
|
644 |
|
|
It reads a user's program, stored in a file and containing instructions
|
645 |
|
|
written in the appropriate language (Treelang, C, and so on). This file
|
646 |
|
|
contains @dfn{source code}.
|
647 |
|
|
|
648 |
|
|
@cindex translation of user programs
|
649 |
|
|
@cindex machine code
|
650 |
|
|
@cindex code, machine
|
651 |
|
|
@cindex mistakes
|
652 |
|
|
@item
|
653 |
|
|
It translates the user's program into instructions a computer can carry
|
654 |
|
|
out more quickly than it takes to translate the instructions in the
|
655 |
|
|
first place. These instructions are called @dfn{machine code}---code
|
656 |
|
|
designed to be efficiently translated and processed by a machine such as
|
657 |
|
|
a computer. Humans usually aren't as good writing machine code as they
|
658 |
|
|
are at writing Treelang or C, because it is easy to make tiny mistakes
|
659 |
|
|
writing machine code. When writing Treelang or C, it is easy to make
|
660 |
|
|
big mistakes. But you can only make one mistake, because the compiler
|
661 |
|
|
stops after it finds any problem.
|
662 |
|
|
|
663 |
|
|
@cindex debugger
|
664 |
|
|
@cindex bugs, finding
|
665 |
|
|
@cindex @code{gdb}, command
|
666 |
|
|
@cindex commands, @code{gdb}
|
667 |
|
|
@item
|
668 |
|
|
It provides information in the generated machine code
|
669 |
|
|
that can make it easier to find bugs in the program
|
670 |
|
|
(using a debugging tool, called a @dfn{debugger},
|
671 |
|
|
such as @code{gdb}).
|
672 |
|
|
|
673 |
|
|
@cindex libraries
|
674 |
|
|
@cindex linking
|
675 |
|
|
@cindex @code{ld} command
|
676 |
|
|
@cindex commands, @code{ld}
|
677 |
|
|
@item
|
678 |
|
|
It locates and gathers machine code already generated to perform actions
|
679 |
|
|
requested by statements in the user's program. This machine code is
|
680 |
|
|
organized into @dfn{libraries} and is located and gathered during the
|
681 |
|
|
@dfn{link} phase of the compilation process. (Linking often is thought
|
682 |
|
|
of as a separate step, because it can be directly invoked via the
|
683 |
|
|
@code{ld} command. However, the @code{gcc} command, as with most
|
684 |
|
|
compiler commands, automatically performs the linking step by calling on
|
685 |
|
|
@code{ld} directly, unless asked to not do so by the user.)
|
686 |
|
|
|
687 |
|
|
@cindex language, incorrect use of
|
688 |
|
|
@cindex incorrect use of language
|
689 |
|
|
@item
|
690 |
|
|
It attempts to diagnose cases where the user's program contains
|
691 |
|
|
incorrect usages of the language. The @dfn{diagnostics} produced by the
|
692 |
|
|
compiler indicate the problem and the location in the user's source file
|
693 |
|
|
where the problem was first noticed. The user can use this information
|
694 |
|
|
to locate and fix the problem.
|
695 |
|
|
|
696 |
|
|
The compiler stops after the first error. There are no plans to fix
|
697 |
|
|
this, ever, as it would vastly complicate the implementation of treelang
|
698 |
|
|
to little or no benefit.
|
699 |
|
|
|
700 |
|
|
@cindex diagnostics, incorrect
|
701 |
|
|
@cindex incorrect diagnostics
|
702 |
|
|
@cindex error messages, incorrect
|
703 |
|
|
@cindex incorrect error messages
|
704 |
|
|
(Sometimes an incorrect usage of the language leads to a situation where
|
705 |
|
|
the compiler can not make any sense of what it reads---while a human
|
706 |
|
|
might be able to---and thus ends up complaining about an incorrect
|
707 |
|
|
``problem'' it encounters that, in fact, reflects a misunderstanding of
|
708 |
|
|
the programmer's intention.)
|
709 |
|
|
|
710 |
|
|
@cindex warnings
|
711 |
|
|
@cindex questionable instructions
|
712 |
|
|
@item
|
713 |
|
|
There are a few warnings in treelang. For example an unused static function
|
714 |
|
|
generate a warnings when -Wunused-function is specified, similarly an unused
|
715 |
|
|
static variable generates a warning when -Wunused-variable are specified.
|
716 |
|
|
The only treelang specific warning is a warning when an expression is in a
|
717 |
|
|
return statement for functions that return void.
|
718 |
|
|
@end itemize
|
719 |
|
|
|
720 |
|
|
@cindex components of treelang
|
721 |
|
|
@cindex @code{treelang}, components of
|
722 |
|
|
@code{treelang} consists of several components:
|
723 |
|
|
|
724 |
|
|
@cindex @code{gcc}, command
|
725 |
|
|
@cindex commands, @code{gcc}
|
726 |
|
|
@itemize @bullet
|
727 |
|
|
@item
|
728 |
|
|
A modified version of the @code{gcc} command, which also might be
|
729 |
|
|
installed as the system's @code{cc} command.
|
730 |
|
|
(In many cases, @code{cc} refers to the
|
731 |
|
|
system's ``native'' C compiler, which
|
732 |
|
|
might be a non-GNU compiler, or an older version
|
733 |
|
|
of @code{GCC} considered more stable or that is
|
734 |
|
|
used to build the operating system kernel.)
|
735 |
|
|
|
736 |
|
|
@cindex @code{treelang}, command
|
737 |
|
|
@cindex commands, @code{treelang}
|
738 |
|
|
@item
|
739 |
|
|
The @code{treelang} command itself.
|
740 |
|
|
|
741 |
|
|
@item
|
742 |
|
|
The @code{libc} run-time library. This library contains the machine
|
743 |
|
|
code needed to support capabilities of the Treelang language that are
|
744 |
|
|
not directly provided by the machine code generated by the
|
745 |
|
|
@code{treelang} compilation phase. This is the same library that the
|
746 |
|
|
main C compiler uses (libc).
|
747 |
|
|
|
748 |
|
|
@cindex @code{tree1}, program
|
749 |
|
|
@cindex programs, @code{tree1}
|
750 |
|
|
@cindex assembler
|
751 |
|
|
@cindex @code{as} command
|
752 |
|
|
@cindex commands, @code{as}
|
753 |
|
|
@cindex assembly code
|
754 |
|
|
@cindex code, assembly
|
755 |
|
|
@item
|
756 |
|
|
The compiler itself, is internally named @code{tree1}.
|
757 |
|
|
|
758 |
|
|
Note that @code{tree1} does not generate machine code directly---it
|
759 |
|
|
generates @dfn{assembly code} that is a more readable form
|
760 |
|
|
of machine code, leaving the conversion to actual machine code
|
761 |
|
|
to an @dfn{assembler}, usually named @code{as}.
|
762 |
|
|
@end itemize
|
763 |
|
|
|
764 |
|
|
@code{GCC} is often thought of as ``the C compiler'' only,
|
765 |
|
|
but it does more than that.
|
766 |
|
|
Based on command-line options and the names given for files
|
767 |
|
|
on the command line, @code{gcc} determines which actions to perform, including
|
768 |
|
|
preprocessing, compiling (in a variety of possible languages), assembling,
|
769 |
|
|
and linking.
|
770 |
|
|
|
771 |
|
|
@cindex driver, gcc command as
|
772 |
|
|
@cindex @code{gcc}, command as driver
|
773 |
|
|
@cindex executable file
|
774 |
|
|
@cindex files, executable
|
775 |
|
|
@cindex cc1 program
|
776 |
|
|
@cindex programs, cc1
|
777 |
|
|
@cindex preprocessor
|
778 |
|
|
@cindex cpp program
|
779 |
|
|
@cindex programs, cpp
|
780 |
|
|
For example, the command @samp{gcc foo.c} @dfn{drives} the file
|
781 |
|
|
@file{foo.c} through the preprocessor @code{cpp}, then
|
782 |
|
|
the C compiler (internally named
|
783 |
|
|
@code{cc1}), then the assembler (usually @code{as}), then the linker
|
784 |
|
|
(@code{ld}), producing an executable program named @file{a.out} (on
|
785 |
|
|
UNIX systems).
|
786 |
|
|
|
787 |
|
|
@cindex treelang program
|
788 |
|
|
@cindex programs, treelang
|
789 |
|
|
As another example, the command @samp{gcc foo.tree} would do much the
|
790 |
|
|
same as @samp{gcc foo.c}, but instead of using the C compiler named
|
791 |
|
|
@code{cc1}, @code{gcc} would use the treelang compiler (named
|
792 |
|
|
@code{tree1}). However there is no preprocessor for treelang.
|
793 |
|
|
|
794 |
|
|
@cindex @code{tree1}, program
|
795 |
|
|
@cindex programs, @code{tree1}
|
796 |
|
|
In a GNU Treelang installation, @code{gcc} recognizes Treelang source
|
797 |
|
|
files by name just like it does C and C++ source files. It knows to use
|
798 |
|
|
the Treelang compiler named @code{tree1}, instead of @code{cc1} or
|
799 |
|
|
@code{cc1plus}, to compile Treelang files. If a file's name ends in
|
800 |
|
|
@code{.tree} then GCC knows that the program is written in treelang. You
|
801 |
|
|
can also manually override the language.
|
802 |
|
|
|
803 |
|
|
@cindex @code{gcc}, not recognizing Treelang source
|
804 |
|
|
@cindex unrecognized file format
|
805 |
|
|
@cindex file format not recognized
|
806 |
|
|
Non-Treelang-related operation of @code{gcc} is generally
|
807 |
|
|
unaffected by installing the GNU Treelang version of @code{gcc}.
|
808 |
|
|
However, without the installed version of @code{gcc} being the
|
809 |
|
|
GNU Treelang version, @code{gcc} will not be able to compile
|
810 |
|
|
and link Treelang programs.
|
811 |
|
|
|
812 |
|
|
@cindex printing version information
|
813 |
|
|
@cindex version information, printing
|
814 |
|
|
The command @samp{gcc -v x.tree} where @samp{x.tree} is a file which
|
815 |
|
|
must exist but whose contents are ignored, is a quick way to display
|
816 |
|
|
version information for the various programs used to compile a typical
|
817 |
|
|
Treelang source file.
|
818 |
|
|
|
819 |
|
|
The @code{tree1} program represents most of what is unique to GNU
|
820 |
|
|
Treelang; @code{tree1} is a combination of two rather large chunks of
|
821 |
|
|
code.
|
822 |
|
|
|
823 |
|
|
@cindex GCC Back End (GBE)
|
824 |
|
|
@cindex GBE
|
825 |
|
|
@cindex @code{GCC}, back end
|
826 |
|
|
@cindex back end, GCC
|
827 |
|
|
@cindex code generator
|
828 |
|
|
One chunk is the so-called @dfn{GNU Back End}, or GBE,
|
829 |
|
|
which knows how to generate fast code for a wide variety of processors.
|
830 |
|
|
The same GBE is used by the C, C++, and Treelang compiler programs @code{cc1},
|
831 |
|
|
@code{cc1plus}, and @code{tree1}, plus others.
|
832 |
|
|
Often the GBE is referred to as the ``GCC back end'' or
|
833 |
|
|
even just ``GCC''---in this manual, the term GBE is used
|
834 |
|
|
whenever the distinction is important.
|
835 |
|
|
|
836 |
|
|
@cindex GNU Treelang Front End (TFE)
|
837 |
|
|
@cindex tree1
|
838 |
|
|
@cindex @code{treelang}, front end
|
839 |
|
|
@cindex front end, @code{treelang}
|
840 |
|
|
The other chunk of @code{tree1} is the majority of what is unique about
|
841 |
|
|
GNU Treelang---the code that knows how to interpret Treelang programs to
|
842 |
|
|
determine what they are intending to do, and then communicate that
|
843 |
|
|
knowledge to the GBE for actual compilation of those programs. This
|
844 |
|
|
chunk is called the @dfn{Treelang Front End} (TFE). The @code{cc1} and
|
845 |
|
|
@code{cc1plus} programs have their own front ends, for the C and C++
|
846 |
|
|
languages, respectively. These fronts ends are responsible for
|
847 |
|
|
diagnosing incorrect usage of their respective languages by the programs
|
848 |
|
|
the process, and are responsible for most of the warnings about
|
849 |
|
|
questionable constructs as well. (The GBE in principle handles
|
850 |
|
|
producing some warnings, like those concerning possible references to
|
851 |
|
|
undefined variables, but these warnings should not occur in treelang
|
852 |
|
|
programs as the front end is meant to pick them up first).
|
853 |
|
|
|
854 |
|
|
Because so much is shared among the compilers for various languages,
|
855 |
|
|
much of the behavior and many of the user-selectable options for these
|
856 |
|
|
compilers are similar.
|
857 |
|
|
For example, diagnostics (error messages and
|
858 |
|
|
warnings) are similar in appearance; command-line
|
859 |
|
|
options like @samp{-Wall} have generally similar effects; and the quality
|
860 |
|
|
of generated code (in terms of speed and size) is roughly similar
|
861 |
|
|
(since that work is done by the shared GBE).
|
862 |
|
|
|
863 |
|
|
@node TREELANG and GCC, Compiler, Compiler Overview, Top
|
864 |
|
|
@chapter Compile Treelang, C, or Other Programs
|
865 |
|
|
@cindex compiling programs
|
866 |
|
|
@cindex programs, compiling
|
867 |
|
|
|
868 |
|
|
@cindex @code{gcc}, command
|
869 |
|
|
@cindex commands, @code{gcc}
|
870 |
|
|
A GNU Treelang installation includes a modified version of the @code{gcc}
|
871 |
|
|
command.
|
872 |
|
|
|
873 |
|
|
In a non-Treelang installation, @code{gcc} recognizes C, C++,
|
874 |
|
|
and Objective-C source files.
|
875 |
|
|
|
876 |
|
|
In a GNU Treelang installation, @code{gcc} also recognizes Treelang source
|
877 |
|
|
files and accepts Treelang-specific command-line options, plus some
|
878 |
|
|
command-line options that are designed to cater to Treelang users
|
879 |
|
|
but apply to other languages as well.
|
880 |
|
|
|
881 |
|
|
@xref{G++ and GCC,,Programming Languages Supported by GCC,GCC,Using
|
882 |
|
|
the GNU Compiler Collection (GCC)},
|
883 |
|
|
for information on the way different languages are handled
|
884 |
|
|
by the GCC compiler (@code{gcc}).
|
885 |
|
|
|
886 |
|
|
You can use this, combined with the output of the @samp{gcc -v x.tree}
|
887 |
|
|
command to get the options applicable to treelang. Treelang programs
|
888 |
|
|
must end with the suffix @samp{.tree}.
|
889 |
|
|
|
890 |
|
|
@cindex preprocessor
|
891 |
|
|
|
892 |
|
|
Treelang programs are not by default run through the C
|
893 |
|
|
preprocessor by @code{gcc}. There is no reason why they cannot be run through the
|
894 |
|
|
preprocessor manually, but you would need to prevent the preprocessor
|
895 |
|
|
from generating #line directives, using the @samp{-P} option, otherwise
|
896 |
|
|
tree1 will not accept the input.
|
897 |
|
|
|
898 |
|
|
@node Compiler, Other Languages, TREELANG and GCC, Top
|
899 |
|
|
@chapter The GNU Treelang Compiler
|
900 |
|
|
|
901 |
|
|
The GNU Treelang compiler, @code{treelang}, supports programs written
|
902 |
|
|
in the GNU Treelang language.
|
903 |
|
|
|
904 |
|
|
@node Other Languages, treelang internals, Compiler, Top
|
905 |
|
|
@chapter Other Languages
|
906 |
|
|
|
907 |
|
|
@menu
|
908 |
|
|
* Interoperating with C and C++::
|
909 |
|
|
@end menu
|
910 |
|
|
|
911 |
|
|
@node Interoperating with C and C++, , Other Languages, Other Languages
|
912 |
|
|
@section Tools and advice for interoperating with C and C++
|
913 |
|
|
|
914 |
|
|
The output of treelang programs looks like C program code to the linker
|
915 |
|
|
and everybody else, so you should be able to freely mix treelang and C
|
916 |
|
|
(and C++) code, with one proviso.
|
917 |
|
|
|
918 |
|
|
C promotes small integer types to 'int' when used as function parameters and
|
919 |
|
|
return values in non-prototyped functions. Since treelang has no
|
920 |
|
|
non-prototyped functions, the treelang compiler does not do this.
|
921 |
|
|
|
922 |
|
|
@ifset INTERNALS
|
923 |
|
|
@node treelang internals, Open Questions, Other Languages, Top
|
924 |
|
|
@chapter treelang internals
|
925 |
|
|
|
926 |
|
|
@menu
|
927 |
|
|
* treelang files::
|
928 |
|
|
* treelang compiler interfaces::
|
929 |
|
|
* Hints and tips::
|
930 |
|
|
@end menu
|
931 |
|
|
|
932 |
|
|
@node treelang files, treelang compiler interfaces, treelang internals, treelang internals
|
933 |
|
|
@section treelang files
|
934 |
|
|
|
935 |
|
|
To create a compiler that integrates into GCC, you need create many
|
936 |
|
|
files. Some of the files are integrated into the main GCC makefile, to
|
937 |
|
|
build the various parts of the compiler and to run the test
|
938 |
|
|
suite. Others are incorporated into various GCC programs such as
|
939 |
|
|
@file{gcc.c}. Finally you must provide the actual programs comprising your
|
940 |
|
|
compiler.
|
941 |
|
|
|
942 |
|
|
@cindex files
|
943 |
|
|
|
944 |
|
|
The files are:
|
945 |
|
|
|
946 |
|
|
@enumerate 1
|
947 |
|
|
|
948 |
|
|
@item
|
949 |
|
|
COPYING. This is the copyright file, assuming you are going to use the
|
950 |
|
|
GNU General Public License. You probably need to use the GPL because if
|
951 |
|
|
you use the GCC back end your program and the back end are one program,
|
952 |
|
|
and the back end is GPLed.
|
953 |
|
|
|
954 |
|
|
This need not be present if the language is incorporated into the main
|
955 |
|
|
GCC tree, as the main GCC directory has this file.
|
956 |
|
|
|
957 |
|
|
@item
|
958 |
|
|
COPYING.LIB. This is the copyright file for those parts of your program
|
959 |
|
|
that are not to be covered by the GPL, but are instead to be covered by
|
960 |
|
|
the LGPL (Library or Lesser GPL). This license may be appropriate for
|
961 |
|
|
the library routines associated with your compiler. These are the
|
962 |
|
|
routines that are linked with the @emph{output} of the compiler. Using
|
963 |
|
|
the LGPL for these programs allows programs written using your compiler
|
964 |
|
|
to be closed source. For example LIBC is under the LGPL.
|
965 |
|
|
|
966 |
|
|
This need not be present if the language is incorporated into the main
|
967 |
|
|
GCC tree, as the main GCC directory has this file.
|
968 |
|
|
|
969 |
|
|
@item
|
970 |
|
|
ChangeLog. Record all the changes to your compiler. Use the same format
|
971 |
|
|
as used in treelang as it is supported by an emacs editing mode and is
|
972 |
|
|
part of the FSF coding standard. Normally each directory has its own
|
973 |
|
|
changelog. The FSF standard allows but does not require a meaningful
|
974 |
|
|
comment on why the changes were made, above and beyond @emph{why} they
|
975 |
|
|
were made. In the author's opinion it is useful to provide this
|
976 |
|
|
information.
|
977 |
|
|
|
978 |
|
|
@item
|
979 |
|
|
treelang.texi. The manual, written in texinfo. Your manual would have a
|
980 |
|
|
different file name. You need not write it in texinfo if you don't want
|
981 |
|
|
do, but a lot of GNU software does use texinfo.
|
982 |
|
|
|
983 |
|
|
@cindex Make-lang.in
|
984 |
|
|
@item
|
985 |
|
|
Make-lang.in. This file is part of the make file which in incorporated
|
986 |
|
|
with the GCC make file skeleton (Makefile.in in the GCC directory) to
|
987 |
|
|
make Makefile, as part of the configuration process.
|
988 |
|
|
|
989 |
|
|
Makefile in turn is the main instruction to actually build
|
990 |
|
|
everything. The build instructions are held in the main GCC manual and
|
991 |
|
|
web site so they are not repeated here.
|
992 |
|
|
|
993 |
|
|
There are some comments at the top which will help you understand what
|
994 |
|
|
you need to do.
|
995 |
|
|
|
996 |
|
|
There are make commands to build things, remove generated files with
|
997 |
|
|
various degrees of thoroughness, count the lines of code (so you know
|
998 |
|
|
how much progress you are making), build info and html files from the
|
999 |
|
|
texinfo source, run the tests etc.
|
1000 |
|
|
|
1001 |
|
|
@item
|
1002 |
|
|
README. Just a brief informative text file saying what is in this
|
1003 |
|
|
directory.
|
1004 |
|
|
|
1005 |
|
|
@cindex config-lang.in
|
1006 |
|
|
@item
|
1007 |
|
|
config-lang.in. This file is read by the configuration progress and must
|
1008 |
|
|
be present. You specify the name of your language, the name(s) of the
|
1009 |
|
|
compiler(s) including preprocessors you are going to build, whether any,
|
1010 |
|
|
usually generated, files should be excluded from diffs (ie when making
|
1011 |
|
|
diff files to send in patches). Whether the equate 'stagestuff' is used
|
1012 |
|
|
is unknown (???).
|
1013 |
|
|
|
1014 |
|
|
@cindex lang.opt
|
1015 |
|
|
@item
|
1016 |
|
|
lang.opt. This file is included into @file{gcc.c}, the main GCC driver, and
|
1017 |
|
|
tells it what options your language supports. This is also used to
|
1018 |
|
|
display help.
|
1019 |
|
|
|
1020 |
|
|
@cindex lang-specs.h
|
1021 |
|
|
@item
|
1022 |
|
|
lang-specs.h. This file is also included in @file{gcc.c}. It tells
|
1023 |
|
|
@file{gcc.c} when to call your programs and what options to send them. The
|
1024 |
|
|
mini-language 'specs' is documented in the source of @file{gcc.c}. Do not
|
1025 |
|
|
attempt to write a specs file from scratch - use an existing one as the base
|
1026 |
|
|
and enhance it.
|
1027 |
|
|
|
1028 |
|
|
@item
|
1029 |
|
|
Your texi files. Texinfo can be used to build documentation in HTML,
|
1030 |
|
|
info, dvi and postscript formats. It is a tagged language, is documented
|
1031 |
|
|
in its own manual, and has its own emacs mode.
|
1032 |
|
|
|
1033 |
|
|
@item
|
1034 |
|
|
Your programs. The relationships between all the programs are explained
|
1035 |
|
|
in the next section. You need to write or use the following programs:
|
1036 |
|
|
|
1037 |
|
|
@itemize @bullet
|
1038 |
|
|
|
1039 |
|
|
@item
|
1040 |
|
|
lexer. This breaks the input into words and passes these to the
|
1041 |
|
|
parser. This is @file{lex.l} in treelang, which is passed through flex, a lex
|
1042 |
|
|
variant, to produce C code @file{lex.c}. Note there is a school of thought
|
1043 |
|
|
that says real men hand code their own lexers. However, you may prefer to
|
1044 |
|
|
write far less code and use flex, as was done with treelang.
|
1045 |
|
|
|
1046 |
|
|
@item
|
1047 |
|
|
parser. This breaks the program into recognizable constructs such as
|
1048 |
|
|
expressions, statements etc. This is @file{parse.y} in treelang, which is
|
1049 |
|
|
passed through bison, which is a yacc variant, to produce C code
|
1050 |
|
|
@file{parse.c}.
|
1051 |
|
|
|
1052 |
|
|
@item
|
1053 |
|
|
back end interface. This interfaces to the code generation back end. In
|
1054 |
|
|
treelang, this is @file{tree1.c} which mainly interfaces to @file{toplev.c} and
|
1055 |
|
|
@file{treetree.c} which mainly interfaces to everything else. Many languages
|
1056 |
|
|
mix up the back end interface with the parser, as in the C compiler for
|
1057 |
|
|
example. It is a matter of taste which way to do it, but with treelang
|
1058 |
|
|
it is separated out to make the back end interface cleaner and easier to
|
1059 |
|
|
understand.
|
1060 |
|
|
|
1061 |
|
|
@item
|
1062 |
|
|
header files. For function prototypes and common data items. One point
|
1063 |
|
|
to note here is that bison can generate a header files with all the
|
1064 |
|
|
numbers is has assigned to the keywords and symbols, and you can include
|
1065 |
|
|
the same header in your lexer. This technique is demonstrated in
|
1066 |
|
|
treelang.
|
1067 |
|
|
|
1068 |
|
|
@item
|
1069 |
|
|
compiler main file. GCC comes with a file @file{toplev.c} which is a
|
1070 |
|
|
perfectly serviceable main program for your compiler. GNU Treelang uses
|
1071 |
|
|
@file{toplev.c} but other languages have been known to replace it with their
|
1072 |
|
|
own main program. Again this is a matter of taste and how much code you
|
1073 |
|
|
want to write.
|
1074 |
|
|
|
1075 |
|
|
@end itemize
|
1076 |
|
|
|
1077 |
|
|
@end enumerate
|
1078 |
|
|
|
1079 |
|
|
@node treelang compiler interfaces, Hints and tips, treelang files, treelang internals
|
1080 |
|
|
@section treelang compiler interfaces
|
1081 |
|
|
|
1082 |
|
|
@cindex driver
|
1083 |
|
|
@cindex toplev.c
|
1084 |
|
|
|
1085 |
|
|
@menu
|
1086 |
|
|
* treelang driver::
|
1087 |
|
|
* treelang main compiler::
|
1088 |
|
|
@end menu
|
1089 |
|
|
|
1090 |
|
|
@node treelang driver, treelang main compiler, treelang compiler interfaces, treelang compiler interfaces
|
1091 |
|
|
@subsection treelang driver
|
1092 |
|
|
|
1093 |
|
|
The GCC compiler consists of a driver, which then executes the various
|
1094 |
|
|
compiler phases based on the instructions in the specs files.
|
1095 |
|
|
|
1096 |
|
|
Typically a program's language will be identified from its suffix
|
1097 |
|
|
(e.g., @file{.tree}) for treelang programs.
|
1098 |
|
|
|
1099 |
|
|
The driver (@file{gcc.c}) will then drive (exec) in turn a preprocessor,
|
1100 |
|
|
the main compiler, the assembler and the link editor. Options to GCC allow you
|
1101 |
|
|
to override all of this. In the case of treelang programs there is no
|
1102 |
|
|
preprocessor, and mostly these days the C preprocessor is run within the
|
1103 |
|
|
main C compiler rather than as a separate process, apparently for reasons of speed.
|
1104 |
|
|
|
1105 |
|
|
You will be using the standard assembler and linkage editor so these are
|
1106 |
|
|
ignored from now on.
|
1107 |
|
|
|
1108 |
|
|
You have to write your own preprocessor if you want one. This is usually
|
1109 |
|
|
totally language specific. The main point to be aware of is to ensure
|
1110 |
|
|
that you find some way to pass file name and line number information
|
1111 |
|
|
through to the main compiler so that it can tell the back end this
|
1112 |
|
|
information and so the debugger can find the right source line for each
|
1113 |
|
|
piece of code. That is all there is to say about the preprocessor except
|
1114 |
|
|
that the preprocessor will probably not be the slowest part of the
|
1115 |
|
|
compiler and will probably not use the most memory so don't waste too
|
1116 |
|
|
much time tuning it until you know you need to do so.
|
1117 |
|
|
|
1118 |
|
|
@node treelang main compiler, , treelang driver, treelang compiler interfaces
|
1119 |
|
|
@subsection treelang main compiler
|
1120 |
|
|
|
1121 |
|
|
The main compiler for treelang consists of @file{toplev.c} from the main GCC
|
1122 |
|
|
compiler, the parser, lexer and back end interface routines, and the
|
1123 |
|
|
back end routines themselves, of which there are many.
|
1124 |
|
|
|
1125 |
|
|
@file{toplev.c} does a lot of work for you and you should almost certainly
|
1126 |
|
|
use it.
|
1127 |
|
|
|
1128 |
|
|
Writing this code is the hard part of creating a compiler using GCC. The
|
1129 |
|
|
back end interface documentation is incomplete and the interface is
|
1130 |
|
|
complex.
|
1131 |
|
|
|
1132 |
|
|
There are three main aspects to interfacing to the other GCC code.
|
1133 |
|
|
|
1134 |
|
|
@menu
|
1135 |
|
|
* Interfacing to toplev.c::
|
1136 |
|
|
* Interfacing to the garbage collection::
|
1137 |
|
|
* Interfacing to the code generation code. ::
|
1138 |
|
|
@end menu
|
1139 |
|
|
|
1140 |
|
|
@node Interfacing to toplev.c, Interfacing to the garbage collection, treelang main compiler, treelang main compiler
|
1141 |
|
|
@subsubsection Interfacing to toplev.c
|
1142 |
|
|
|
1143 |
|
|
In treelang this is handled mainly in tree1.c
|
1144 |
|
|
and partly in treetree.c. Peruse toplev.c for details of what you need
|
1145 |
|
|
to do.
|
1146 |
|
|
|
1147 |
|
|
@node Interfacing to the garbage collection, Interfacing to the code generation code. , Interfacing to toplev.c, treelang main compiler
|
1148 |
|
|
@subsubsection Interfacing to the garbage collection
|
1149 |
|
|
|
1150 |
|
|
Interfacing to the garbage collection. In treelang this is mainly in
|
1151 |
|
|
tree1.c.
|
1152 |
|
|
|
1153 |
|
|
Memory allocation in the compiler should be done using the ggc_alloc and
|
1154 |
|
|
kindred routines in ggc*.*. At the end of every 'function' in your language, toplev.c calls
|
1155 |
|
|
the garbage collection several times. The garbage collection calls mark
|
1156 |
|
|
routines which go through the memory which is still used, telling the
|
1157 |
|
|
garbage collection not to free it. Then all the memory not used is
|
1158 |
|
|
freed.
|
1159 |
|
|
|
1160 |
|
|
What this means is that you need a way to hook into this marking
|
1161 |
|
|
process. This is done by calling ggc_add_root. This provides the address
|
1162 |
|
|
of a callback routine which will be called duing garbage collection and
|
1163 |
|
|
which can call ggc_mark to save the storage. If storage is only
|
1164 |
|
|
used within the parsing of a function, you do not need to provide a way
|
1165 |
|
|
to mark it.
|
1166 |
|
|
|
1167 |
|
|
Note that you can also call ggc_mark_tree to mark any of the back end
|
1168 |
|
|
internal 'tree' nodes. This routine will follow the branches of the
|
1169 |
|
|
trees and mark all the subordinate structures. This is useful for
|
1170 |
|
|
example when you have created a variable declaration that will be used
|
1171 |
|
|
across multiple functions, or for a function declaration (from a
|
1172 |
|
|
prototype) that may be used later on. See the next item for more on the
|
1173 |
|
|
tree nodes.
|
1174 |
|
|
|
1175 |
|
|
@node Interfacing to the code generation code. , , Interfacing to the garbage collection, treelang main compiler
|
1176 |
|
|
@subsubsection Interfacing to the code generation code.
|
1177 |
|
|
|
1178 |
|
|
In treelang this is done in treetree.c. A typedef called 'tree' which is
|
1179 |
|
|
defined in tree.h and tree.def in the GCC directory and largely
|
1180 |
|
|
implemented in tree.c and stmt.c forms the basic interface to the
|
1181 |
|
|
compiler back end.
|
1182 |
|
|
|
1183 |
|
|
In general you call various tree routines to generate code, either
|
1184 |
|
|
directly or through toplev.c. You build up data structures and
|
1185 |
|
|
expressions in similar ways.
|
1186 |
|
|
|
1187 |
|
|
You can read some documentation on this which can be found via the GCC
|
1188 |
|
|
main web page. In particular, the documentation produced by Joachim
|
1189 |
|
|
Nadler and translated by Tim Josling can be quite useful. the C compiler
|
1190 |
|
|
also has documentation in the main GCC manual (particularly the current
|
1191 |
|
|
CVS version) which is useful on a lot of the details.
|
1192 |
|
|
|
1193 |
|
|
In time it is hoped to enhance this document to provide a more
|
1194 |
|
|
comprehensive overview of this topic. The main gap is in explaining how
|
1195 |
|
|
it all works together.
|
1196 |
|
|
|
1197 |
|
|
@node Hints and tips, , treelang compiler interfaces, treelang internals
|
1198 |
|
|
@section Hints and tips
|
1199 |
|
|
|
1200 |
|
|
@itemize @bullet
|
1201 |
|
|
|
1202 |
|
|
@item
|
1203 |
|
|
TAGS: Use the make ETAGS commands to create TAGS files which can be used in
|
1204 |
|
|
emacs to jump to any symbol quickly.
|
1205 |
|
|
|
1206 |
|
|
@item
|
1207 |
|
|
GREP: grep is also a useful way to find all uses of a symbol.
|
1208 |
|
|
|
1209 |
|
|
@item
|
1210 |
|
|
TREE: The main routines to look at are tree.h and tree.def. You will
|
1211 |
|
|
probably want a hardcopy of these.
|
1212 |
|
|
|
1213 |
|
|
@item
|
1214 |
|
|
SAMPLE: look at the sample interfacing code in treetree.c. You can use
|
1215 |
|
|
gdb to trace through the code and learn about how it all works.
|
1216 |
|
|
|
1217 |
|
|
@item
|
1218 |
|
|
GDB: the GCC back end works well with gdb. It traps abort() and allows
|
1219 |
|
|
you to trace back what went wrong.
|
1220 |
|
|
|
1221 |
|
|
@item
|
1222 |
|
|
Error Checking: The compiler back end does some error and consistency
|
1223 |
|
|
checking. Often the result of an error is just no code being
|
1224 |
|
|
generated. You will then need to trace through and find out what is
|
1225 |
|
|
going wrong. The rtl dump files can help here also.
|
1226 |
|
|
|
1227 |
|
|
@item
|
1228 |
|
|
rtl dump files: The main compiler documents these files which are dumps
|
1229 |
|
|
of the rtl (intermediate code) which is manipulated doing the code
|
1230 |
|
|
generation process. This can provide useful clues about what is going
|
1231 |
|
|
wrong. The rtl 'language' is documented in the main GCC manual.
|
1232 |
|
|
|
1233 |
|
|
@end itemize
|
1234 |
|
|
|
1235 |
|
|
@end ifset
|
1236 |
|
|
|
1237 |
|
|
@node Open Questions, Bugs, treelang internals, Top
|
1238 |
|
|
@chapter Open Questions
|
1239 |
|
|
|
1240 |
|
|
If you know GCC well, please consider looking at the file treetree.c and
|
1241 |
|
|
resolving any questions marked "???".
|
1242 |
|
|
|
1243 |
|
|
@node Bugs, Service, Open Questions, Top
|
1244 |
|
|
@chapter Reporting Bugs
|
1245 |
|
|
@cindex bugs
|
1246 |
|
|
@cindex reporting bugs
|
1247 |
|
|
|
1248 |
|
|
You can report bugs to @email{@value{email-bugs}}. Please make
|
1249 |
|
|
sure bugs are real before reporting them. Follow the guidelines in the
|
1250 |
|
|
main GCC manual for submitting bug reports.
|
1251 |
|
|
|
1252 |
|
|
@menu
|
1253 |
|
|
* Sending Patches::
|
1254 |
|
|
@end menu
|
1255 |
|
|
|
1256 |
|
|
@node Sending Patches, , Bugs, Bugs
|
1257 |
|
|
@section Sending Patches for GNU Treelang
|
1258 |
|
|
|
1259 |
|
|
If you would like to write bug fixes or improvements for the GNU
|
1260 |
|
|
Treelang compiler, that is very helpful. Send suggested fixes to
|
1261 |
|
|
@email{@value{email-patches}}.
|
1262 |
|
|
|
1263 |
|
|
@node Service, Projects, Bugs, Top
|
1264 |
|
|
@chapter How To Get Help with GNU Treelang
|
1265 |
|
|
|
1266 |
|
|
If you need help installing, using or changing GNU Treelang, there are two
|
1267 |
|
|
ways to find it:
|
1268 |
|
|
|
1269 |
|
|
@itemize @bullet
|
1270 |
|
|
|
1271 |
|
|
@item
|
1272 |
|
|
Look in the service directory for someone who might help you for a fee.
|
1273 |
|
|
The service directory is found in the file named @file{SERVICE} in the
|
1274 |
|
|
GCC distribution.
|
1275 |
|
|
|
1276 |
|
|
@item
|
1277 |
|
|
Send a message to @email{@value{email-general}}.
|
1278 |
|
|
|
1279 |
|
|
@end itemize
|
1280 |
|
|
|
1281 |
|
|
@end ifset
|
1282 |
|
|
@ifset INTERNALS
|
1283 |
|
|
|
1284 |
|
|
@node Projects, Index, Service, Top
|
1285 |
|
|
@chapter Projects
|
1286 |
|
|
@cindex projects
|
1287 |
|
|
|
1288 |
|
|
If you want to contribute to @code{treelang} by doing research,
|
1289 |
|
|
design, specification, documentation, coding, or testing,
|
1290 |
|
|
the following information should give you some ideas.
|
1291 |
|
|
|
1292 |
|
|
Send a message to @email{@value{email-general}} if you plan to add a
|
1293 |
|
|
feature.
|
1294 |
|
|
|
1295 |
|
|
The main requirement for treelang is to add features and to add
|
1296 |
|
|
documentation. Features are things that the GCC back end can do but
|
1297 |
|
|
which are not reflected in treelang. Examples include structures,
|
1298 |
|
|
unions, pointers, arrays.
|
1299 |
|
|
|
1300 |
|
|
@end ifset
|
1301 |
|
|
|
1302 |
|
|
@node Index, , Projects, Top
|
1303 |
|
|
@unnumbered Index
|
1304 |
|
|
|
1305 |
|
|
@printindex cp
|
1306 |
|
|
@summarycontents
|
1307 |
|
|
@contents
|
1308 |
|
|
@bye
|