parag@hpsdeb.sde.hp.com (Parag Patel) (05/19/91)
Submitted-by: Parag Patel <parag@hpsdeb.sde.hp.com> Posting-number: Volume 19, Issue 93 Archive-name: wacco/part06 #!/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" != 6; 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' && (If ) s sp (there ) s -5.680 nx sp (is ) s -5.660 nx sp (a ) s sp (") s (Courier02400240) getfont ($$) s (Palatino-Roman02400240) getfont (", ) s -5.680 nx sp (every ) s -5.660 nx sp (terminal ) s sp (must ) s -5.680 nx sp (have ) s -5.660 nx sp (a ) s sp (lexical ) s -5.680 nx sp (value ) s -5.660 nx sp 3237 ss 1442 3237 m (Palatino-Roman02400240) getfont (associated ) s 26.160 nx sp (with ) s sp (it. ) s 26.180 nx sp ( ) s 26.160 nx sp (Character ) s sp (and ) s 26.180 nx sp (string ) s 26.160 nx sp (constants ) s sp (are ) s 26.180 nx sp (self-defining. ) s 26.160 nx sp ( ) s sp (Other ) s 26.180 nx sp (non-terminals ) s 26.160 nx sp 3525 ss 1442 3525 m (Palatino-Roman02400240) getfont (need to be described in the lex section.) s 3853 ss 1440 3853 m (Palatino-Roman02400240) getfont 4181 ss 1440 4181 m (Palatino-Roman02400240) getfont (An example wacco source file with scanner:) s 4509 ss 1440 4509 m (Palatino-Roman02400240) getfont (Courier02400240) getfont 4837 ss 1440 4837 m (Courier02400240) getfont 720.000 nx sp (expr: LPAREN expr RPAREN | "id" | [];) s 5165 ss 1440 5165 m (Courier02400240) getfont 5493 ss 1440 5493 m (Courier02400240) getfont sp ($$) s 5821 ss 1440 5821 m (Courier02400240) getfont 6149 ss 1440 6149 m (Courier02400240) getfont sp (%%) s 6477 ss 1440 6477 m (Courier02400240) getfont 6805 ss 1440 6805 m (Courier02400240) getfont sp (".") s 1008.000 nx sp 1440.000 nx sp ({ return \(int\)EOI; }) s 7133 ss 1440 7133 m (Courier02400240) getfont 7461 ss 1440 7461 m (Courier02400240) getfont 720.000 nx sp ($LPAREN) s 432.000 nx sp 1440.000 nx sp ("\("|"[") s 7789 ss 1440 7789 m (Courier02400240) getfont 720.000 nx sp ($RPAREN) s 432.000 nx sp 1440.000 nx sp ("\)"|"]") s 8117 ss 1440 8117 m (Courier02400240) getfont 8445 ss 1440 8445 m (Courier02400240) getfont 720.000 nx sp ([ \\t\\v\\n\\f]) s 1296.000 nx sp (;) s 8773 ss 1440 8773 m (Courier02400240) getfont 720.000 nx sp (. { w_scanerr\("Illegal character %d \(%c\)",) s 9101 ss 1440 9101 m (Courier02400240) getfont sp 1440.000 nx sp (yytext[0], yytext[0]\); }) s (Palatino-Roman02400240) getfont 9429 ss 1440 9429 m (Palatino-Roman02400240) getfont 9757 ss 1440 9757 m (Palatino-Roman02400240) getfont (The ) s 17.320 nx sp (string ) s 17.340 nx sp (") s (Courier02400240) getfont (id) s (Palatino-Roman02400240) getfont (" ) s sp (naturally ) s 17.320 nx sp (stands ) s 17.340 nx sp (for ) s sp (itself. ) s 17.320 nx sp ( ) s 17.340 nx sp (Palatino-Italic02400240) getfont (LPAREN) s (Palatino-Roman02400240) getfont ( ) s sp (and ) s 17.320 nx sp (Palatino-Italic02400240) getfont (RPAREN) s (Palatino-Roman02400240) getfont ( ) s 17.340 nx sp (are ) s sp (described ) s 17.320 nx sp (in ) s 17.340 nx sp (the ) s sp (lex ) s 17.320 nx sp 10045 ss 1442 10045 m (Palatino-Roman02400240) getfont (section ) s 4.000 nx sp (in ) s sp (reverse ) s sp (order ) s sp (from ) s sp (a ) s sp (normal ) s sp (lex ) s sp (file. ) s sp ( ) s sp (Wacco ) s sp (will ) s sp (convert ) s sp (those ) s sp (lines ) s sp (starting ) s sp (with ) s sp 10333 ss 1442 10333 m (Palatino-Roman02400240) getfont (a ) s 26.640 nx sp (") s (Courier02400240) getfont ($) s (Palatino-Roman02400240) getfont (" ) s sp (into ) s 26.660 nx sp (the ) s 26.640 nx sp (appropriate ) s sp (lex ) s 26.660 nx sp (output. ) s 26.640 nx sp (This ) s sp (is ) s 26.660 nx sp (not ) s 26.640 nx sp (only ) s sp (to ) s 26.660 nx sp (make ) s 26.640 nx sp (sure ) s sp (that ) s 26.660 nx sp (all ) s 26.640 nx sp (terminals ) s 26.660 nx sp (are ) s 26.640 nx sp 10621 ss 1442 10621 m (Palatino-Roman02400240) getfont (defined, ) s 14.380 nx sp (but ) s sp (allows ) s sp (defining ) s sp (a ) s 14.400 nx sp (language ) s 14.380 nx sp (without ) s sp (ever ) s sp (having ) s 14.400 nx sp (to ) s 14.380 nx sp (manually ) s sp (define ) s sp (token ) s 14.400 nx sp (ids ) s 14.380 nx sp 10909 ss 1442 10909 m (Palatino-Roman02400240) getfont (for any terminal symbol!) s 11237 ss 1440 11237 m (Palatino-Roman02400240) getfont 11565 ss 1440 11565 m (Palatino-Roman02400240) getfont (AvantGarde-Demi02800280) getfont 11941 ss 1440 11941 m (AvantGarde-Demi02800280) getfont (Default scanner) s (Palatino-Roman02400240) getfont 12269 ss 1440 12269 m (Palatino-Roman02400240) getfont 12597 ss 1440 12597 m (Palatino-Roman02400240) getfont (The ) s 12.680 nx sp (default ) s sp (scanner ) s 12.700 nx sp (\(located ) s 12.680 nx sp (in ) s sp (-lwacco\) ) s 12.700 nx sp (maintains ) s 12.680 nx sp (its ) s 12.700 nx sp (own ) s 12.680 nx sp (I/O ) s sp (file ) s 12.700 nx sp (pointer. ) s 12.680 nx sp ( ) s sp (This ) s 12.700 nx sp (is ) s 12.680 nx sp (so ) s 12.700 nx sp (that ) s 12.680 nx sp 12885 ss 1442 12885 m (Palatino-Roman02400240) getfont (user ) s 3.420 nx sp (code ) s sp (can ) s 3.440 nx sp (implement ) s 3.420 nx sp (the ) s 3.440 nx sp (equivalent ) s 3.420 nx sp (of ) s 3.440 nx sp (") s (Courier02400240) getfont (#include) s (Palatino-Roman02400240) getfont (" ) s 3.420 nx sp (without ) s sp (too ) s 3.440 nx sp (much ) s 3.420 nx sp (work. ) s 3.440 nx sp ( ) s 3.420 nx sp (The ) s 3.440 nx sp (func-) s 13173 ss 1442 13173 m (Palatino-Roman02400240) getfont (tions in the scanner include:) s 13501 ss 1440 13501 m (Palatino-Roman02400240) getfont 13829 ss 1440 13829 m (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (int w_openfile\(char *fname\)) s (Palatino-Roman02400240) getfont 432.000 nx sp (// open a file to the specified name) s 14157 ss 1440 14157 m (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (void w_closefile\(\)) s (Palatino-Roman02400240) getfont 288.000 nx sp 1440.000 nx sp (// close the last opened file) s 14485 ss 1440 14485 m (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (void w_setfile\(FILE *f\)) s (Palatino-Roman02400240) getfont 1008.000 nx sp (// set the current file to this) s NP 7020 1725 m 5580 1725 l GS 0.00 SG 1 SLW ST GR 5580 1725 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 720.000 nx sp (Courier02400240) getfont (FILE *w_getfile\(\)) s (Palatino-Roman02400240) getfont 432.000 nx sp 1440.000 nx sp (// return the currently opened file) s 1581 ss 1440 1581 m (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (int w_currcol\(\)) s (Palatino-Roman02400240) getfont sp 1440.000 nx sp (// the current column in the input) s 1909 ss 1440 1909 m (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (int w_currline\(\)) s (Palatino-Roman02400240) getfont 576.000 nx sp 1440.000 nx sp (// the current line in the input) s 2237 ss 1440 2237 m (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (char *w_getcurrline\(\)) s (Palatino-Roman02400240) getfont 1296.000 nx sp (// the text of the current line) s 2565 ss 1440 2565 m (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (int w_input\(\)) s 1008.000 nx sp (Palatino-Roman02400240) getfont 1440.000 nx sp (// basic I/O routines which are) s 2893 ss 1440 2893 m (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (int w_unput\(int c\)) s (Palatino-Roman02400240) getfont 288.000 nx sp 1440.000 nx sp (// to be used by the scanner) s 3221 ss 1440 3221 m (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (void w_output\(int c\)) s (Palatino-Roman02400240) getfont 3549 ss 1440 3549 m (Palatino-Roman02400240) getfont 3877 ss 1440 3877 m (Palatino-Roman02400240) getfont (You ) s 30.240 nx sp (should ) s 30.260 nx sp (call ) s 30.240 nx sp (either ) s 30.260 nx sp (Courier02400240) getfont (w_setfile\(\)) s (Palatino-Roman02400240) getfont ( ) s 30.240 nx sp (or ) s 30.260 nx sp (Courier02400240) getfont (w_openfile\(\)) s (Palatino-Roman02400240) getfont ( ) s 30.240 nx sp (before ) s 30.260 nx sp (starting ) s 30.240 nx sp (the ) s 30.260 nx sp (parse ) s 30.240 nx sp (or ) s 30.260 nx sp (the ) s 30.240 nx sp 4165 ss 1442 4165 m (Palatino-Roman02400240) getfont (default scanner will probably dump core.) s 4493 ss 1440 4493 m (Palatino-Roman02400240) getfont 4821 ss 1440 4821 m (Palatino-Roman02400240) getfont (AvantGarde-Demi02800280) getfont 5197 ss 1440 5197 m (AvantGarde-Demi02800280) getfont (Parser's requirements) s (Palatino-Roman02400240) getfont 5525 ss 1440 5525 m (Palatino-Roman02400240) getfont 5853 ss 1440 5853 m (Palatino-Roman02400240) getfont (The functions that the parser expects to have available are:) s 6181 ss 1440 6181 m (Palatino-Roman02400240) getfont 6509 ss 1440 6509 m (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (int w_gettoken\(\)) s (Palatino-Roman02400240) getfont 576.000 nx sp 1440.000 nx sp (// get the next token - usually calls yylex\(\)) s 6837 ss 1440 6837 m (Palatino-Roman02400240) getfont 720.000 nx sp 1440.000 nx sp sp sp (// - must return ) s (Palatino-Italic02400240) getfont (EOI) s (Palatino-Roman02400240) getfont ( on end-of-input) s 7165 ss 1440 7165 m (Palatino-Roman02400240) getfont 7493 ss 1440 7493 m (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (int w_scanerr\(\)) s (Palatino-Roman02400240) getfont sp 1440.000 nx sp (// printf-type error printing routine) s 7821 ss 1440 7821 m (Palatino-Roman02400240) getfont 720.000 nx sp 1440.000 nx sp sp sp (// - must always returns ) s (Palatino-Italic02400240) getfont (RETERR) s (Palatino-Roman02400240) getfont 8149 ss 1440 8149 m (Palatino-Roman02400240) getfont 720.000 nx sp 1440.000 nx sp sp sp (// - is called with a ) s (Palatino-Italic02400240) getfont (NULL) s (Palatino-Roman02400240) getfont ( argument) s 8477 ss 1440 8477 m (Palatino-Roman02400240) getfont 720.000 nx sp 1440.000 nx sp sp sp (// when just skipping a token in the input) s 8805 ss 1440 8805 m (Palatino-Roman02400240) getfont 9133 ss 1440 9133 m (Palatino-Roman02400240) getfont (These are either are in the wacco library -lwacco, or must be provided by the user.) s 9461 ss 1440 9461 m (Palatino-Roman02400240) getfont 9789 ss 1440 9789 m (Palatino-Roman02400240) getfont (The ) s 24.460 nx sp (default ) s sp (Courier02400240) getfont (w_scanerr\(\)) s (Palatino-Roman02400240) getfont ( ) s 24.480 nx sp (will ) s 24.460 nx sp (try ) s sp (to ) s 24.480 nx sp (print ) s 24.460 nx sp (the ) s sp (line ) s 24.480 nx sp (that ) s 24.460 nx sp (had ) s sp (the ) s 24.480 nx sp (error, ) s 24.460 nx sp (and ) s sp (underneath ) s 24.480 nx sp (it ) s 24.460 nx sp 10077 ss 1442 10077 m (Palatino-Roman02400240) getfont (print ) s 29.300 nx sp (") s (Courier02400240) getfont (^) s (Palatino-Roman02400240) getfont (" ) s sp (where ) s 29.320 nx sp (the ) s 29.300 nx sp (error ) s sp (occurred ) s 29.320 nx sp (and ) s 29.300 nx sp (") s (Courier02400240) getfont (*) s (Palatino-Roman02400240) getfont (" ) s 29.320 nx sp (where ) s 29.300 nx sp (tokens ) s sp (were ) s 29.320 nx sp (skipped ) s 29.300 nx sp (when ) s 29.320 nx sp (re-syncing. ) s 29.300 nx sp ( ) s sp 10365 ss 1442 10365 m (Palatino-Roman02400240) getfont (Because of some lex\(1\) funnies, this doesn't always work as expected.) s 10693 ss 1440 10693 m (Palatino-Roman02400240) getfont 11021 ss 1440 11021 m (Palatino-Roman02400240) getfont (AvantGarde-Demi02800280) getfont 11397 ss 1440 11397 m (AvantGarde-Demi02800280) getfont (Parser functions) s (Palatino-Roman02400240) getfont 11725 ss 1440 11725 m (Palatino-Roman02400240) getfont 12053 ss 1440 12053 m (Palatino-Roman02400240) getfont (Some other convenient functions defined in ) s (Palatino-Italic02400240) getfont (parser.C) s (Palatino-Roman02400240) getfont ( include:) s 12381 ss 1440 12381 m (Palatino-Roman02400240) getfont 12709 ss 1440 12709 m (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (int w_nexttoken\() s (Palatino-Roman02400240) getfont (\)) s 497.000 nx sp (// return the value of the next token but don't) s 13037 ss 1440 13037 m (Palatino-Roman02400240) getfont 720.000 nx sp 1440.000 nx sp sp (// scan it yet - calls ) s (Courier02400240) getfont (w_gettoken\(\)) s (Palatino-Roman02400240) getfont ( at most once) s 13365 ss 1440 13365 m (Palatino-Roman02400240) getfont 720.000 nx sp 1440.000 nx sp sp (// - useful for token look-ahead) s 13693 ss 1440 13693 m (Palatino-Roman02400240) getfont 14021 ss 1440 14021 m (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (void w_skiptoken\(\)) s (Palatino-Roman02400240) getfont 288.000 nx sp (// scan the current token - the next call to) s 14349 ss 1440 14349 m (Palatino-Roman02400240) getfont 720.000 nx sp 1440.000 nx sp sp (// ) s (Courier02400240) getfont (w_nexttoken\(\)) s (Palatino-Roman02400240) getfont ( will actually read another token) s 14677 ss 1440 14677 m (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 720.000 nx sp (Courier02400240) getfont (char *w_tokenname\(int tokid\)) s (Palatino-Roman02400240) getfont 288.000 nx sp (// return the string name of a token) s 1581 ss 1440 1581 m (Palatino-Roman02400240) getfont 720.000 nx sp 1440.000 nx sp sp sp (// whose id is tokid) s 1909 ss 1440 1909 m (Palatino-Roman02400240) getfont 2237 ss 1440 2237 m (Palatino-Roman02400240) getfont (T) s 5.120 nx sp (h) s sp (e) s 5.140 nx sp (s) s 5.120 nx sp (e ) s 30.000 nx sp (a) s 5.120 nx sp (r) s 5.140 nx sp (e ) s 30.000 nx sp (o) s 5.120 nx sp (n) s sp (l) s 5.140 nx sp (y ) s 30.000 nx sp (r) s 5.120 nx sp (e) s 5.140 nx sp (a) s 5.120 nx sp (l) s sp (l) s 5.140 nx sp (y ) s 30.000 nx sp (u) s 5.120 nx sp (s) s sp (e) s 5.140 nx sp (f) s 5.120 nx sp (u) s sp (l ) s 30.000 nx sp (i) s 5.140 nx sp (f ) s 30.000 nx sp (y) s 5.120 nx sp (o) s 5.140 nx sp (u ) s 30.000 nx sp (a) s 5.120 nx sp (r) s sp (e ) s 30.000 nx sp (w) s 5.140 nx sp (r) s 5.120 nx sp (i) s sp (t) s 5.140 nx sp (i) s 5.120 nx sp (n) s sp (g ) s 30.000 nx sp (y) s 5.140 nx sp (o) s 5.120 nx sp (u) s 5.140 nx sp (r ) s 30.000 nx sp (o) s 5.120 nx sp (w) s sp (n ) s 30.000 nx sp (s) s 5.140 nx sp (c) s 5.120 nx sp (a) s sp (n) s 5.140 nx sp (n) s 5.120 nx sp (e) s sp (r ) s 30.000 nx sp (i) s 5.140 nx sp (n) s 5.120 nx sp (s) s 5.140 nx sp (t) s 5.120 nx sp (e) s sp (a) s 5.140 nx sp (d ) s 30.000 nx sp (o) s 5.120 nx sp (f ) s 30.000 nx sp (u) s 5.120 nx sp (s) s 5.140 nx sp (i) s 5.120 nx sp (n) s sp (g ) s 30.000 nx sp (l) s 5.140 nx sp (e) s 5.120 nx sp (x) s 5.140 nx sp (. ) s 30.000 nx sp ( ) s sp (Courier02400240) getfont 2525 ss 1442 2525 m (Courier02400240) getfont (w_nexttoken\(\)) s (Palatino-Roman02400240) getfont ( ) s 15.060 nx sp (and ) s 15.080 nx sp (Courier02400240) getfont (w_skiptoken\(\)) s (Palatino-Roman02400240) getfont ( ) s sp (can ) s sp (also ) s sp (be ) s sp (used ) s 15.060 nx sp (to ) s 15.080 nx sp (somewhat ) s sp (direct ) s sp (the ) s sp (parse. ) s sp ( ) s sp (If ) s 15.060 nx sp 2813 ss 1442 2813 m (Palatino-Roman02400240) getfont (you ) s -3.920 nx sp (provide ) s sp (your ) s -3.940 nx sp (own ) s -3.920 nx sp (infinite ) s -3.940 nx sp (push-back ) s -3.920 nx sp (stack ) s -3.940 nx sp (of ) s -3.920 nx sp (tokens, ) s sp (you ) s -3.940 nx sp (can ) s -3.920 nx sp (completely ) s -3.940 nx sp (alter ) s -3.920 nx sp (the ) s -3.940 nx sp (parse ) s -3.920 nx sp 3101 ss 1442 3101 m (Palatino-Roman02400240) getfont (at run-time!) s 3429 ss 1440 3429 m (Palatino-Roman02400240) getfont 3757 ss 1440 3757 m (Palatino-Roman02400240) getfont (AvantGarde-Demi02800280) getfont 4133 ss 1440 4133 m (AvantGarde-Demi02800280) getfont (Flex) s (Palatino-Roman02400240) getfont 4461 ss 1440 4461 m (Palatino-Roman02400240) getfont 4789 ss 1440 4789 m (Palatino-Roman02400240) getfont (The program ) s (Palatino-Italic02400240) getfont (flex\(1\)) s (Palatino-Roman02400240) getfont ( may be used instead of ) s (Palatino-Italic02400240) getfont (lex\(1\)) s (Palatino-Roman02400240) getfont ( if desired, and is highly recommended.) s 5117 ss 1440 5117 m (Palatino-Roman02400240) getfont 5445 ss 1440 5445 m (Palatino-Roman02400240) getfont (T) s 2.620 nx sp (h) s sp (e ) s 30.000 nx sp (e) s 2.640 nx sp (x) s 2.620 nx sp (t) s 2.640 nx sp (e) s 2.620 nx sp (r) s 2.640 nx sp (n ) s 30.000 nx sp (f) s 2.620 nx sp (o) s 2.640 nx sp (r ) s 30.000 nx sp (") s (Courier02400240) getfont 2.620 nx sp (y) s sp (y) s 2.640 nx sp (t) s 2.620 nx sp (e) s 2.640 nx sp (x) s 2.620 nx sp (t) s (Palatino-Roman02400240) getfont 2.640 nx sp (" ) s 30.000 nx sp (i) s 2.620 nx sp (s ) s 30.000 nx sp (a) s 2.640 nx sp (u) s 2.620 nx sp (t) s 2.640 nx sp (o) s 2.620 nx sp (m) s sp (a) s 2.640 nx sp (t) s 2.620 nx sp (i) s 2.640 nx sp (c) s 2.620 nx sp (a) s 2.640 nx sp (l) s 2.620 nx sp (l) s 2.640 nx sp (y ) s 30.000 nx sp (d) s 2.620 nx sp (e) s 2.640 nx sp (c) s 2.620 nx sp (l) s sp (a) s 2.640 nx sp (r) s 2.620 nx sp (e) s 2.640 nx sp (d ) s 30.000 nx sp (i) s 2.620 nx sp (n ) s 30.000 nx sp (Palatino-Italic02400240) getfont (p) s 2.640 nx sp (a) s 2.620 nx sp (r) s 2.640 nx sp (s) s 2.620 nx sp (e) s sp (r) s 2.640 nx sp (.) s 2.620 nx sp (C) s (Palatino-Roman02400240) getfont 2.640 nx sp (. ) s 30.000 nx sp (U) s 2.620 nx sp (n) s 2.640 nx sp (f) s 2.620 nx sp (o) s 2.640 nx sp (r) s 2.620 nx sp (t) s 2.640 nx sp (u) s 2.620 nx sp (n) s sp (a) s 2.640 nx sp (t) s 2.620 nx sp (e) s 2.640 nx sp (l) s 2.620 nx sp (y) s 2.640 nx sp (, ) s 30.000 nx sp (i) s 2.620 nx sp (t ) s 30.000 nx sp (m) s 2.640 nx sp (a) s 2.620 nx sp (y ) s 30.000 nx sp (b) s 2.640 nx sp (e ) s 30.000 nx sp 5733 ss 1442 5733 m (Palatino-Roman02400240) getfont (wrong ) s 17.000 nx sp (for ) s sp (the ) s sp (scanner ) s sp (generator ) s sp (actually ) s sp (being ) s sp (used. ) s sp ( ) s sp (To ) s sp (change ) s sp (the ) s sp (definition, ) s sp (the ) s sp (macro ) s sp (Palatino-Italic02400240) getfont 6021 ss 1442 6021 m (Palatino-Italic02400240) getfont (YYTEXT_DECL) s (Palatino-Roman02400240) getfont ( may be redefined at the top of your wacco grammar if you wish to use flex:) s 6349 ss 1440 6349 m (Palatino-Roman02400240) getfont (Courier02400240) getfont 6677 ss 1440 6677 m (Courier02400240) getfont 720.000 nx sp ({) s 7005 ss 1440 7005 m (Courier02400240) getfont sp (#undef YYTEXT_DECL) s 7333 ss 1440 7333 m (Courier02400240) getfont sp (#define YYTEXT_DECL char *yytext) s 7661 ss 1440 7661 m (Courier02400240) getfont sp (}) s 7989 ss 1440 7989 m (Courier02400240) getfont sp (...) s (Palatino-Roman02400240) getfont 8317 ss 1440 8317 m (Palatino-Roman02400240) getfont (Palatino-Roman02400240) getfont 8645 ss 1440 8645 m (Palatino-Roman02400240) getfont (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-Demi02400240) getfont 1677 ss 4196 1677 m (AvantGarde-Demi02400240) getfont ( ) s (AvantGarde-Demi03200320) getfont (Example Wacco Grammar) s (AvantGarde-Demi02400240) 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 (// This is the usual required calculator sample. It can still use) s 2989 ss 1440 2989 m (Palatino-Roman02400240) getfont (// a LOT of work, but it illustrates the basics. Note that the) s 3317 ss 1440 3317 m (Palatino-Roman02400240) getfont (// precedence of operators is all wrong.) s 3645 ss 1440 3645 m (Palatino-Roman02400240) getfont (Courier02400240) getfont 3973 ss 1440 3973 m (Courier02400240) getfont ({) s 4301 ss 1440 4301 m (Courier02400240) getfont (#include <stdio.h>) s 4629 ss 1440 4629 m (Courier02400240) getfont (#include <stdlib.h>) s 4957 ss 1440 4957 m (Courier02400240) getfont (}) s 5285 ss 1440 5285 m (Courier02400240) getfont 5613 ss 1440 5613 m (Courier02400240) getfont (calc) s 5941 ss 1440 5941 m (Courier02400240) getfont 720.000 nx sp (:) s 1296.000 nx sp (%{) s 6269 ss 1440 6269 m (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp sp (while \(w_nexttoken\(\) != EOI\) {) s 6597 ss 1440 6597 m (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp (%}) s 6925 ss 1440 6925 m (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp (expr \([] | '=' | ';' | ','\)) s 7253 ss 1440 7253 m (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp (%{) s 7581 ss 1440 7581 m (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp sp (printf\("%f\\n", $expr\);) s 7909 ss 1440 7909 m (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp sp (}) s 8237 ss 1440 8237 m (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp (%}) s 8565 ss 1440 8565 m (Courier02400240) getfont 720.000 nx sp (| []) s 8893 ss 1440 8893 m (Courier02400240) getfont sp (;) s 9221 ss 1440 9221 m (Courier02400240) getfont 9549 ss 1440 9549 m (Courier02400240) getfont (expr<double>) s 9877 ss 1440 9877 m (Courier02400240) getfont sp (:) s 1296.000 nx sp (term { $binop_expr = $term; }) s 10205 ss 1440 10205 m (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp sp (binop_expr { $$ = $binop_expr; }) s 10533 ss 1440 10533 m (Courier02400240) getfont 720.000 nx sp (;) s 10861 ss 1440 10861 m (Courier02400240) getfont 11189 ss 1440 11189 m (Courier02400240) getfont (binop_expr<double>) s 11517 ss 1440 11517 m (Courier02400240) getfont sp (:) s 1296.000 nx sp ('+' expr { $$ += $expr; }) s 11845 ss 1440 11845 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ('-' expr { $$ -= $expr; }) s 12173 ss 1440 12173 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ('*' expr { $$ *= $expr; }) s 12501 ss 1440 12501 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ('/' expr { $$ /= $expr; }) s 12829 ss 1440 12829 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ('&' expr { $$ = \(int\)$$ & \(int\)$expr; }) s 13157 ss 1440 13157 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ('|' expr { $$ = \(int\)$$ | \(int\)$expr; }) s 13485 ss 1440 13485 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ('^' expr { $$ = \(int\)$$ ^ \(int\)$expr; }) s 13813 ss 1440 13813 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ("<<" expr { $$ = \(int\)$$ << \(int\)$expr; }) s 14141 ss 1440 14141 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp (">>" expr { $$ = \(int\)$$ >> \(int\)$expr; }) s 14469 ss 1440 14469 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ("&&" expr { $$ = $$ && $expr; }) s NP 8415 1725 m 4260 1725 l GS 0.00 SG 1 SLW ST GR 4260 1725 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 (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ("||" expr { $$ = $$ || $expr; }) s 1581 ss 1440 1581 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ([]) s 1909 ss 1440 1909 m (Courier02400240) getfont 720.000 nx sp (;) s 2237 ss 1440 2237 m (Courier02400240) getfont 2565 ss 1440 2565 m (Courier02400240) getfont (term<double>) s 2893 ss 1440 2893 m (Courier02400240) getfont sp (:) s 1296.000 nx sp (DOUBLE { $$ = atof\(\(char *\)yytext\); }) s 3221 ss 1440 3221 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ('-' expr { $$ = -$expr; }) s 3549 ss 1440 3549 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ('~' expr { $$ = ~\(int\)$expr; }) s 3877 ss 1440 3877 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ('!' expr { $$ = !$expr; }) s 4205 ss 1440 4205 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ('\(' expr '\)' { $$ = $expr; }) s 4533 ss 1440 4533 m (Courier02400240) getfont 720.000 nx sp (;) s 4861 ss 1440 4861 m (Courier02400240) getfont 5189 ss 1440 5189 m (Courier02400240) getfont ({) s 5517 ss 1440 5517 m (Courier02400240) getfont sp (main\(\)) s 5845 ss 1440 5845 m (Courier02400240) getfont sp ({) s 6173 ss 1440 6173 m (Courier02400240) getfont sp 1440.000 nx sp (w_setfile\(stdin\);) s 6501 ss 1440 6501 m (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp (calc\(\);) s 6829 ss 1440 6829 m (Courier02400240) getfont 720.000 nx sp (}) s 7157 ss 1440 7157 m (Courier02400240) getfont (}) s 7485 ss 1440 7485 m (Courier02400240) getfont 7813 ss 1440 7813 m (Courier02400240) getfont ($$) s 8141 ss 1440 8141 m (Courier02400240) getfont 8469 ss 1440 8469 m (Courier02400240) getfont (D) s 576.000 nx sp ([0-9]) s 8797 ss 1440 8797 m (Courier02400240) getfont (L) s sp ([_A-Za-z]) s 9125 ss 1440 9125 m (Courier02400240) getfont 9453 ss 1440 9453 m (Courier02400240) getfont (%%) s 9781 ss 1440 9781 m (Courier02400240) getfont 10109 ss 1440 10109 m (Courier02400240) getfont (".") s 288.000 nx sp 1440.000 nx sp ({ return \(int\)EOI; }) s 10437 ss 1440 10437 m (Courier02400240) getfont 10765 ss 1440 10765 m (Courier02400240) getfont ($DOUBLE) s 1152.000 nx sp (\() s 103.200 nx sp ({) s sp (D) s sp (}) s sp (+) s sp (\)) s sp (|) s sp (\() s sp ({) s sp (D) s sp (}) s sp (+) s sp (\\) s sp (.) s sp ({) s sp (D) s sp (}) s sp (+) s sp (\)) s sp (|) s sp (\() s sp ({) s sp (D) s sp (}) s sp (+) s sp ([) s sp (E) s sp (e) s sp (]) s sp (-) s sp (?) s 11053 ss 1442 11053 m (Courier02400240) getfont ({D}+\)|\({D}+\\.{D}+[Ee]-?{D}+\)) s 11381 ss 1440 11381 m (Courier02400240) getfont 11709 ss 1440 11709 m (Courier02400240) getfont ("#".*$) s 1296.000 nx sp 1440.000 nx sp (;) s 12037 ss 1440 12037 m (Courier02400240) getfont 12365 ss 1440 12365 m (Courier02400240) getfont ([ \\t\\v\\n\\f]) s 576.000 nx sp (;) s 12693 ss 1440 12693 m (Courier02400240) getfont (.) s sp ({ ) s -12.000 nx sp (w_scanerr\("Illegal ) s sp (character ) s sp (%d ) s sp (\($c\)", ) s sp (yytext[0], ) s sp (yytext[0]\); ) s sp 12981 ss 1442 12981 m (Courier02400240) getfont (}) s showpage vm_state restore X SHAR_EOF echo 'File wacco.doc.ps is complete' && chmod 0555 wacco.doc.ps || echo 'restore of wacco.doc.ps failed' Wc_c="`wc -c < 'wacco.doc.ps'`" test 98569 -eq "$Wc_c" || echo 'wacco.doc.ps: original size 98569, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi # ============= wacco.w ============== if test -f 'wacco.w' -a X"$1" != X"-c"; then echo 'x - skipping wacco.w (File already exists)' rm -f _shar_wnt_.tmp else > _shar_wnt_.tmp echo 'x - extracting wacco.w (Text)' sed 's/^X//' << 'SHAR_EOF' > 'wacco.w' && { // Copyright (c) 1991 by Parag Patel. All Rights Reserved. static const char rcs_id[] = "$Header: wacco.w,v 1.13 91/02/22 16:04:36 hmgr Exp $"; X #undef YYTEXT_DECL #define YYTEXT_DECL char yytext[] X #include "defs.h" X struct nodedat { X symbol *sym; X union X { X symnode *node; X char *alias; X }; X nodedat *prev; X nodedat() { sym = NULL; node = NULL; prev = NULL; } }; X } X program X : directives { $code = NULL; } code { startcode = $code; } statlist X ; X directives X : DIRECTIVE X { X int argc; X char **argv = strsep(yytext, " \t", TRUE, &argc); X getoptions(argc, argv); X } X | [] X ; X statlist X : statement { $code = NULL; } code { addnonterm($code); } statlist X | [] X ; X statement<symbol*> X : ID X { X $$ = addsymbol(yytext); X if ($$->type == TERMINAL) X (void)addnonterm($$); X if (startsymbol == NULL) X { X startsymbol = $$; X $$->usecount += 2; X } X } X idtype X { X if ($$->rettype != NULL && $idtype != NULL && X strcmp($$->rettype, $idtype) != 0) X scanerr("Two types defined for %s", $$->name); X X if ($$->rettype == NULL) X $$->rettype = $idtype; X else X delete $idtype; X } X (<boolean> EXPORT { $$ = TRUE; } | [] { $$ = FALSE; }) X { X if ($_) X { X exportedname = $$->export = TRUE; X $$->usecount += 2; X } X } X resyncset ':' X { X $$->list = $resyncset; X nodedat end; X end.sym = $concatlist.sym = $orlist.sym = $$; X $concatlist.prev = $orlist.prev = &end; X } X concatlist X { X symnode *node = $$->node; X if (node != NULL) X { X while (node->or != NULL) X node = node->or; X node->or = $concatlist.node; X } X else X node = $$->node = $concatlist.node; X } X orlist X { X if (node == NULL) X $$->node = $orlist.node; X else if (node->or == NULL) X node->or = $orlist.node; X else X node->or->or = $orlist.node; X } X ';' X ; X idtype<char*> X : '<' { $$ = readtype(); } X | [] { $$ = NULL; } X ; X concatlist<nodedat> X : { X $code = $exprlist.sym = $$.sym; X $exprlist.prev = $$.prev; X } X code exprlist X { X if ($code == NULL) X $$.node = $exprlist.node; X else X { X $$.node = new symnode; X $$.node->sym = $code; X $$.node->next = $exprlist.node; X } X } X | [] X ; X orlist<nodedat> X : { X $concatlist.sym = $orlist.sym = $$.sym; X $concatlist.prev = $orlist.prev = $$.prev; X } X '|' concatlist orlist X { X $$.node = $concatlist.node; X if ($$.node == NULL) X $$.node = $orlist.node; X else X $$.node->or = $orlist.node; X } X | [] X ; X X exprlist<nodedat> X : { X $expression.sym = $code = $exprlist.sym = $$.sym; X $expression.prev = $exprlist.prev = $$.prev; X } X expression resyncset code exprlist X { X $$.node = new symnode; X $$.node->sym = $expression.sym; X $$.node->alias = $expression.alias; X $$.node->next = $exprlist.node; X $$.node->list = $resyncset; X if ($code != NULL) X { X $$.node->next = new symnode; X $$.node->next->sym = $code; X $$.node->next->next = $exprlist.node; X } X } X | [] X ; X resyncset<resynclist*> X : '[' resynclist ']' { $$ = $resynclist; } X | [] { $$ = NULL; } X ; X resynclist<resynclist*> X : resyncitem (',' resynclist { $$=$resynclist; } | [] { $$ = NULL; }) X { X $$ = $resyncitem; X $$->next = $_; X } X ; X resyncitem<resynclist*> X : settype=first resyncid settype=follow X { X $$ = $resyncid; X $$->first = $first == 0 && $follow == 0 ? 1 : $first; X $$->follow = $follow; X } X ; X settype X : '+' { $$ = 1; } X | '-' { $$ = -1; } X | [] { $$ = 0; } X ; X resyncid<resynclist*> X : ID { $$ = new resynclist(yytext); } X | NULLSYM { $$ = new resynclist(NULL); } X | STRING { $$ = new resynclist(yytext); } X | CHARACTER { $$ = new resynclist(yytext); } X | '#' count { $$ = new resynclist(NULL); X $$->paren = $count == 0 ? 1 : $count; } X ; X count X : INT { $$ = atoi(yytext); } X | '*' { $$ = -1; } X | [] { $$ = 0; } X ; X alias<char*> X : '=' (ID { $$ = yytext; } | INT { $$ = yytext; }) X { $$ = strdup($_); } X | [] { $$ = NULL; } X ; X expression<nodedat> X : ID { $$.sym = addsymbol(yytext); $$.sym->usecount++; } X alias { $$.alias = $alias; } X | NULLSYM { $$.sym = getsymbol(EMPTY); } X | '#' count alias X { X nodedat *p = $$.prev; X for (int i = 0; p != NULL && ($count < 0 || i < $count); i++) X { X $$.sym = p->sym; X p = p->prev; X } X if ($count > 0 && i < $count) X scanerr("not that many parentheses"); X $$.sym->usecount++; X $$.alias = $alias; X } X | STRING X { X $$.sym = addsymbol(yytext); X $$.sym->lexstr = $$.sym->name; X gotlexstr = TRUE; X } X | CHARACTER X { X $$.sym = addsymbol(yytext); X if ($$.sym->lexstr == NULL) X { X char *s = strdup(yytext); X s[0] = s[strlen(s) - 1] = '"'; X $$.sym->lexstr = s; X } X } X | '(' idtype X { X char *type = $$.sym->rettype; X char *name = $$.sym->realname; X static int num = 1; X X addnonterm($$.sym = addsymbol(strbldf("_P%d", num++))); X $$.sym->type = NONTERMINAL; X $$.sym->rettype = $idtype == NULL ? type : $idtype; X $$.sym->realname = name; X $$.sym->usecount++; X X $concatlist.sym = $orlist.sym = $$.sym; X $concatlist.prev = $orlist.prev = &$$; X } X concatlist orlist ')' alias X { X $$.sym->node = $concatlist.node; X if ($$.sym->node == NULL) X $$.sym->node = $orlist.node; X else X $$.sym->node->or = $orlist.node; X $$.alias = $alias; X } X ; X code<symbol*> X : { X int rettype = 0; X int line = currline(); X } X (<char*> X '{' { $$ = readcode(rettype); } X | BLOCKCODE { $$ = readblockcode(rettype); } X ) X { X if ($$ != NULL) X $$->usedret = rettype; X X $$ = new symbol; X $$->name = "<code>"; X $$->type = CODE; X $$->code = $_; X $$->line = line; X } X | [] { $$ = NULL; } X ; SHAR_EOF chmod 0444 wacco.w || echo 'restore of wacco.w failed' Wc_c="`wc -c < 'wacco.w'`" test 5585 -eq "$Wc_c" || echo 'wacco.w: original size 5585, current size' "$Wc_c" rm -f _shar_wnt_.tmp fi rm -f _shar_seq_.tmp echo You have unpacked the last part 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.