[comp.sources.misc] REPOST: v19i092: wacco - A C++ LL parser generator, Part05/06

parag@hpsdeb.sde.hp.com (Parag Patel) (05/19/91)

Submitted-by: Parag Patel <parag@hpsdeb.sde.hp.com>
Posting-number: Volume 19, Issue 92
Archive-name: wacco/part05

#!/bin/sh
# do not concatenate these parts, unpack them in order with /bin/sh
# file wacco.doc.ps continued
#
if test ! -r _shar_seq_.tmp; then
	echo 'Please unpack part 1 first!'
	exit 1
fi
(read Scheck
 if test "$Scheck" != 5; then
	echo Please unpack part "$Scheck" next!
	exit 1
 else
	exit 0
 fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
	echo 'x - still skipping wacco.doc.ps'
else
echo 'x - continuing file wacco.doc.ps'
sed 's/^X//' << 'SHAR_EOF' >> 'wacco.doc.ps' &&
1440 3277 m (Palatino-Roman02400240) getfont (Courier02400240) getfont
3605 ss 1440 3605 m (Courier02400240) getfont 720.000 nx sp (id <TYPE>  : ) s
(Palatino-Italic02400240) getfont (stuff) s (Courier02400240) getfont ( ;) s
(Palatino-Roman02400240) getfont 3933 ss 1440 3933 m
(Palatino-Roman02400240) getfont 4261 ss 1440 4261 m
(Palatino-Roman02400240) getfont (The ) s 16.820 nx sp
(Palatino-Italic02400240) getfont (id ) s sp (Palatino-Roman02400240) getfont (on ) s
sp (the ) s sp (left-hand ) s sp (side ) s 16.840 nx sp (is ) s 16.820 nx sp (a ) s sp (non-terminal ) s
sp (and ) s sp (so ) s sp ( ) s 16.840 nx sp (is ) s 16.820 nx sp (eventually ) s sp (turned ) s
sp (into ) s sp (a ) s 16.840 nx sp (function. ) s 16.820 nx sp ( ) s sp 4549 ss
1442 4549 m (Palatino-Roman02400240) getfont (The ) s 1.540 nx sp
(Palatino-Italic02400240) getfont (TYPE ) s 1.560 nx sp
(Palatino-Roman02400240) getfont (is ) s sp (the ) s sp (type ) s 1.540 nx sp (that ) s
1.560 nx sp (this ) s sp (function ) s sp (will ) s sp (accept ) s 1.540 nx sp (in ) s
1.560 nx sp (and ) s sp (return ) s sp (as ) s 1.540 nx sp (a ) s 1.560 nx sp (reference ) s
sp (argument. ) s sp ( ) s sp (It ) s 1.540 nx sp 4837 ss 1442 4837 m
(Palatino-Roman02400240) getfont (is ) s -0.660 nx sp (optional ) s sp (and ) s
-0.680 nx sp (must ) s -0.660 nx sp (be ) s sp (in ) s -0.680 nx sp (angle-brackets ) s
-0.660 nx sp ( ) s sp (if ) s -0.680 nx sp (present ) s -0.660 nx sp (. ) s sp (The ) s
-0.680 nx sp (default ) s -0.660 nx sp (Palatino-Italic02400240) getfont (TYPE) s
(Palatino-Roman02400240) getfont ( ) s sp (is ) s -0.680 nx sp ( ) s -0.660 nx sp (") s
(Courier02400240) getfont (int) s (Palatino-Roman02400240) getfont (". ) s sp (This ) s
-0.680 nx sp (Palatino-Italic02400240) getfont (TYPE) s
(Palatino-Roman02400240) getfont ( ) s -0.660 nx sp 5125 ss 1442 5125 m
(Palatino-Roman02400240) getfont (is used to pass information into and out of the rule, as will be seen later.) s
5453 ss 1440 5453 m (Palatino-Roman02400240) getfont
(Courier02400240) getfont 5781 ss 1440 5781 m (Courier02400240) getfont
720.000 nx sp (id : ) s (Palatino-Italic02400240) getfont (stuff) s
(Courier02400240) getfont ( ;) s 6109 ss 1440 6109 m (Courier02400240) getfont
sp (id <TYPE> : ) s (Palatino-Italic02400240) getfont (stuff) s
(Courier02400240) getfont ( ;) s (Palatino-Roman02400240) getfont 6437 ss
1440 6437 m (Palatino-Roman02400240) getfont 6765 ss 1440 6765 m
(Palatino-Roman02400240) getfont (A vertical-bar ") s (Courier02400240) getfont
(|) s (Palatino-Roman02400240) getfont (" may be used to avoid duplicating the left-hand side:) s
7093 ss 1440 7093 m (Palatino-Roman02400240) getfont
(Courier02400240) getfont 7421 ss 1440 7421 m (Courier02400240) getfont sp (id : ) s
(Palatino-Italic02400240) getfont (stuff1) s (Courier02400240) getfont ( ;) s
7749 ss 1440 7749 m (Courier02400240) getfont sp (id : ) s
(Palatino-Italic02400240) getfont (stuff2) s (Courier02400240) getfont ( ;) s
(Palatino-Roman02400240) getfont 8077 ss 1440 8077 m
(Palatino-Roman02400240) getfont 8405 ss 1440 8405 m
(Palatino-Roman02400240) getfont (is equivalent to) s 8733 ss 1440 8733 m
(Palatino-Roman02400240) getfont (Courier02400240) getfont 9061 ss
1440 9061 m (Courier02400240) getfont sp (id : ) s
(Palatino-Italic02400240) getfont (stuff1) s (Courier02400240) getfont ( | ) s
(Palatino-Italic02400240) getfont (stuff2) s (Courier02400240) getfont ( ;) s
(Palatino-Roman02400240) getfont 9389 ss 1440 9389 m
(Palatino-Roman02400240) getfont 9717 ss 1440 9717 m
(Palatino-Roman02400240) getfont (The ) s 3.040 nx sp
(Palatino-Italic02400240) getfont (stuff) s (Palatino-Roman02400240) getfont ( ) s
3.060 nx sp (on ) s sp (the ) s sp (right-hand ) s 3.040 nx sp (side ) s 3.060 nx sp (can ) s
sp (get ) s sp (kind ) s sp (of ) s 3.040 nx sp (interesting. ) s 3.060 nx sp ( ) s sp (Like, ) s
sp (yacc, ) s 3.040 nx sp (this ) s 3.060 nx sp (is ) s sp (basically ) s sp (a ) s sp (list ) s
3.040 nx sp 10005 ss 1442 10005 m (Palatino-Roman02400240) getfont (of terminals or non-terminals that are expected in sequence.) s
10333 ss 1440 10333 m (Palatino-Roman02400240) getfont
(Courier02400240) getfont 10661 ss 1440 10661 m (Courier02400240) getfont
720.000 nx sp (parenexpr : LPAREN expr RPAREN ;) s
(Palatino-Roman02400240) getfont 10989 ss 1440 10989 m
(Palatino-Roman02400240) getfont 11317 ss 1440 11317 m
(Palatino-Roman02400240) getfont (AvantGarde-Demi02800280) getfont 11693 ss
1440 11693 m (AvantGarde-Demi02800280) getfont (Terminals) s
(Palatino-Roman02400240) getfont 12021 ss 1440 12021 m
(Palatino-Roman02400240) getfont 12349 ss 1440 12349 m
(Palatino-Roman02400240) getfont (Terminals can be described in several different ways.) s
12677 ss 1440 12677 m (Palatino-Roman02400240) getfont 13005 ss 1440 13005 m
(Palatino-Roman02400240) getfont (Simple ) s 10.640 nx sp (character ) s sp (tokens ) s
sp (are ) s sp (straight-forward. ) s sp ( ) s sp (Their ) s 10.660 nx sp (token ) s
10.640 nx sp (value ) s sp (is ) s sp (always ) s sp (that ) s sp (of ) s sp (the ) s
10.660 nx sp (char-) s 13293 ss 1442 13293 m (Palatino-Roman02400240) getfont (acter ) s
5.300 nx sp (they ) s 5.320 nx sp (represent. ) s sp ( ) s sp (The ) s 5.300 nx sp (null ) s
5.320 nx sp (character ) s sp ('\\0' ) s sp (may ) s sp (not ) s 5.300 nx sp (be ) s
5.320 nx sp (used ) s sp (as ) s sp (a ) s sp (token ) s 5.300 nx sp (- ) s 5.320 nx sp (its ) s
sp (value ) s sp (used ) s sp (for ) s 5.300 nx sp 13581 ss 1442 13581 m
(Palatino-Roman02400240) getfont (other things internally.) s 13909 ss
1440 13909 m (Palatino-Roman02400240) getfont (Courier02400240) getfont
14237 ss 1440 14237 m (Courier02400240) getfont 720.000 nx sp (parenexpr : '\(' expr '\)' ;) s
(Palatino-Roman02400240) getfont 14565 ss 1440 14565 m
(Palatino-Roman02400240) getfont
NP 6720 1695 m 5910 1695 l GS 0.00 SG 1 SLW ST GR 5910 1695 m
showpage vm_state restore
X
X
save /vm_state E def [1 0 0 -1 0 0] concat 0.050000 0.050000 SC .5 SLW
0 -15840 TR 0 RO
0 0 0 15840 12240 15840 12240 0 pageboundary clip
userdict /#copies 1 put statusdict /manualfeed false put 1253 ss 1440 1253 m
(Palatino-Roman02400240) getfont (For more complicated strings, just use the strings themselves!) s
1581 ss 1440 1581 m (Palatino-Roman02400240) getfont
(Courier02400240) getfont 1909 ss 1440 1909 m (Courier02400240) getfont
720.000 nx sp (parenexpr : "<<" expr ">>" ;) s (Palatino-Roman02400240) getfont
2237 ss 1440 2237 m (Palatino-Roman02400240) getfont 2565 ss 1440 2565 m
(Palatino-Roman02400240) getfont (The same string may be used in other rules to refer to that very same token.) s
2893 ss 1440 2893 m (Palatino-Roman02400240) getfont 3221 ss 1440 3221 m
(Palatino-Roman02400240) getfont (Also, ) s -4.300 nx sp (any ) s -4.320 nx sp (identifier ) s
sp (name ) s sp (may ) s -4.300 nx sp (be ) s -4.320 nx sp (used ) s sp (to ) s sp (define ) s
sp (a ) s -4.300 nx sp (terminal. ) s -4.320 nx sp ( ) s sp (If ) s sp (that ) s sp (id ) s
-4.300 nx sp (does ) s -4.320 nx sp (not ) s sp (appear ) s sp (on ) s sp (the ) s
-4.300 nx sp 3509 ss 1442 3509 m (Palatino-Roman02400240) getfont (left side of a colon ") s
(Courier02400240) getfont (:) s (Palatino-Roman02400240) getfont (", then it is assumed to be a terminal symbol in the grammar.) s
3837 ss 1440 3837 m (Palatino-Roman02400240) getfont 4165 ss 1440 4165 m
(Palatino-Roman02400240) getfont (Token ) s 9.220 nx sp (codes ) s 9.240 nx sp (for ) s
9.220 nx sp (terminals ) s 9.240 nx sp (are ) s 9.220 nx sp (automatically ) s
9.240 nx sp (assigned ) s 9.220 nx sp (and ) s 9.240 nx sp (stored ) s 9.220 nx sp (in ) s
9.240 nx sp (the ) s 9.220 nx sp (Palatino-Italic02400240) getfont (tokens.h) s
(Palatino-Roman02400240) getfont ( ) s 9.240 nx sp (header ) s sp (file. ) s
9.220 nx sp ( ) s 9.240 nx sp 4453 ss 1442 4453 m
(Palatino-Roman02400240) getfont (The ) s 2.420 nx sp (token ) s 2.440 nx sp (value ) s
sp (of ) s sp (a ) s sp (string ) s sp (is ) s sp (pretty ) s sp (much ) s 2.420 nx sp (inaccessible. ) s
2.440 nx sp ( ) s sp (A ) s sp (character ) s sp (constant ) s sp (will ) s sp (always ) s sp (be ) s
2.420 nx sp 4741 ss 1442 4741 m (Palatino-Roman02400240) getfont (its ) s
2.220 nx sp (own ) s sp (token. ) s sp ( ) s sp (Any ) s sp (other ) s sp (terminal ) s sp (name ) s
sp (like ) s 2.240 nx sp (Palatino-Italic02400240) getfont (LPAREN) s
(Palatino-Roman02400240) getfont ( ) s 2.220 nx sp (above ) s sp (will ) s sp (be ) s sp
(in ) s sp (the ) s sp (header ) s sp (file ) s sp (as ) s 2.240 nx sp (an ) s 2.220 nx sp
5029 ss 1442 5029 m (Palatino-Roman02400240) getfont (enum with the same name, allowing it to be used symbolically.) s
5357 ss 1440 5357 m (Palatino-Roman02400240) getfont 5685 ss 1440 5685 m
(Palatino-Roman02400240) getfont (AvantGarde-Demi02800280) getfont 6061 ss
1440 6061 m (AvantGarde-Demi02800280) getfont (Actions) s
(Palatino-Roman02400240) getfont 6389 ss 1440 6389 m
(Palatino-Roman02400240) getfont 6717 ss 1440 6717 m
(Palatino-Roman02400240) getfont (Actions ) s 14.920 nx sp (\(that ) s sp (is, ) s
14.940 nx sp (C++ ) s 14.920 nx sp (code\) ) s 14.940 nx sp (are ) s 14.920 nx sp (imbedded ) s
14.940 nx sp (anywhere ) s 14.920 nx sp (on ) s sp (the ) s 14.940 nx sp (right-hand ) s
14.920 nx sp (side ) s 14.940 nx sp (within ) s 14.920 nx sp (pairs ) s 14.940 nx sp (of ) s
14.920 nx sp 7005 ss 1442 7005 m (Palatino-Roman02400240) getfont (curly-braces ) s
(Courier02400240) getfont ({}) s (Palatino-Roman02400240) getfont (.) s 7333 ss
1440 7333 m (Palatino-Roman02400240) getfont (Courier02400240) getfont
7661 ss 1440 7661 m (Courier02400240) getfont 720.000 nx sp (parenexpr: '\(' expr { $$ = $expr; } '\)') s
(Palatino-Roman02400240) getfont 7989 ss 1440 7989 m
(Palatino-Roman02400240) getfont 8317 ss 1440 8317 m
(Palatino-Roman02400240) getfont (This ) s 26.520 nx sp (introduces ) s
26.540 nx sp (some ) s sp (other ) s sp (features ) s sp (that ) s sp (wacco ) s sp (has ) s sp
(which ) s sp (yacc ) s sp (doesn't. ) s sp (First ) s sp (though, ) s sp (the ) s 26.520 nx sp
8605 ss 1442 8605 m (Palatino-Roman02400240) getfont (value that the non-terminal returns is always ") s
(Courier02400240) getfont ($$) s (Palatino-Roman02400240) getfont (".) s 8933 ss
1440 8933 m (Palatino-Roman02400240) getfont 9261 ss 1440 9261 m
(Palatino-Roman02400240) getfont (The ) s -2.060 nx sp (values ) s sp (of ) s sp (the ) s
sp (right-hand ) s sp (side ) s sp (are ) s sp (referred ) s -2.080 nx sp (to ) s
-2.060 nx sp (directly ) s sp (via ) s sp (their ) s sp (symbolic ) s sp (names. ) s sp ( ) s
sp (Thus ) s -2.080 nx sp (we ) s -2.060 nx sp 9549 ss 1442 9549 m
(Palatino-Roman02400240) getfont (use ) s 3.520 nx sp (") s
(Courier02400240) getfont ($expr) s (Palatino-Roman02400240) getfont (" ) s sp (instead ) s
3.540 nx sp (of ) s 3.520 nx sp (") s (Courier02400240) getfont ($2) s
(Palatino-Roman02400240) getfont (" ) s 3.540 nx sp (in ) s 3.520 nx sp (yacc! ) s
3.540 nx sp ( ) s 3.520 nx sp (Also, ) s 3.540 nx sp
(Palatino-Italic02400240) getfont (expr) s (Palatino-Roman02400240) getfont (s ) s
3.520 nx sp (must ) s 3.540 nx sp (return ) s 3.520 nx sp (Courier02400240) getfont
(int) s (Palatino-Roman02400240) getfont (s ) s 3.540 nx sp (or ) s 3.520 nx sp (the ) s
3.540 nx sp (C++ ) s 3.520 nx sp (compiler ) s 3.540 nx sp (will ) s 3.520 nx sp
9837 ss 1442 9837 m (Palatino-Roman02400240) getfont (complain!) s 10165 ss
1440 10165 m (Palatino-Roman02400240) getfont 10493 ss 1440 10493 m
(Palatino-Roman02400240) getfont (Wacco ) s 0.360 nx sp (generates ) s 0.380 nx sp
(an ) s sp (appropriate ) s sp (temporary ) s 0.360 nx sp (variable ) s 0.380 nx sp (if ) s
sp (and ) s sp (only ) s 0.360 nx sp (if ) s 0.380 nx sp (it ) s sp (is ) s sp (used ) s
0.360 nx sp (by ) s 0.380 nx sp (referring ) s sp (to ) s sp (a ) s 0.360 nx sp 10781 ss
1442 10781 m (Palatino-Roman02400240) getfont (") s (Courier02400240) getfont ($$) s
(Palatino-Roman02400240) getfont (" ) s 25.120 nx sp (inside ) s 25.140 nx sp (some ) s
sp (code ) s 25.120 nx sp (for ) s 25.140 nx sp (that ) s sp (rule. ) s 25.120 nx sp ( ) s
25.140 nx sp (Thus ) s sp (Palatino-Italic02400240) getfont (parenexpr) s
(Palatino-Roman02400240) getfont ( ) s 25.120 nx sp (above ) s 25.140 nx sp (will ) s
sp (have ) s 25.120 nx sp (an ) s 25.140 nx sp (in/out ) s sp (argument ) s 25.120 nx sp
11069 ss 1442 11069 m (Palatino-Roman02400240) getfont (defined ) s -6.440 nx sp
(for ) s sp (it. ) s sp ( ) s sp (If ) s -6.460 nx sp (there ) s -6.440 nx sp (were ) s sp (no ) s
sp (code ) s -6.460 nx sp (in ) s -6.440 nx sp (Courier02400240) getfont ({}) s
(Palatino-Roman02400240) getfont (, ) s sp (then ) s sp
(Palatino-Italic02400240) getfont (parenexpr) s (Palatino-Roman02400240) getfont
( ) s sp (wouldn't ) s -6.460 nx sp (be ) s -6.440 nx sp (passed ) s sp (anything ) s sp (at ) s
-6.460 nx sp (all.) s 11397 ss 1440 11397 m (Palatino-Roman02400240) getfont
11725 ss 1440 11725 m (Palatino-Roman02400240) getfont
(AvantGarde-Demi02800280) getfont 12101 ss 1440 12101 m
(AvantGarde-Demi02800280) getfont (Types) s (Palatino-Roman02400240) getfont
12429 ss 1440 12429 m (Palatino-Roman02400240) getfont 12757 ss 1440 12757 m
(Palatino-Roman02400240) getfont (Actually, ) s 0.500 nx sp (The ) s sp
(Palatino-Italic02400240) getfont (TYPE) s (Palatino-Roman02400240) getfont ( ) s
sp (specifier ) s sp (of ) s sp (a ) s sp (non-terminal ) s sp (may ) s sp (actually ) s sp (be ) s
sp (a ) s sp (lot ) s sp (more ) s sp (complicated ) s sp (than ) s sp 13045 ss 1442 13045 m
(Palatino-Roman02400240) getfont (just a simple type:) s 13373 ss 1440 13373 m
(Palatino-Roman02400240) getfont (Courier02400240) getfont 13701 ss
1440 13701 m (Courier02400240) getfont 720.000 nx sp (example <double d; int i, j> : ... { $$.d = 0.0; $$.i = 34; }) s
(Palatino-Roman02400240) getfont 14029 ss 1440 14029 m
(Palatino-Roman02400240) getfont 14357 ss 1440 14357 m
(Palatino-Roman02400240) getfont (In ) s 19.240 nx sp (this ) s 19.260 nx sp (case, ) s
19.240 nx sp (wacco ) s 19.260 nx sp (creates ) s 19.240 nx sp (a ) s 19.260 nx sp (struct ) s
19.240 nx sp (for ) s 19.260 nx sp (this ) s 19.240 nx sp (non-terminal ) s
19.260 nx sp (instead ) s 19.240 nx sp (of ) s 19.260 nx sp (a ) s 19.240 nx sp (simple ) s
19.260 nx sp (variable. ) s 19.240 nx sp ( ) s 19.260 nx sp (The ) s 19.240 nx sp
14645 ss 1442 14645 m (Palatino-Roman02400240) getfont (contents ) s
10.460 nx sp (of ) s 10.480 nx sp (the ) s 10.460 nx sp ( ) s 10.480 nx sp
(Courier02400240) getfont ("<>) s (Palatino-Roman02400240) getfont (" ) s
10.460 nx sp (are ) s 10.480 nx sp (put ) s 10.460 nx sp (into ) s 10.480 nx sp (this ) s
10.460 nx sp (struct. ) s 10.480 nx sp ( ) s 10.460 nx sp (This ) s 10.480 nx sp (allows ) s
10.460 nx sp (passing ) s 10.480 nx sp (more ) s 10.460 nx sp (information ) s
10.480 nx sp (in ) s sp (and ) s 10.460 nx sp showpage vm_state restore
X
X
save /vm_state E def [1 0 0 -1 0 0] concat 0.050000 0.050000 SC .5 SLW
0 -15840 TR 0 RO
0 0 0 15840 12240 15840 12240 0 pageboundary clip
userdict /#copies 1 put statusdict /manualfeed false put 1253 ss 1442 1253 m
(Palatino-Roman02400240) getfont (out ) s 1.000 nx sp (of ) s sp (a ) s sp (non-terminal ) s
sp (without ) s sp (having ) s sp (to ) s sp (create ) s sp (a ) s sp (dummy ) s sp
(Courier02400240) getfont (struct) s (Palatino-Roman02400240) getfont ( ) s sp (by ) s
sp (hand. ) s sp ( ) s sp (It ) s sp (is ) s sp (also ) s sp (passed ) s sp 1541 ss 1442 1541 m
(Palatino-Roman02400240) getfont (to the non-terminal function by reference rather than copying, and thus is very efficient.) s
1869 ss 1440 1869 m (Palatino-Roman02400240) getfont
(Courier02400240) getfont 2197 ss 1440 2197 m (Courier02400240) getfont
720.000 nx sp (expr <int left, right> :  ...  ;) s 2525 ss 1440 2525 m
(Courier02400240) getfont sp (example : expr ';' { $$ = $expr.left + $expr.right } ;) s
(Palatino-Roman02400240) getfont 2853 ss 1440 2853 m
(Palatino-Roman02400240) getfont 3181 ss 1440 3181 m
(Palatino-Roman02400240) getfont (Note ) s -5.140 nx sp (that ) s -5.160 nx sp (all ) s
sp (exported ) s -5.140 nx sp (non-terminals ) s -5.160 nx sp
(Palatino-Bold02400240) getfont (must) s (Palatino-Roman02400240) getfont ( ) s sp
(have ) s -5.140 nx sp (simple ) s -5.160 nx sp (types, ) s sp (to ) s -5.140 nx sp (avoid ) s
-5.160 nx sp (bogus ) s sp (structure ) s sp (nam-) s 3469 ss 1442 3469 m
(Palatino-Roman02400240) getfont (ing ) s 22.140 nx sp (conventions. ) s sp ( ) s sp (If ) s
sp (you ) s sp (must ) s sp (have ) s 22.160 nx sp (a ) s 22.140 nx sp (complicated ) s sp (type ) s
sp (returned ) s sp (from ) s sp (a ) s sp (start-symbol, ) s 22.160 nx sp (you ) s
22.140 nx sp 3757 ss 1442 3757 m (Palatino-Roman02400240) getfont (s) s
0.740 nx sp (h) s 0.760 nx sp (o) s 0.740 nx sp (u) s 0.760 nx sp (l) s 0.740 nx sp (d ) s
30.000 nx sp (c) s 0.760 nx sp (r) s 0.740 nx sp (e) s 0.760 nx sp (a) s 0.740 nx sp (t) s
0.760 nx sp (e ) s 30.000 nx sp (a ) s sp (s) s 0.740 nx sp (p) s 0.760 nx sp (e) s
0.740 nx sp (c) s 0.760 nx sp (i) s 0.740 nx sp (a) s 0.760 nx sp (l) s 0.740 nx sp (l) s
0.760 nx sp (y ) s 30.000 nx sp (n) s 0.740 nx sp (a) s 0.760 nx sp (m) s 0.740 nx sp (e) s
0.760 nx sp (d ) s 30.000 nx sp (Courier02400240) getfont (s) s 0.740 nx sp (t) s
0.760 nx sp (r) s 0.740 nx sp (u) s 0.760 nx sp (c) s 0.740 nx sp (t) s
(Palatino-Roman02400240) getfont ( ) s 30.000 nx sp (o) s 0.760 nx sp (r ) s
30.000 nx sp (Courier02400240) getfont (c) s 0.740 nx sp (l) s 0.760 nx sp (a) s
0.740 nx sp (s) s 0.760 nx sp (s) s (Palatino-Roman02400240) getfont ( ) s
30.000 nx sp (a) s 0.740 nx sp (n) s 0.760 nx sp (d ) s 30.000 nx sp (u) s 0.740 nx sp (s) s
0.760 nx sp (e ) s 30.000 nx sp (i) s 0.740 nx sp (t ) s 30.000 nx sp (i) s 0.760 nx sp (n) s
0.740 nx sp (s) s 0.760 nx sp (t) s 0.740 nx sp (e) s 0.760 nx sp (a) s 0.740 nx sp (d) s
0.760 nx sp (. ) s 30.000 nx sp (\() s 0.740 nx sp (m) s 0.760 nx sp (o) s 0.740 nx sp (r) s
0.760 nx sp (e ) s 30.000 nx sp (a) s 0.740 nx sp (b) s 0.760 nx sp (o) s 0.740 nx sp (u) s
0.760 nx sp (t ) s 30.000 nx sp (s) s 0.740 nx sp (t) s 0.760 nx sp (a) s 0.740 nx sp (r) s
0.760 nx sp (t ) s 30.000 nx sp 4045 ss 1442 4045 m
(Palatino-Roman02400240) getfont (symbols later\)) s 4373 ss 1440 4373 m
(Palatino-Roman02400240) getfont 4701 ss 1440 4701 m
(Palatino-Roman02400240) getfont (Also, ) s 16.500 nx sp (simple ) s sp (types ) s sp
(must ) s sp (not ) s sp (be ) s sp (named. ) s sp ( ) s sp (The ) s sp (following ) s sp (is ) s sp
(illegal ) s sp (as ) s sp (well ) s sp (as ) s sp (redundant, ) s sp (and ) s sp 4989 ss
1442 4989 m (Palatino-Roman02400240) getfont (kind of silly anyway:) s 5317 ss
1440 5317 m (Palatino-Roman02400240) getfont (Courier02400240) getfont
5645 ss 1440 5645 m (Courier02400240) getfont 720.000 nx sp (expr <int var> : ... ;) s
1152.000 nx sp (// ILLEGAL!!!) s (Palatino-Roman02400240) getfont 5973 ss
1440 5973 m (Palatino-Roman02400240) getfont 6301 ss 1440 6301 m
(Palatino-Roman02400240) getfont (AvantGarde-Demi02800280) getfont 6677 ss
1440 6677 m (AvantGarde-Demi02800280) getfont (Aliases) s
(Palatino-Roman02400240) getfont 7005 ss 1440 7005 m
(Palatino-Roman02400240) getfont 7333 ss 1440 7333 m
(Palatino-Roman02400240) getfont (If we have 2 ) s
(Palatino-Italic02400240) getfont (expr) s (Palatino-Roman02400240) getfont (s on the right, things get a little messier:) s
7661 ss 1440 7661 m (Palatino-Roman02400240) getfont
(Courier02400240) getfont 7989 ss 1440 7989 m (Courier02400240) getfont
720.000 nx sp (example: '\(' expr ',' expr '\)') s 8317 ss 1440 8317 m
(Courier02400240) getfont sp 1440.000 nx sp ({ $$ = $expr1 + $expr2; };) s
(Palatino-Roman02400240) getfont 8645 ss 1440 8645 m
(Palatino-Roman02400240) getfont (or) s (Courier02400240) getfont 8973 ss
1440 8973 m (Courier02400240) getfont 720.000 nx sp (example: '\(' expr=front ',' expr=back '\)') s
9301 ss 1440 9301 m (Courier02400240) getfont sp 1440.000 nx sp ({ $$ = $front + $back; };) s
(Palatino-Roman02400240) getfont 9629 ss 1440 9629 m
(Palatino-Roman02400240) getfont 9957 ss 1440 9957 m
(Palatino-Roman02400240) getfont (T) s 1.100 nx sp (h) s sp (e ) s 30.000 nx sp (s) s
1.100 nx sp (e) s sp (c) s sp (o) s sp (n) s sp (d ) s 30.000 nx sp (f) s 1.100 nx sp (o) s sp (r) s
sp (m ) s 30.000 nx sp (i) s 1.100 nx sp (n) s 1.120 nx sp (t) s 1.100 nx sp (r) s sp (o) s sp
(d) s sp (u) s sp (c) s sp (e) s sp (s ) s 30.000 nx sp (t) s 1.100 nx sp (h) s sp (e ) s
30.000 nx sp (a) s 1.100 nx sp (b) s sp (i) s 1.120 nx sp (l) s 1.100 nx sp (i) s sp (t) s sp (y ) s
30.000 nx sp (t) s 1.100 nx sp (o ) s 30.000 nx sp (n) s 1.100 nx sp (a) s sp (m) s sp (e ) s
30.000 nx sp (\() s 1.100 nx sp (a) s sp (l) s sp (i) s sp (a) s 1.120 nx sp (s) s 1.100 nx sp
(\) ) s 30.000 nx sp (o) s 1.100 nx sp (n) s sp (e ) s 30.000 nx sp (o) s 1.100 nx sp (f ) s
30.000 nx sp (t) s 1.100 nx sp (h) s sp (e ) s 30.000 nx sp (r) s 1.100 nx sp (i) s sp (g) s sp
(h) s sp (t) s sp (-) s 1.120 nx sp (h) s 1.100 nx sp (a) s sp (n) s sp (d ) s 30.000 nx sp (s) s
1.100 nx sp (i) s sp (d) s sp (e) s sp (') s sp (s ) s 30.000 nx sp (n) s 1.100 nx sp (o) s sp (n) s
1.120 nx sp (-) s 10245 ss 1442 10245 m (Palatino-Roman02400240) getfont (terminal ) s
29.880 nx sp (names! ) s sp ( ) s 29.900 nx sp (Here ) s 29.880 nx sp (we ) s
29.900 nx sp (name ) s 29.880 nx sp (Palatino-Italic02400240) getfont (expr1) s
(Palatino-Roman02400240) getfont ( ) s 29.900 nx sp (to ) s 29.880 nx sp (be ) s
29.900 nx sp (called ) s 29.880 nx sp (Palatino-Italic02400240) getfont (front) s
(Palatino-Roman02400240) getfont ( ) s sp (and ) s 29.900 nx sp
(Palatino-Italic02400240) getfont (expr2) s (Palatino-Roman02400240) getfont ( ) s
29.880 nx sp (to ) s 29.900 nx sp (be ) s 29.880 nx sp
(Palatino-Italic02400240) getfont (back) s (Palatino-Roman02400240) getfont ( ) s
29.900 nx sp (for ) s 29.880 nx sp (just ) s 29.900 nx sp (this ) s 29.880 nx sp
10533 ss 1442 10533 m (Palatino-Roman02400240) getfont (particular right-hand side.) s
10861 ss 1440 10861 m (Palatino-Roman02400240) getfont 11189 ss 1440 11189 m
(Palatino-Roman02400240) getfont (AvantGarde-Demi02800280) getfont 11565 ss
1440 11565 m (AvantGarde-Demi02800280) getfont (More actions) s
(Palatino-Roman02400240) getfont 11893 ss 1440 11893 m
(Palatino-Roman02400240) getfont 12221 ss 1440 12221 m
(Palatino-Roman02400240) getfont (S) s 1.360 nx sp (i) s sp (n) s 1.380 nx sp (c) s
1.360 nx sp (e ) s 30.000 nx sp (w) s 1.360 nx sp (a) s 1.380 nx sp (c) s 1.360 nx sp (c) s
sp (o ) s 30.000 nx sp (g) s 1.380 nx sp (e) s 1.360 nx sp (n) s sp (e) s 1.380 nx sp (r) s
1.360 nx sp (a) s sp (t) s 1.380 nx sp (e) s 1.360 nx sp (s ) s 30.000 nx sp (a ) s sp (C) s
1.360 nx sp (+) s 1.380 nx sp (+ ) s 30.000 nx sp (r) s 1.360 nx sp (e) s sp (c) s
1.380 nx sp (u) s 1.360 nx sp (r) s sp (s) s 1.380 nx sp (i) s 1.360 nx sp (v) s sp (e) s
1.380 nx sp (-) s 1.360 nx sp (d) s sp (e) s 1.380 nx sp (s) s 1.360 nx sp (c) s sp (e) s
1.380 nx sp (n) s 1.360 nx sp (t ) s 30.000 nx sp (p) s 1.360 nx sp (a) s 1.380 nx sp (r) s
1.360 nx sp (s) s sp (e) s 1.380 nx sp (r) s 1.360 nx sp (, ) s 30.000 nx sp (w) s
1.360 nx sp (e ) s 30.000 nx sp (c) s 1.380 nx sp (a) s 1.360 nx sp (n ) s 30.000 nx sp (d) s
1.360 nx sp (o ) s 30.000 nx sp (e) s 1.380 nx sp (v) s 1.360 nx sp (e) s sp (n ) s
30.000 nx sp (m) s 1.380 nx sp (o) s 1.360 nx sp (r) s sp (e ) s 30.000 nx sp (i) s
1.380 nx sp (n) s 1.360 nx sp (t) s sp (e) s 1.380 nx sp (r) s 1.360 nx sp (e) s sp (s) s
1.380 nx sp (t) s 1.360 nx sp (i) s sp (n) s 1.380 nx sp (g ) s 30.000 nx sp 12509 ss
1442 12509 m (Palatino-Roman02400240) getfont (things ) s -6.040 nx sp (on ) s
-6.060 nx sp (the ) s sp (right. ) s sp ( ) s -6.040 nx sp (Wacco ) s -6.060 nx sp (passes ) s
sp (the ) s sp (local ) s sp (vars ) s -6.040 nx sp (to ) s -6.060 nx sp (store ) s sp (return ) s
sp (values ) s -6.040 nx sp (by ) s -6.060 nx sp (reference. ) s sp ( ) s sp (Thus ) s sp (we ) s
-6.040 nx sp 12797 ss 1442 12797 m (Palatino-Roman02400240) getfont (can pass information into a rule as well as get stuff out of it.) s
13125 ss 1440 13125 m (Palatino-Roman02400240) getfont
(Courier02400240) getfont 13453 ss 1440 13453 m (Courier02400240) getfont
720.000 nx sp (example: { $expr = $$; } '\(' expr '\)' { $$ = $expr; };) s
(Palatino-Roman02400240) getfont 13781 ss 1440 13781 m
(Palatino-Roman02400240) getfont 14109 ss 1440 14109 m
(Palatino-Roman02400240) getfont (This ) s -6.720 nx sp (initializes ) s
-6.740 nx sp (the ) s sp (temp-var ) s -6.720 nx sp (used ) s -6.740 nx sp (to ) s sp (store ) s
-6.720 nx sp (the ) s -6.740 nx sp (return ) s sp (value ) s -6.720 nx sp (from ) s
-6.740 nx sp (Palatino-Italic02400240) getfont (expr) s
(Palatino-Roman02400240) getfont ( ) s sp (to ) s -6.720 nx sp (whatever ) s
-6.740 nx sp (was ) s sp (passed ) s -6.720 nx sp 14397 ss 1442 14397 m
(Palatino-Roman02400240) getfont (in ) s 8.880 nx sp (to ) s 8.900 nx sp
(Palatino-Italic02400240) getfont (example) s (Palatino-Roman02400240) getfont ( ) s
sp (then ) s 8.880 nx sp (passes ) s 8.900 nx sp (it ) s sp (to ) s sp
(Palatino-Italic02400240) getfont (expr.) s (Palatino-Roman02400240) getfont ( ) s
8.880 nx sp ( ) s 8.900 nx sp (If ) s sp (a ) s sp (non-terminal ) s 8.880 nx sp (never ) s
8.900 nx sp (uses ) s sp (") s (Courier02400240) getfont ($$) s
(Palatino-Roman02400240) getfont (", ) s sp (then ) s 8.880 nx sp (it ) s 8.900 nx sp
(is ) s sp (assumed ) s sp (to ) s 8.880 nx sp 14685 ss 1442 14685 m
(Palatino-Roman02400240) getfont (not return anything, and no temp-var will be declared nor passed into it.) s
showpage vm_state restore
X
X
save /vm_state E def [1 0 0 -1 0 0] concat 0.050000 0.050000 SC .5 SLW
0 -15840 TR 0 RO
0 0 0 15840 12240 15840 12240 0 pageboundary clip
userdict /#copies 1 put statusdict /manualfeed false put 1253 ss 1440 1253 m
(Palatino-Roman02400240) getfont 1581 ss 1440 1581 m
(Palatino-Roman02400240) getfont (Other things that one can do:) s 1909 ss
1440 1909 m (Palatino-Roman02400240) getfont (Courier02400240) getfont
2237 ss 1440 2237 m (Courier02400240) getfont 720.000 nx sp (example: '\(' { int v = 2; } expr '\)' { v = $expr; };) s
(Palatino-Roman02400240) getfont (Palatino-Roman02400240) getfont 2565 ss
1440 2565 m (Palatino-Roman02400240) getfont 2893 ss 1440 2893 m
(Palatino-Roman02400240) getfont (and ) s 7.560 nx sp (create ) s 7.580 nx sp (temp ) s
7.560 nx sp (C++ ) s 7.580 nx sp (vars ) s 7.560 nx sp (anywhere ) s 7.580 nx sp (you ) s
sp (want. ) s 7.560 nx sp ( ) s 7.580 nx sp (Wacco ) s 7.560 nx sp (carefully ) s
7.580 nx sp (avoids ) s 7.560 nx sp (putting ) s 7.580 nx sp (out ) s sp (unnec-) s
3181 ss 1442 3181 m (Palatino-Roman02400240) getfont (essary sets of blocks in the output parser file.) s
3509 ss 1440 3509 m (Palatino-Roman02400240) getfont 3837 ss 1440 3837 m
(Palatino-Roman02400240) getfont (To ) s 5.060 nx sp (generate ) s 5.080 nx sp (incomplete ) s
5.060 nx sp (blocks, ) s 5.080 nx sp (and ) s 5.060 nx sp (allow ) s 5.080 nx sp (a ) s
sp (wierd ) s 5.060 nx sp (sort ) s 5.080 nx sp (of ) s 5.060 nx sp (free-form ) s
5.080 nx sp (grammar, ) s 5.060 nx sp (the ) s 5.080 nx sp
(Courier02400240) getfont (%{%}) s (Palatino-Roman02400240) getfont ( ) s sp (for-) s
4125 ss 1442 4125 m (Palatino-Roman02400240) getfont (mat may be used wherever a {} is normally used. This allows creating incomplete blocks:) s
4453 ss 1440 4453 m (Palatino-Roman02400240) getfont
(Courier02400240) getfont 4781 ss 1440 4781 m (Courier02400240) getfont
720.000 nx sp (example: '\(' %{ if \(somevar\) { %} expr '\)' %{ } %} ;) s
(Palatino-Roman02400240) getfont 5109 ss 1440 5109 m
(Palatino-Roman02400240) getfont 5437 ss 1440 5437 m
(Palatino-Roman02400240) getfont (Curly-braces ) s 10.680 nx sp (are ) s
10.700 nx sp (not ) s 10.680 nx sp (counted ) s 10.700 nx sp (within ) s sp
(Courier02400240) getfont (%{%}) s (Palatino-Roman02400240) getfont ( ) s
10.680 nx sp (blocks, ) s 10.700 nx sp (and ) s 10.680 nx sp
(Courier02400240) getfont (%{%}) s (Palatino-Roman02400240) getfont ( ) s
10.700 nx sp (blocks ) s sp (may ) s 10.680 nx sp (be ) s 10.700 nx sp (used ) s sp (wherever ) s
10.680 nx sp (Courier02400240) getfont 5725 ss 1442 5725 m
(Courier02400240) getfont ({}) s (Palatino-Roman02400240) getfont ( blocks are allowed.) s
6053 ss 1440 6053 m (Palatino-Roman02400240) getfont 6381 ss 1440 6381 m
(Palatino-Roman02400240) getfont (AvantGarde-Demi02800280) getfont 6757 ss
1440 6757 m (AvantGarde-Demi02800280) getfont (Empty symbol) s
(Palatino-Roman02400240) getfont 7085 ss 1440 7085 m
(Palatino-Roman02400240) getfont 7413 ss 1440 7413 m
(Palatino-Roman02400240) getfont (The ) s 2.040 nx sp (empty ) s 2.060 nx sp (rule ) s
sp (may ) s sp (not ) s sp (be ) s sp (implicitly ) s sp (specified ) s sp (is ) s sp (in ) s sp (yacc, ) s
sp (but ) s sp (must ) s sp (be ) s sp (defined ) s sp (with ) s sp (the ) s sp (spe-) s 7701 ss
1442 7701 m (Palatino-Roman02400240) getfont (cial ") s
(Courier02400240) getfont ([]) s (Palatino-Roman02400240) getfont (" symbol:) s
8029 ss 1440 8029 m (Palatino-Roman02400240) getfont
(Courier02400240) getfont 8357 ss 1440 8357 m (Courier02400240) getfont
720.000 nx sp (null: [] ;) s 8685 ss 1440 8685 m (Courier02400240) getfont sp (expr: '\(' expr '\)' | [] ;) s
(Palatino-Roman02400240) getfont 9013 ss 1440 9013 m
(Palatino-Roman02400240) getfont 9341 ss 1440 9341 m
(Palatino-Roman02400240) getfont (An empty statement is an error in wacco to help protect against typos and other mistakes.) s
9669 ss 1440 9669 m (Palatino-Roman02400240) getfont 9997 ss 1440 9997 m
(Palatino-Roman02400240) getfont (AvantGarde-Demi02800280) getfont 10373 ss
1440 10373 m (AvantGarde-Demi02800280) getfont (Parenthesized expressions) s
(Palatino-Roman02400240) getfont 10701 ss 1440 10701 m
(Palatino-Roman02400240) getfont 11029 ss 1440 11029 m
(Palatino-Roman02400240) getfont (Right-hand ) s 10.060 nx sp (sides ) s
10.080 nx sp (may ) s sp (have ) s sp (parentheses ) s sp (for ) s sp (grouping. ) s
10.060 nx sp ( ) s 10.080 nx sp (Basically, ) s sp (a ) s sp (function ) s sp (must ) s sp (be ) s
sp (gener-) s 11317 ss 1442 11317 m (Palatino-Roman02400240) getfont (ated for every parenthesized expression to maintain the parsing semantics:) s
11645 ss 1440 11645 m (Palatino-Roman02400240) getfont
(Courier02400240) getfont 11973 ss 1440 11973 m (Courier02400240) getfont
720.000 nx sp (value: \(ID | INT\) | [];) s (Palatino-Roman02400240) getfont
12301 ss 1440 12301 m (Palatino-Roman02400240) getfont 12629 ss 1440 12629 m
(Palatino-Roman02400240) getfont (is the equivalent of:) s 12957 ss 1440 12957 m
(Palatino-Roman02400240) getfont (Courier02400240) getfont 13285 ss
1440 13285 m (Courier02400240) getfont sp (value: v1 | [];) s 13613 ss
1440 13613 m (Courier02400240) getfont sp (v1: ID | INT;) s
(Palatino-Roman02400240) getfont 13941 ss 1440 13941 m
(Palatino-Roman02400240) getfont 14269 ss 1440 14269 m
(Palatino-Roman02400240) getfont (J) s 1.940 nx sp (u) s sp (s) s sp (t ) s 30.000 nx sp
(l) s 1.940 nx sp (i) s sp (k) s sp (e ) s 30.000 nx sp (e) s 1.940 nx sp (v) s sp (e) s sp (r) s sp
(y ) s 30.000 nx sp (o) s 1.940 nx sp (t) s sp (h) s sp (e) s sp (r ) s 30.000 nx sp (n) s
1.940 nx sp (o) s sp (n) s sp (-) s sp (t) s sp (e) s sp (r) s sp (m) s sp (i) s sp (n) s sp (a) s sp (l) s sp
(, ) s 30.000 nx sp (p) s 1.940 nx sp (a) s sp (r) s sp (e) s sp (n) s sp (t) s sp (h) s sp (e) s sp (s) s
sp (i) s sp (z) s sp (e) s sp (d ) s 30.000 nx sp (e) s 1.940 nx sp (x) s sp (p) s sp (r) s sp (e) s sp
(s) s sp (s) s sp (i) s sp (o) s sp (n) s sp (s ) s 30.000 nx sp (h) s 1.940 nx sp (a) s sp (v) s sp (e ) s
30.000 nx sp (r) s 1.940 nx sp (e) s sp (t) s sp (u) s sp (r) s sp (n ) s 30.000 nx sp (v) s
1.940 nx sp (a) s sp (l) s sp (u) s sp (e) s sp (s) s sp (, ) s 30.000 nx sp (t) s 1.940 nx sp (y) s
sp (p) s sp (e) s sp (s) s 1.960 nx sp (, ) s 30.000 nx sp 14557 ss 1442 14557 m
(Palatino-Roman02400240) getfont (aliases, ) s 4.320 nx sp (and ) s 4.340 nx sp (may ) s
sp (be ) s 4.320 nx sp (referred ) s 4.340 nx sp (to ) s sp (in ) s 4.320 nx sp (other ) s
4.340 nx sp (parts ) s sp (of ) s 4.320 nx sp (the ) s 4.340 nx sp (right-hand ) s sp (side. ) s
4.320 nx sp ( ) s 4.340 nx sp (The ) s sp (default ) s 4.320 nx sp (type ) s 4.340 nx sp
(is ) s sp (the ) s 4.320 nx sp showpage vm_state restore
X
X
save /vm_state E def [1 0 0 -1 0 0] concat 0.050000 0.050000 SC .5 SLW
0 -15840 TR 0 RO
0 0 0 15840 12240 15840 12240 0 pageboundary clip
userdict /#copies 1 put statusdict /manualfeed false put 1253 ss 1442 1253 m
(Palatino-Roman02400240) getfont (type of the enclosing parens or left-hand side for the outer-most parens:) s
1581 ss 1440 1581 m (Palatino-Roman02400240) getfont
(Courier02400240) getfont 1909 ss 1440 1909 m (Courier02400240) getfont
720.000 nx sp (example: \(<long> ID | INT\) { $$ = $_; };) s
(Palatino-Roman02400240) getfont 2237 ss 1440 2237 m
(Palatino-Roman02400240) getfont 2565 ss 1440 2565 m
(Palatino-Roman02400240) getfont (Multiple ) s 5.100 nx sp (sets ) s sp (of ) s sp (parens ) s
5.120 nx sp (on ) s 5.100 nx sp (the ) s sp (right ) s sp (may ) s 5.120 nx sp (be ) s
5.100 nx sp (referred ) s sp (to ) s sp (as) s (Courier02400240) getfont ( ) s
5.120 nx sp ($_1) s (Palatino-Roman02400240) getfont (,) s
(Courier02400240) getfont ( ) s 5.100 nx sp ($_2) s
(Palatino-Roman02400240) getfont (, ) s sp (and ) s sp (so ) s 5.120 nx sp (on. ) s
5.100 nx sp ( ) s sp (They ) s 5.120 nx sp (may ) s 5.100 nx sp 2853 ss 1442 2853 m
(Palatino-Roman02400240) getfont (be named as well:) s 3181 ss 1440 3181 m
(Palatino-Roman02400240) getfont (Courier02400240) getfont 3509 ss
1440 3509 m (Courier02400240) getfont 720.000 nx sp (example<float>: \(ID | FLOAT\)=num { $$ = $num; };) s
(Palatino-Roman02400240) getfont 3837 ss 1440 3837 m
(Palatino-Roman02400240) getfont 4165 ss 1440 4165 m
(Palatino-Roman02400240) getfont (Here the parenthesized expression ) s
(Palatino-Italic02400240) getfont (num) s (Palatino-Roman02400240) getfont ( inherits the type ) s
(Courier02400240) getfont (float) s (Palatino-Roman02400240) getfont ( from ) s
(Palatino-Italic02400240) getfont (example) s (Palatino-Roman02400240) getfont (.) s
4493 ss 1440 4493 m (Palatino-Roman02400240) getfont 4821 ss 1440 4821 m
(Palatino-Roman02400240) getfont (Since ) s 8.520 nx sp (the ) s 8.540 nx sp (left-hand ) s
sp (side ) s 8.520 nx sp (may ) s 8.540 nx sp (be ) s sp (used ) s 8.520 nx sp (on ) s
8.540 nx sp (the ) s sp (right ) s 8.520 nx sp (for ) s 8.540 nx sp (recursive ) s sp (functions, ) s
8.520 nx sp (so ) s 8.540 nx sp (may ) s sp (parenthe-) s 5109 ss 1442 5109 m
(Palatino-Roman02400240) getfont (sized expressions.  The names just get a little strange.) s
5437 ss 1440 5437 m (Palatino-Roman02400240) getfont
(Courier02400240) getfont 5765 ss 1440 5765 m (Courier02400240) getfont
720.000 nx sp (strange: \(ID \(OP # #1 #2 #3 #* | []\) | []\);) s
(Palatino-Roman02400240) getfont 6093 ss 1440 6093 m
(Palatino-Roman02400240) getfont 6421 ss 1440 6421 m
(Palatino-Roman02400240) getfont (The ) s 13.120 nx sp (inner ) s sp (") s
(Courier02400240) getfont (#) s (Palatino-Roman02400240) getfont (" ) s sp (refers ) s
13.140 nx sp (to ) s 13.120 nx sp (the ) s sp (inner-most ) s sp (set ) s 13.140 nx sp (of ) s
13.120 nx sp (parens ) s sp (enclosing ) s sp (the ) s 13.140 nx sp (") s
(Courier02400240) getfont (OP...) s (Palatino-Roman02400240) getfont (". ) s
13.120 nx sp ( ) s sp (The ) s sp (strings ) s 13.140 nx sp (") s
(Courier02400240) getfont (#) s (Palatino-Roman02400240) getfont (" ) s
13.120 nx sp 6709 ss 1442 6709 m (Palatino-Roman02400240) getfont (and ) s
21.100 nx sp (") s (Courier02400240) getfont (#1) s
(Palatino-Roman02400240) getfont (" ) s 21.120 nx sp (are ) s 21.100 nx sp (equivalent ) s
21.120 nx sp (and ) s 21.100 nx sp (refer ) s 21.120 nx sp (to ) s 21.100 nx sp (this ) s
21.120 nx sp (inner ) s sp (most ) s 21.100 nx sp (set ) s 21.120 nx sp (of ) s
21.100 nx sp (parens. ) s 21.120 nx sp ( ) s 21.100 nx sp (") s
(Courier02400240) getfont (#2) s (Palatino-Roman02400240) getfont (" ) s
21.120 nx sp (refers ) s 21.100 nx sp (to ) s 21.120 nx sp (the ) s sp (next ) s
21.100 nx sp 6997 ss 1442 6997 m (Palatino-Roman02400240) getfont (outer ) s
-9.700 nx sp (parens ) s sp (starting ) s sp (the ) s -9.720 nx sp (") s
(Courier02400240) getfont (ID...) s (Palatino-Roman02400240) getfont (". ) s
-9.700 nx sp ( ) s sp (") s (Courier02400240) getfont (#3) s
(Palatino-Roman02400240) getfont (" ) s -9.720 nx sp (and ) s -9.700 nx sp (") s
(Courier02400240) getfont (#*) s (Palatino-Roman02400240) getfont (" ) s sp (refer ) s
sp (the ) s -9.720 nx sp (the ) s -9.700 nx sp (name ) s sp (of ) s -9.720 nx sp (the ) s
-9.700 nx sp (left-hand ) s sp (side, ) s -9.720 nx sp (just ) s -9.700 nx sp 7285 ss
1442 7285 m (Palatino-Roman02400240) getfont (for ) s 14.060 nx sp (completeness. ) s
sp ( ) s 14.080 nx sp (These ) s 14.060 nx sp (can ) s sp (be ) s 14.080 nx sp (viewed ) s
14.060 nx sp (as ) s sp (the ) s 14.080 nx sp (outermost ) s 14.060 nx sp ("parens" ) s
sp (in ) s 14.080 nx sp (the ) s 14.060 nx sp (expression. ) s sp ( ) s 14.080 nx sp (Ugly ) s
14.060 nx sp 7573 ss 1442 7573 m (Palatino-Roman02400240) getfont (but sometimes useful.) s
7901 ss 1440 7901 m (Palatino-Roman02400240) getfont 8229 ss 1440 8229 m
(Palatino-Roman02400240) getfont (AvantGarde-Demi02800280) getfont 8605 ss
1440 8605 m (AvantGarde-Demi02800280) getfont (Special tokens) s
(Palatino-Roman02400240) getfont 8933 ss 1440 8933 m
(Palatino-Roman02400240) getfont 9261 ss 1440 9261 m
(Palatino-Roman02400240) getfont (Other ) s 8.060 nx sp (things ) s 8.080 nx sp (defined ) s
8.060 nx sp (in ) s 8.080 nx sp (Palatino-Italic02400240) getfont (tokens.h) s
(Palatino-Roman02400240) getfont ( ) s 8.060 nx sp (include ) s 8.080 nx sp (the ) s
sp (end-of-input ) s 8.060 nx sp (token ) s 8.080 nx sp
(Palatino-Italic02400240) getfont (EOI) s (Palatino-Roman02400240) getfont ( ) s
8.060 nx sp (which ) s 8.080 nx sp (has ) s 8.060 nx sp (value ) s 8.080 nx sp (0, ) s sp
(and ) s 8.060 nx sp 9549 ss 1442 9549 m (Palatino-Roman02400240) getfont (the ) s
1.840 nx sp (constants ) s 1.860 nx sp (Palatino-Italic02400240) getfont (RETOK) s
(Palatino-Roman02400240) getfont ( ) s sp (and ) s sp
(Palatino-Italic02400240) getfont (RETERR,) s (Palatino-Roman02400240) getfont ( ) s
sp (for ) s sp (appropriate ) s sp (return ) s 1.840 nx sp (values. ) s 1.860 nx sp ( ) s sp
(These ) s sp (have ) s sp (the ) s sp (values ) s sp (of ) s 1.840 nx sp
(Palatino-Italic02400240) getfont 9837 ss 1442 9837 m
(Palatino-Italic02400240) getfont (TRUE) s (Palatino-Roman02400240) getfont ( ) s
-1.040 nx sp (\(1\) ) s -1.060 nx sp (and ) s sp (Palatino-Italic02400240) getfont
(FALSE) s (Palatino-Roman02400240) getfont ( ) s sp (\(0\) ) s -1.040 nx sp (respectively. ) s
-1.060 nx sp ( ) s sp (These ) s sp (may ) s sp (be ) s -1.040 nx sp (used ) s -1.060 nx sp
(in ) s sp (the ) s sp (right-hand ) s -1.040 nx sp (side ) s -1.060 nx sp (of ) s sp (rules ) s
sp (if ) s sp (it ) s -1.040 nx sp 10125 ss 1442 10125 m
(Palatino-Roman02400240) getfont (is determined that further parsing of rules is un-necessary.) s
10453 ss 1440 10453 m (Palatino-Roman02400240) getfont
(Courier02400240) getfont 10781 ss 1440 10781 m (Courier02400240) getfont
720.000 nx sp (parenexpr: LPAREN expr) s 11109 ss 1440 11109 m
(Courier02400240) getfont sp 1440.000 nx sp ({ if \($expr == BOGUS\) return RETERR; } RPAREN;) s
(Palatino-Roman02400240) getfont 11437 ss 1440 11437 m
(Palatino-Roman02400240) getfont 11765 ss 1440 11765 m
(Palatino-Roman02400240) getfont (The ) s -4.340 nx sp (return-code ) s
-4.360 nx sp (from ) s sp (various ) s sp (rules ) s sp (is ) s sp (always ) s sp (available ) s
-4.340 nx sp (as ) s -4.360 nx sp (the ) s sp (magic ) s sp (string ) s sp (") s
(Courier02400240) getfont ($?) s (Palatino-Roman02400240) getfont (" ) s sp (directly ) s
sp (after ) s -4.340 nx sp 12053 ss 1442 12053 m
(Palatino-Roman02400240) getfont (that particular rule is called:) s 12381 ss
1440 12381 m (Palatino-Roman02400240) getfont (Courier02400240) getfont
12709 ss 1440 12709 m (Courier02400240) getfont 720.000 nx sp (parenexpr: LPAREN expr) s
13037 ss 1440 13037 m (Courier02400240) getfont sp 1440.000 nx sp ({ if \($? != RETOK\) return RETERR; } RPAREN;) s
(Palatino-Roman02400240) getfont 13365 ss 1440 13365 m
(Palatino-Roman02400240) getfont 13693 ss 1440 13693 m
(Palatino-Roman02400240) getfont (The ) s -5.100 nx sp (return ) s -5.120 nx sp (code ) s
sp (is ) s sp (overwritten ) s sp (with ) s sp (each ) s sp (call ) s sp (to ) s -5.100 nx sp (a ) s
-5.120 nx sp (non-terminal ) s sp (on ) s sp (the ) s sp (right-hand ) s sp (side, ) s sp (so ) s
sp (if ) s sp (a ) s -5.100 nx sp 13981 ss 1442 13981 m
(Palatino-Roman02400240) getfont (previous ) s 6.920 nx sp (return ) s sp (value ) s
6.940 nx sp (is ) s 6.920 nx sp (needed, ) s 6.940 nx sp (you ) s 6.920 nx sp (must ) s
6.940 nx sp (save ) s 6.920 nx sp (it ) s sp (in ) s 6.940 nx sp (some ) s 6.920 nx sp (variable ) s
6.940 nx sp (yourself. ) s 6.920 nx sp (The ) s 6.940 nx sp (generated ) s 6.920 nx sp
14269 ss 1442 14269 m (Palatino-Roman02400240) getfont (parser ) s 19.420 nx sp
(code ) s sp (does ) s 19.440 nx sp (not ) s 19.420 nx sp (look ) s 19.440 nx sp (at ) s
19.420 nx sp (the ) s 19.440 nx sp (actual ) s 19.420 nx sp (return ) s sp (value ) s
19.440 nx sp (of ) s 19.420 nx sp (non-terminals ) s 19.440 nx sp (\(functions\), ) s
19.420 nx sp (so ) s 19.440 nx sp (other ) s 19.420 nx sp 14557 ss 1442 14557 m
(Palatino-Roman02400240) getfont (return values may be used if desired.) s
showpage vm_state restore
X
X
save /vm_state E def [1 0 0 -1 0 0] concat 0.050000 0.050000 SC .5 SLW
0 -15840 TR 0 RO
0 0 0 15840 12240 15840 12240 0 pageboundary clip
userdict /#copies 1 put statusdict /manualfeed false put 1253 ss 1440 1253 m
(Palatino-Roman02400240) getfont (AvantGarde-Demi02800280) getfont 1629 ss
1440 1629 m (AvantGarde-Demi02800280) getfont (Start symbols) s
(Palatino-Roman02400240) getfont 1957 ss 1440 1957 m
(Palatino-Roman02400240) getfont 2285 ss 1440 2285 m
(Palatino-Roman02400240) getfont (By ) s 27.040 nx sp (default, ) s 27.060 nx sp (the ) s
sp (first ) s sp (rule ) s sp (in ) s sp (the ) s sp (grammar ) s sp (is ) s sp (considered ) s sp
(to ) s sp (be ) s sp (the ) s sp (start ) s sp (symbol. ) s sp ( ) s sp (Instead ) s sp (of ) s
27.040 nx sp 2573 ss 1442 2573 m (Palatino-Roman02400240) getfont (calling ) s
-6.040 nx sp (Courier02400240) getfont (yyparse\(\)) s
(Palatino-Roman02400240) getfont ( ) s -6.060 nx sp (to ) s sp (initiate ) s sp (the ) s
sp (parse, ) s sp (the ) s sp (function ) s sp (to ) s sp (call ) s sp (is ) s sp (the ) s sp (name ) s
sp (of ) s sp (the ) s sp (left-hand ) s sp (Palatino-Italic02400240) getfont (ID) s
(Palatino-Roman02400240) getfont ( ) s sp (in ) s -6.040 nx sp 2861 ss 1442 2861 m
(Palatino-Roman02400240) getfont (the ) s -5.700 nx sp (first ) s sp (rule. ) s sp ( ) s
-5.720 nx sp (It ) s -5.700 nx sp (is ) s sp (called ) s -5.720 nx sp (with ) s
-5.700 nx sp (no ) s sp (arguments. ) s sp ( ) s -5.720 nx sp (It ) s -5.700 nx sp (returns ) s
sp (either ) s -5.720 nx sp (Palatino-Italic02400240) getfont (RETOK) s
(Palatino-Roman02400240) getfont ( ) s -5.700 nx sp (or ) s sp
(Palatino-Italic02400240) getfont (RETERR) s (Palatino-Roman02400240) getfont ( ) s
-5.720 nx sp (depending ) s -5.700 nx sp 3149 ss 1442 3149 m
(Palatino-Roman02400240) getfont (on whether the parse succeeded or not.) s
3477 ss 1440 3477 m (Palatino-Roman02400240) getfont
(Courier02400240) getfont 3805 ss 1440 3805 m (Courier02400240) getfont
720.000 nx sp (firstsymbol: ... ;) s 4133 ss 1440 4133 m
(Courier02400240) getfont sp (...) s 4461 ss 1440 4461 m
(Courier02400240) getfont 4789 ss 1440 4789 m (Courier02400240) getfont sp (main\(\)) s
5117 ss 1440 5117 m (Courier02400240) getfont sp ({) s 5445 ss 1440 5445 m
(Courier02400240) getfont sp 1440.000 nx sp (if \(firstsymbol\(\) == RETOK\)) s
5773 ss 1440 5773 m (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp sp
(return 0;) s 6101 ss 1440 6101 m (Courier02400240) getfont 720.000 nx sp
1440.000 nx sp (return -1;) s 6429 ss 1440 6429 m (Courier02400240) getfont
720.000 nx sp (}) s (Palatino-Roman02400240) getfont 6757 ss 1440 6757 m
(Palatino-Roman02400240) getfont 7085 ss 1440 7085 m
(Palatino-Roman02400240) getfont (But ) s 1.520 nx sp (you ) s sp (don't ) s
1.540 nx sp (have ) s 1.520 nx sp (to ) s 1.540 nx sp (have ) s 1.520 nx sp (just ) s
1.540 nx sp (one ) s 1.520 nx sp (entry ) s 1.540 nx sp (point! ) s 1.520 nx sp ( ) s
1.540 nx sp (Adding ) s 1.520 nx sp (a ) s 1.540 nx sp (") s (Courier02400240) getfont
(%export) s (Palatino-Roman02400240) getfont (" ) s 1.520 nx sp (modifier ) s
1.540 nx sp (after ) s 1.520 nx sp (a ) s 1.540 nx sp (non-) s 7373 ss 1442 7373 m
(Palatino-Roman02400240) getfont (terminal ) s -8.700 nx sp (just ) s -8.720 nx sp
(before ) s sp (the ) s -8.700 nx sp (") s (Courier02400240) getfont (:) s
(Palatino-Roman02400240) getfont (" ) s -8.720 nx sp (causes ) s sp (that ) s sp (symbol ) s
-8.700 nx sp (to ) s -8.720 nx sp (become ) s sp (callable ) s -8.700 nx sp (from ) s
-8.720 nx sp (outside ) s sp (the ) s sp (grammar:) s 7701 ss 1440 7701 m
(Palatino-Roman02400240) getfont (Courier02400240) getfont 8029 ss
1440 8029 m (Courier02400240) getfont 720.000 nx sp (thing<type> %export :  ...  ;) s
8357 ss 1440 8357 m (Courier02400240) getfont
(Palatino-Roman02400240) getfont 8685 ss 1440 8685 m
(Palatino-Roman02400240) getfont (And in some another source file:) s
(Courier02400240) getfont 9013 ss 1440 9013 m (Courier02400240) getfont
9341 ss 1440 9341 m (Courier02400240) getfont sp (func\(\) { type var;  return thing\(var\); }) s
(Palatino-Roman02400240) getfont 9669 ss 1440 9669 m
(Palatino-Roman02400240) getfont 9997 ss 1440 9997 m
(Palatino-Roman02400240) getfont (The ) s 26.740 nx sp (first ) s 26.760 nx sp (non-terminal ) s
26.740 nx sp (in ) s 26.760 nx sp (the ) s 26.740 nx sp (grammar ) s 26.760 nx sp (is ) s
26.740 nx sp (automatically ) s 26.760 nx sp (exported ) s 26.740 nx sp (unless ) s
26.760 nx sp (Courier02400240) getfont (%export) s
(Palatino-Roman02400240) getfont ( ) s 26.740 nx sp (is ) s 26.760 nx sp (used ) s
26.740 nx sp 10285 ss 1442 10285 m (Palatino-Roman02400240) getfont (somewhere ) s
-10.460 nx sp (in ) s -10.480 nx sp (the ) s -10.460 nx sp (grammar. ) s -10.480 nx sp
( ) s -10.460 nx sp (Also, ) s -10.480 nx sp (notice ) s -10.460 nx sp (that ) s
-10.480 nx sp (if ) s -10.460 nx sp (a ) s -10.480 nx sp
(Palatino-Italic02400240) getfont (type) s (Palatino-Roman02400240) getfont ( ) s
-10.460 nx sp (is ) s -10.480 nx sp (defined ) s -10.460 nx sp (and ) s -10.480 nx sp
(used ) s -10.460 nx sp (for ) s -10.480 nx sp (a ) s sp (non-terminal, ) s -10.460 nx sp
10573 ss 1442 10573 m (Palatino-Roman02400240) getfont (that ) s
(Palatino-Italic02400240) getfont (type) s (Palatino-Roman02400240) getfont ( must be passed in by reference to that function.) s
10901 ss 1440 10901 m (Palatino-Roman02400240) getfont 11229 ss 1440 11229 m
(Palatino-Roman02400240) getfont (The ) s 7.320 nx sp (Courier02400240) getfont
(%export) s (Palatino-Roman02400240) getfont ( ) s 7.340 nx sp (feature ) s sp (lets ) s
7.320 nx sp (you ) s 7.340 nx sp (call ) s sp (several ) s 7.320 nx sp (non-terminals ) s
7.340 nx sp (in ) s sp (the ) s 7.320 nx sp (grammar. ) s 7.340 nx sp ( ) s sp (This ) s
7.320 nx sp (can ) s 7.340 nx sp (be ) s sp (used ) s 7.320 nx sp 11517 ss
1442 11517 m (Palatino-Roman02400240) getfont (to ) s 22.420 nx sp (export ) s sp (parts ) s
22.440 nx sp (of ) s 22.420 nx sp (a ) s 22.440 nx sp (grammar, ) s 22.420 nx sp (say ) s
22.440 nx sp (sub-expression ) s 22.420 nx sp (parsing, ) s sp (or ) s 22.440 nx sp (let ) s
22.420 nx sp (you ) s 22.440 nx sp (put ) s 22.420 nx sp (several ) s 22.440 nx sp (different ) s
22.420 nx sp 11805 ss 1442 11805 m (Palatino-Roman02400240) getfont (parsers ) s
-9.860 nx sp (into ) s sp (one ) s -9.880 nx sp (grammar ) s -9.860 nx sp (file. ) s sp ( ) s
-9.880 nx sp (All ) s -9.860 nx sp (exported ) s sp (non-terminals ) s -9.880 nx sp (are ) s
-9.860 nx sp (also ) s sp (listed ) s -9.880 nx sp (as ) s -9.860 nx sp (") s
(Courier02400240) getfont (extern) s (Palatino-Roman02400240) getfont ("s ) s sp (in ) s
-9.880 nx sp (the ) s -9.860 nx sp (Palatino-Italic02400240) getfont 12093 ss
1442 12093 m (Palatino-Italic02400240) getfont (tokens.h) s
(Palatino-Roman02400240) getfont ( header file.) s 12421 ss 1440 12421 m
(Palatino-Roman02400240) getfont 12749 ss 1440 12749 m
(Palatino-Roman02400240) getfont (Also remember that ) s
(Palatino-Italic02400240) getfont (type) s (Palatino-Roman02400240) getfont ( must be a simple type and not a complex struct for a start symbol.) s
(Palatino-Roman02400240) getfont (Palatino-Roman02400240) getfont
showpage vm_state restore
X
X
save /vm_state E def [1 0 0 -1 0 0] concat 0.050000 0.050000 SC .5 SLW
0 -15840 TR 0 RO
0 0 0 15840 12240 15840 12240 0 pageboundary clip
userdict /#copies 1 put statusdict /manualfeed false put 1253 ss 1440 1253 m
(Palatino-Roman02400240) getfont (AvantGarde-Demi03200320) getfont 1677 ss
5577 1677 m (AvantGarde-Demi03200320) getfont (Scanning) s
(Palatino-Roman02400240) getfont (Palatino-Roman02400240) getfont 2005 ss
1440 2005 m (Palatino-Roman02400240) getfont 2333 ss 1440 2333 m
(Palatino-Roman02400240) getfont 2661 ss 1440 2661 m
(Palatino-Roman02400240) getfont (The ) s 2.540 nx sp (scanner ) s 2.560 nx sp (section ) s
2.540 nx sp (is ) s 2.560 nx sp (optional. ) s 2.540 nx sp ( ) s 2.560 nx sp (If ) s
2.540 nx sp (there ) s 2.560 nx sp (is ) s 2.540 nx sp (a ) s 2.560 nx sp (") s
(Courier02400240) getfont ($$) s (Palatino-Roman02400240) getfont (" ) s
2.540 nx sp (at ) s 2.560 nx sp (the ) s 2.540 nx sp (end ) s 2.560 nx sp (of ) s
2.540 nx sp (the ) s 2.560 nx sp (file, ) s 2.540 nx sp (the ) s 2.560 nx sp (rest ) s
2.540 nx sp (is ) s 2.560 nx sp (considered ) s 2.540 nx sp 2949 ss 1442 2949 m
(Palatino-Roman02400240) getfont (to ) s -5.660 nx sp (be ) s sp (almost ) s
-5.680 nx sp (straight ) s -5.660 nx sp (Palatino-Italic02400240) getfont (lex\(1\)) s
(Palatino-Roman02400240) getfont ( ) s sp (source. ) s -5.680 nx sp ( ) s -5.660 nx sp
SHAR_EOF
true || echo 'restore of wacco.doc.ps failed'
fi
echo 'End of  part 5'
echo 'File wacco.doc.ps is continued in part 6'
echo 6 > _shar_seq_.tmp
exit 0
exit 0 # Just in case...
-- 
Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
Sterling Software, IMD           UUCP:     uunet!sparky!kent
Phone:    (402) 291-8300         FAX:      (402) 291-4362
Please send comp.sources.misc-related mail to kent@uunet.uu.net.