home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume19 / wacco / part06 < prev    next >
Text File  |  1991-05-19  |  34KB  |  715 lines

  1. Newsgroups: comp.sources.misc
  2. From: Parag Patel <parag@hpsdeb.sde.hp.com>
  3. Subject:  REPOST: v19i093:  wacco - A C++ LL parser generator, Part06/06
  4. Message-ID: <1991May19.054826.22700@sparky.IMD.Sterling.COM>
  5. X-Md4-Signature: d12afa4573dc38279cbfcb3d286d37bd
  6. Date: Sun, 19 May 1991 05:48:26 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: Parag Patel <parag@hpsdeb.sde.hp.com>
  10. Posting-number: Volume 19, Issue 93
  11. Archive-name: wacco/part06
  12.  
  13. #!/bin/sh
  14. # do not concatenate these parts, unpack them in order with /bin/sh
  15. # file wacco.doc.ps continued
  16. #
  17. if test ! -r _shar_seq_.tmp; then
  18.     echo 'Please unpack part 1 first!'
  19.     exit 1
  20. fi
  21. (read Scheck
  22.  if test "$Scheck" != 6; then
  23.     echo Please unpack part "$Scheck" next!
  24.     exit 1
  25.  else
  26.     exit 0
  27.  fi
  28. ) < _shar_seq_.tmp || exit 1
  29. if test ! -f _shar_wnt_.tmp; then
  30.     echo 'x - still skipping wacco.doc.ps'
  31. else
  32. echo 'x - continuing file wacco.doc.ps'
  33. sed 's/^X//' << 'SHAR_EOF' >> 'wacco.doc.ps' &&
  34. (If ) s sp (there ) s -5.680 nx sp (is ) s -5.660 nx sp (a ) s sp (") s
  35. (Courier02400240) getfont ($$) s (Palatino-Roman02400240) getfont (", ) s
  36. -5.680 nx sp (every ) s -5.660 nx sp (terminal ) s sp (must ) s -5.680 nx sp (have ) s
  37. -5.660 nx sp (a ) s sp (lexical ) s -5.680 nx sp (value ) s -5.660 nx sp 3237 ss
  38. 1442 3237 m (Palatino-Roman02400240) getfont (associated ) s 26.160 nx sp (with ) s
  39. sp (it. ) s 26.180 nx sp ( ) s 26.160 nx sp (Character ) s sp (and ) s 26.180 nx sp (string ) s
  40. 26.160 nx sp (constants ) s sp (are ) s 26.180 nx sp (self-defining. ) s 26.160 nx sp
  41. ( ) s sp (Other ) s 26.180 nx sp (non-terminals ) s 26.160 nx sp 3525 ss 1442 3525 m
  42. (Palatino-Roman02400240) getfont (need to be described in the lex section.) s
  43. 3853 ss 1440 3853 m (Palatino-Roman02400240) getfont 4181 ss 1440 4181 m
  44. (Palatino-Roman02400240) getfont (An example wacco source file with scanner:) s
  45. 4509 ss 1440 4509 m (Palatino-Roman02400240) getfont
  46. (Courier02400240) getfont 4837 ss 1440 4837 m (Courier02400240) getfont
  47. 720.000 nx sp (expr: LPAREN expr RPAREN | "id" | [];) s 5165 ss 1440 5165 m
  48. (Courier02400240) getfont 5493 ss 1440 5493 m (Courier02400240) getfont sp ($$) s
  49. 5821 ss 1440 5821 m (Courier02400240) getfont 6149 ss 1440 6149 m
  50. (Courier02400240) getfont sp (%%) s 6477 ss 1440 6477 m
  51. (Courier02400240) getfont 6805 ss 1440 6805 m (Courier02400240) getfont sp (".") s
  52. 1008.000 nx sp 1440.000 nx sp ({ return \(int\)EOI; }) s 7133 ss 1440 7133 m
  53. (Courier02400240) getfont 7461 ss 1440 7461 m (Courier02400240) getfont
  54. 720.000 nx sp ($LPAREN) s 432.000 nx sp 1440.000 nx sp ("\("|"[") s 7789 ss
  55. 1440 7789 m (Courier02400240) getfont 720.000 nx sp ($RPAREN) s 432.000 nx sp
  56. 1440.000 nx sp ("\)"|"]") s 8117 ss 1440 8117 m (Courier02400240) getfont
  57. 8445 ss 1440 8445 m (Courier02400240) getfont 720.000 nx sp ([ \\t\\v\\n\\f]) s
  58. 1296.000 nx sp (;) s 8773 ss 1440 8773 m (Courier02400240) getfont 720.000 nx sp
  59. (.  { w_scanerr\("Illegal character %d \(%c\)",) s 9101 ss 1440 9101 m
  60. (Courier02400240) getfont sp 1440.000 nx sp (yytext[0], yytext[0]\); }) s
  61. (Palatino-Roman02400240) getfont 9429 ss 1440 9429 m
  62. (Palatino-Roman02400240) getfont 9757 ss 1440 9757 m
  63. (Palatino-Roman02400240) getfont (The ) s 17.320 nx sp (string ) s 17.340 nx sp (") s
  64. (Courier02400240) getfont (id) s (Palatino-Roman02400240) getfont (" ) s sp (naturally ) s
  65. 17.320 nx sp (stands ) s 17.340 nx sp (for ) s sp (itself. ) s 17.320 nx sp ( ) s
  66. 17.340 nx sp (Palatino-Italic02400240) getfont (LPAREN) s
  67. (Palatino-Roman02400240) getfont ( ) s sp (and ) s 17.320 nx sp
  68. (Palatino-Italic02400240) getfont (RPAREN) s (Palatino-Roman02400240) getfont ( ) s
  69. 17.340 nx sp (are ) s sp (described ) s 17.320 nx sp (in ) s 17.340 nx sp (the ) s sp (lex ) s
  70. 17.320 nx sp 10045 ss 1442 10045 m (Palatino-Roman02400240) getfont (section ) s
  71. 4.000 nx sp (in ) s sp (reverse ) s sp (order ) s sp (from ) s sp (a ) s sp (normal ) s sp (lex ) s
  72. sp (file. ) s sp ( ) s sp (Wacco ) s sp (will ) s sp (convert ) s sp (those ) s sp (lines ) s sp (starting ) s
  73. sp (with ) s sp 10333 ss 1442 10333 m (Palatino-Roman02400240) getfont (a ) s
  74. 26.640 nx sp (") s (Courier02400240) getfont ($) s (Palatino-Roman02400240) getfont
  75. (" ) s sp (into ) s 26.660 nx sp (the ) s 26.640 nx sp (appropriate ) s sp (lex ) s
  76. 26.660 nx sp (output. ) s 26.640 nx sp (This ) s sp (is ) s 26.660 nx sp (not ) s
  77. 26.640 nx sp (only ) s sp (to ) s 26.660 nx sp (make ) s 26.640 nx sp (sure ) s sp (that ) s
  78. 26.660 nx sp (all ) s 26.640 nx sp (terminals ) s 26.660 nx sp (are ) s 26.640 nx sp
  79. 10621 ss 1442 10621 m (Palatino-Roman02400240) getfont (defined, ) s
  80. 14.380 nx sp (but ) s sp (allows ) s sp (defining ) s sp (a ) s 14.400 nx sp (language ) s
  81. 14.380 nx sp (without ) s sp (ever ) s sp (having ) s 14.400 nx sp (to ) s 14.380 nx sp (manually ) s
  82. sp (define ) s sp (token ) s 14.400 nx sp (ids ) s 14.380 nx sp 10909 ss 1442 10909 m
  83. (Palatino-Roman02400240) getfont (for any terminal symbol!) s 11237 ss
  84. 1440 11237 m (Palatino-Roman02400240) getfont 11565 ss 1440 11565 m
  85. (Palatino-Roman02400240) getfont (AvantGarde-Demi02800280) getfont 11941 ss
  86. 1440 11941 m (AvantGarde-Demi02800280) getfont (Default scanner) s
  87. (Palatino-Roman02400240) getfont 12269 ss 1440 12269 m
  88. (Palatino-Roman02400240) getfont 12597 ss 1440 12597 m
  89. (Palatino-Roman02400240) getfont (The ) s 12.680 nx sp (default ) s sp (scanner ) s
  90. 12.700 nx sp (\(located ) s 12.680 nx sp (in ) s sp (-lwacco\) ) s 12.700 nx sp (maintains ) s
  91. 12.680 nx sp (its ) s 12.700 nx sp (own ) s 12.680 nx sp (I/O ) s sp (file ) s
  92. 12.700 nx sp (pointer. ) s 12.680 nx sp ( ) s sp (This ) s 12.700 nx sp (is ) s
  93. 12.680 nx sp (so ) s 12.700 nx sp (that ) s 12.680 nx sp 12885 ss 1442 12885 m
  94. (Palatino-Roman02400240) getfont (user ) s 3.420 nx sp (code ) s sp (can ) s
  95. 3.440 nx sp (implement ) s 3.420 nx sp (the ) s 3.440 nx sp (equivalent ) s
  96. 3.420 nx sp (of ) s 3.440 nx sp (") s (Courier02400240) getfont (#include) s
  97. (Palatino-Roman02400240) getfont (" ) s 3.420 nx sp (without ) s sp (too ) s
  98. 3.440 nx sp (much ) s 3.420 nx sp (work. ) s 3.440 nx sp ( ) s 3.420 nx sp (The ) s
  99. 3.440 nx sp (func-) s 13173 ss 1442 13173 m (Palatino-Roman02400240) getfont (tions in the scanner include:) s
  100. 13501 ss 1440 13501 m (Palatino-Roman02400240) getfont 13829 ss 1440 13829 m
  101. (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (int w_openfile\(char *fname\)) s
  102. (Palatino-Roman02400240) getfont 432.000 nx sp (// open a file to the specified name) s
  103. 14157 ss 1440 14157 m (Palatino-Roman02400240) getfont 720.000 nx sp
  104. (Courier02400240) getfont (void w_closefile\(\)) s
  105. (Palatino-Roman02400240) getfont 288.000 nx sp 1440.000 nx sp (// close the last opened file) s
  106. 14485 ss 1440 14485 m (Palatino-Roman02400240) getfont 720.000 nx sp
  107. (Courier02400240) getfont (void w_setfile\(FILE *f\)) s
  108. (Palatino-Roman02400240) getfont 1008.000 nx sp (// set the current file to this) s
  109. NP 7020 1725 m 5580 1725 l GS 0.00 SG 1 SLW ST GR 5580 1725 m
  110. showpage vm_state restore
  111. X
  112. X
  113. save /vm_state E def [1 0 0 -1 0 0] concat 0.050000 0.050000 SC .5 SLW
  114. 0 -15840 TR 0 RO
  115. 0 0 0 15840 12240 15840 12240 0 pageboundary clip
  116. userdict /#copies 1 put statusdict /manualfeed false put 1253 ss 1440 1253 m
  117. (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (FILE *w_getfile\(\)) s
  118. (Palatino-Roman02400240) getfont 432.000 nx sp 1440.000 nx sp (// return the currently opened file) s
  119. 1581 ss 1440 1581 m (Palatino-Roman02400240) getfont 720.000 nx sp
  120. (Courier02400240) getfont (int w_currcol\(\)) s (Palatino-Roman02400240) getfont
  121. sp 1440.000 nx sp (// the current column in the input) s 1909 ss 1440 1909 m
  122. (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (int w_currline\(\)) s
  123. (Palatino-Roman02400240) getfont 576.000 nx sp 1440.000 nx sp (// the current line in the input) s
  124. 2237 ss 1440 2237 m (Palatino-Roman02400240) getfont 720.000 nx sp
  125. (Courier02400240) getfont (char *w_getcurrline\(\)) s
  126. (Palatino-Roman02400240) getfont 1296.000 nx sp (// the text of the current line) s
  127. 2565 ss 1440 2565 m (Palatino-Roman02400240) getfont 720.000 nx sp
  128. (Courier02400240) getfont (int w_input\(\)) s 1008.000 nx sp
  129. (Palatino-Roman02400240) getfont 1440.000 nx sp (// basic I/O routines which are) s
  130. 2893 ss 1440 2893 m (Palatino-Roman02400240) getfont 720.000 nx sp
  131. (Courier02400240) getfont (int w_unput\(int c\)) s
  132. (Palatino-Roman02400240) getfont 288.000 nx sp 1440.000 nx sp (//          to be used by the scanner) s
  133. 3221 ss 1440 3221 m (Palatino-Roman02400240) getfont 720.000 nx sp
  134. (Courier02400240) getfont (void w_output\(int c\)) s
  135. (Palatino-Roman02400240) getfont 3549 ss 1440 3549 m
  136. (Palatino-Roman02400240) getfont 3877 ss 1440 3877 m
  137. (Palatino-Roman02400240) getfont (You ) s 30.240 nx sp (should ) s 30.260 nx sp (call ) s
  138. 30.240 nx sp (either ) s 30.260 nx sp (Courier02400240) getfont (w_setfile\(\)) s
  139. (Palatino-Roman02400240) getfont ( ) s 30.240 nx sp (or ) s 30.260 nx sp
  140. (Courier02400240) getfont (w_openfile\(\)) s (Palatino-Roman02400240) getfont ( ) s
  141. 30.240 nx sp (before ) s 30.260 nx sp (starting ) s 30.240 nx sp (the ) s 30.260 nx sp
  142. (parse ) s 30.240 nx sp (or ) s 30.260 nx sp (the ) s 30.240 nx sp 4165 ss 1442 4165 m
  143. (Palatino-Roman02400240) getfont (default scanner will probably dump core.) s
  144. 4493 ss 1440 4493 m (Palatino-Roman02400240) getfont 4821 ss 1440 4821 m
  145. (Palatino-Roman02400240) getfont (AvantGarde-Demi02800280) getfont 5197 ss
  146. 1440 5197 m (AvantGarde-Demi02800280) getfont (Parser's requirements) s
  147. (Palatino-Roman02400240) getfont 5525 ss 1440 5525 m
  148. (Palatino-Roman02400240) getfont 5853 ss 1440 5853 m
  149. (Palatino-Roman02400240) getfont (The functions that the parser expects to have available are:) s
  150. 6181 ss 1440 6181 m (Palatino-Roman02400240) getfont 6509 ss 1440 6509 m
  151. (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (int w_gettoken\(\)) s
  152. (Palatino-Roman02400240) getfont 576.000 nx sp 1440.000 nx sp (// get the next token - usually calls yylex\(\)) s
  153. 6837 ss 1440 6837 m (Palatino-Roman02400240) getfont 720.000 nx sp
  154. 1440.000 nx sp sp sp (// - must return ) s (Palatino-Italic02400240) getfont (EOI) s
  155. (Palatino-Roman02400240) getfont ( on end-of-input) s 7165 ss 1440 7165 m
  156. (Palatino-Roman02400240) getfont 7493 ss 1440 7493 m
  157. (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (int w_scanerr\(\)) s
  158. (Palatino-Roman02400240) getfont sp 1440.000 nx sp (// printf-type error printing routine) s
  159. 7821 ss 1440 7821 m (Palatino-Roman02400240) getfont 720.000 nx sp
  160. 1440.000 nx sp sp sp (// - must always returns ) s
  161. (Palatino-Italic02400240) getfont (RETERR) s (Palatino-Roman02400240) getfont
  162. 8149 ss 1440 8149 m (Palatino-Roman02400240) getfont 720.000 nx sp
  163. 1440.000 nx sp sp sp (// - is called with a ) s
  164. (Palatino-Italic02400240) getfont (NULL) s (Palatino-Roman02400240) getfont ( argument) s
  165. 8477 ss 1440 8477 m (Palatino-Roman02400240) getfont 720.000 nx sp
  166. 1440.000 nx sp sp sp (// when just skipping a token in the input) s 8805 ss
  167. 1440 8805 m (Palatino-Roman02400240) getfont 9133 ss 1440 9133 m
  168. (Palatino-Roman02400240) getfont (These are either are in the wacco library -lwacco, or must be provided by the user.) s
  169. 9461 ss 1440 9461 m (Palatino-Roman02400240) getfont 9789 ss 1440 9789 m
  170. (Palatino-Roman02400240) getfont (The ) s 24.460 nx sp (default ) s sp
  171. (Courier02400240) getfont (w_scanerr\(\)) s (Palatino-Roman02400240) getfont ( ) s
  172. 24.480 nx sp (will ) s 24.460 nx sp (try ) s sp (to ) s 24.480 nx sp (print ) s
  173. 24.460 nx sp (the ) s sp (line ) s 24.480 nx sp (that ) s 24.460 nx sp (had ) s sp (the ) s
  174. 24.480 nx sp (error, ) s 24.460 nx sp (and ) s sp (underneath ) s 24.480 nx sp (it ) s
  175. 24.460 nx sp 10077 ss 1442 10077 m (Palatino-Roman02400240) getfont (print ) s
  176. 29.300 nx sp (") s (Courier02400240) getfont (^) s (Palatino-Roman02400240) getfont
  177. (" ) s sp (where ) s 29.320 nx sp (the ) s 29.300 nx sp (error ) s sp (occurred ) s
  178. 29.320 nx sp (and ) s 29.300 nx sp (") s (Courier02400240) getfont (*) s
  179. (Palatino-Roman02400240) getfont (" ) s 29.320 nx sp (where ) s 29.300 nx sp (tokens ) s
  180. sp (were ) s 29.320 nx sp (skipped ) s 29.300 nx sp (when ) s 29.320 nx sp (re-syncing. ) s
  181. 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
  182. 10693 ss 1440 10693 m (Palatino-Roman02400240) getfont 11021 ss 1440 11021 m
  183. (Palatino-Roman02400240) getfont (AvantGarde-Demi02800280) getfont 11397 ss
  184. 1440 11397 m (AvantGarde-Demi02800280) getfont (Parser functions) s
  185. (Palatino-Roman02400240) getfont 11725 ss 1440 11725 m
  186. (Palatino-Roman02400240) getfont 12053 ss 1440 12053 m
  187. (Palatino-Roman02400240) getfont (Some other convenient functions defined in ) s
  188. (Palatino-Italic02400240) getfont (parser.C) s (Palatino-Roman02400240) getfont
  189. ( include:) s 12381 ss 1440 12381 m (Palatino-Roman02400240) getfont 12709 ss
  190. 1440 12709 m (Palatino-Roman02400240) getfont 720.000 nx sp
  191. (Courier02400240) getfont (int w_nexttoken\() s (Palatino-Roman02400240) getfont
  192. (\)) s 497.000 nx sp (// return the value of the next token but don't) s 13037 ss
  193. 1440 13037 m (Palatino-Roman02400240) getfont 720.000 nx sp 1440.000 nx sp sp
  194. (// scan it yet - calls ) s (Courier02400240) getfont (w_gettoken\(\)) s
  195. (Palatino-Roman02400240) getfont ( at most once) s 13365 ss 1440 13365 m
  196. (Palatino-Roman02400240) getfont 720.000 nx sp 1440.000 nx sp sp (// - useful for token look-ahead) s
  197. 13693 ss 1440 13693 m (Palatino-Roman02400240) getfont 14021 ss 1440 14021 m
  198. (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (void w_skiptoken\(\)) s
  199. (Palatino-Roman02400240) getfont 288.000 nx sp (// scan the current token - the next call to) s
  200. 14349 ss 1440 14349 m (Palatino-Roman02400240) getfont 720.000 nx sp
  201. 1440.000 nx sp sp (// ) s (Courier02400240) getfont (w_nexttoken\(\)) s
  202. (Palatino-Roman02400240) getfont ( will actually read another token) s 14677 ss
  203. 1440 14677 m (Palatino-Roman02400240) getfont showpage vm_state restore
  204. X
  205. X
  206. save /vm_state E def [1 0 0 -1 0 0] concat 0.050000 0.050000 SC .5 SLW
  207. 0 -15840 TR 0 RO
  208. 0 0 0 15840 12240 15840 12240 0 pageboundary clip
  209. userdict /#copies 1 put statusdict /manualfeed false put 1253 ss 1440 1253 m
  210. (Palatino-Roman02400240) getfont 720.000 nx sp (Courier02400240) getfont (char *w_tokenname\(int tokid\)) s
  211. (Palatino-Roman02400240) getfont 288.000 nx sp (// return the string name of a token) s
  212. 1581 ss 1440 1581 m (Palatino-Roman02400240) getfont 720.000 nx sp
  213. 1440.000 nx sp sp sp (// whose id is tokid) s 1909 ss 1440 1909 m
  214. (Palatino-Roman02400240) getfont 2237 ss 1440 2237 m
  215. (Palatino-Roman02400240) getfont (T) s 5.120 nx sp (h) s sp (e) s 5.140 nx sp (s) s
  216. 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
  217. 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
  218. 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
  219. 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
  220. 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
  221. 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
  222. 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
  223. 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
  224. 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
  225. 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
  226. 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
  227. 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
  228. 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
  229. 30.000 nx sp ( ) s sp (Courier02400240) getfont 2525 ss 1442 2525 m
  230. (Courier02400240) getfont (w_nexttoken\(\)) s (Palatino-Roman02400240) getfont ( ) s
  231. 15.060 nx sp (and ) s 15.080 nx sp (Courier02400240) getfont (w_skiptoken\(\)) s
  232. (Palatino-Roman02400240) getfont ( ) s sp (can ) s sp (also ) s sp (be ) s sp (used ) s
  233. 15.060 nx sp (to ) s 15.080 nx sp (somewhat ) s sp (direct ) s sp (the ) s sp (parse. ) s sp
  234. ( ) s sp (If ) s 15.060 nx sp 2813 ss 1442 2813 m (Palatino-Roman02400240) getfont
  235. (you ) s -3.920 nx sp (provide ) s sp (your ) s -3.940 nx sp (own ) s -3.920 nx sp (infinite ) s
  236. -3.940 nx sp (push-back ) s -3.920 nx sp (stack ) s -3.940 nx sp (of ) s -3.920 nx sp
  237. (tokens, ) s sp (you ) s -3.940 nx sp (can ) s -3.920 nx sp (completely ) s -3.940 nx sp
  238. (alter ) s -3.920 nx sp (the ) s -3.940 nx sp (parse ) s -3.920 nx sp 3101 ss
  239. 1442 3101 m (Palatino-Roman02400240) getfont (at run-time!) s 3429 ss
  240. 1440 3429 m (Palatino-Roman02400240) getfont 3757 ss 1440 3757 m
  241. (Palatino-Roman02400240) getfont (AvantGarde-Demi02800280) getfont 4133 ss
  242. 1440 4133 m (AvantGarde-Demi02800280) getfont (Flex) s
  243. (Palatino-Roman02400240) getfont 4461 ss 1440 4461 m
  244. (Palatino-Roman02400240) getfont 4789 ss 1440 4789 m
  245. (Palatino-Roman02400240) getfont (The program ) s
  246. (Palatino-Italic02400240) getfont (flex\(1\)) s (Palatino-Roman02400240) getfont
  247. ( may be used instead of ) s (Palatino-Italic02400240) getfont (lex\(1\)) s
  248. (Palatino-Roman02400240) getfont ( if desired, and is highly recommended.) s
  249. 5117 ss 1440 5117 m (Palatino-Roman02400240) getfont 5445 ss 1440 5445 m
  250. (Palatino-Roman02400240) getfont (T) s 2.620 nx sp (h) s sp (e ) s 30.000 nx sp (e) s
  251. 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
  252. 30.000 nx sp (f) s 2.620 nx sp (o) s 2.640 nx sp (r ) s 30.000 nx sp (") s
  253. (Courier02400240) getfont 2.620 nx sp (y) s sp (y) s 2.640 nx sp (t) s 2.620 nx sp (e) s
  254. 2.640 nx sp (x) s 2.620 nx sp (t) s (Palatino-Roman02400240) getfont 2.640 nx sp (" ) s
  255. 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
  256. 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
  257. (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
  258. (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
  259. 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
  260. (Palatino-Italic02400240) getfont (p) s 2.640 nx sp (a) s 2.620 nx sp (r) s
  261. 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
  262. (Palatino-Roman02400240) getfont 2.640 nx sp (. ) s 30.000 nx sp (U) s 2.620 nx sp
  263. (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
  264. 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
  265. (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
  266. 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
  267. 5733 ss 1442 5733 m (Palatino-Roman02400240) getfont (wrong ) s 17.000 nx sp (for ) s
  268. sp (the ) s sp (scanner ) s sp (generator ) s sp (actually ) s sp (being ) s sp (used. ) s sp ( ) s
  269. sp (To ) s sp (change ) s sp (the ) s sp (definition, ) s sp (the ) s sp (macro ) s sp
  270. (Palatino-Italic02400240) getfont 6021 ss 1442 6021 m
  271. (Palatino-Italic02400240) getfont (YYTEXT_DECL) s
  272. (Palatino-Roman02400240) getfont ( may be redefined at the top of your wacco grammar if you wish to use flex:) s
  273. 6349 ss 1440 6349 m (Palatino-Roman02400240) getfont
  274. (Courier02400240) getfont 6677 ss 1440 6677 m (Courier02400240) getfont
  275. 720.000 nx sp ({) s 7005 ss 1440 7005 m (Courier02400240) getfont sp (#undef YYTEXT_DECL) s
  276. 7333 ss 1440 7333 m (Courier02400240) getfont sp (#define YYTEXT_DECL char *yytext) s
  277. 7661 ss 1440 7661 m (Courier02400240) getfont sp (}) s 7989 ss 1440 7989 m
  278. (Courier02400240) getfont sp (...) s (Palatino-Roman02400240) getfont 8317 ss
  279. 1440 8317 m (Palatino-Roman02400240) getfont (Palatino-Roman02400240) getfont
  280. 8645 ss 1440 8645 m (Palatino-Roman02400240) getfont
  281. (Palatino-Roman02400240) getfont (Palatino-Roman02400240) getfont
  282. showpage vm_state restore
  283. X
  284. X
  285. save /vm_state E def [1 0 0 -1 0 0] concat 0.050000 0.050000 SC .5 SLW
  286. 0 -15840 TR 0 RO
  287. 0 0 0 15840 12240 15840 12240 0 pageboundary clip
  288. userdict /#copies 1 put statusdict /manualfeed false put 1253 ss 1440 1253 m
  289. (Palatino-Roman02400240) getfont (AvantGarde-Demi02400240) getfont 1677 ss
  290. 4196 1677 m (AvantGarde-Demi02400240) getfont ( ) s
  291. (AvantGarde-Demi03200320) getfont (Example Wacco Grammar) s
  292. (AvantGarde-Demi02400240) getfont (Palatino-Roman02400240) getfont 2005 ss
  293. 1440 2005 m (Palatino-Roman02400240) getfont 2333 ss 1440 2333 m
  294. (Palatino-Roman02400240) getfont 2661 ss 1440 2661 m
  295. (Palatino-Roman02400240) getfont (// This is the usual required calculator sample.  It can still use) s
  296. 2989 ss 1440 2989 m (Palatino-Roman02400240) getfont (// a LOT of work, but it illustrates the basics.  Note that the) s
  297. 3317 ss 1440 3317 m (Palatino-Roman02400240) getfont (// precedence of operators is all wrong.) s
  298. 3645 ss 1440 3645 m (Palatino-Roman02400240) getfont
  299. (Courier02400240) getfont 3973 ss 1440 3973 m (Courier02400240) getfont ({) s
  300. 4301 ss 1440 4301 m (Courier02400240) getfont (#include <stdio.h>) s 4629 ss
  301. 1440 4629 m (Courier02400240) getfont (#include <stdlib.h>) s 4957 ss
  302. 1440 4957 m (Courier02400240) getfont (}) s 5285 ss 1440 5285 m
  303. (Courier02400240) getfont 5613 ss 1440 5613 m (Courier02400240) getfont (calc) s
  304. 5941 ss 1440 5941 m (Courier02400240) getfont 720.000 nx sp (:) s 1296.000 nx sp
  305. (%{) s 6269 ss 1440 6269 m (Courier02400240) getfont 720.000 nx sp
  306. 1440.000 nx sp sp (while \(w_nexttoken\(\) != EOI\) {) s 6597 ss 1440 6597 m
  307. (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp (%}) s 6925 ss
  308. 1440 6925 m (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp (expr \([] | '=' | ';' | ','\)) s
  309. 7253 ss 1440 7253 m (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp (%{) s
  310. 7581 ss 1440 7581 m (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp sp
  311. (printf\("%f\\n", $expr\);) s 7909 ss 1440 7909 m (Courier02400240) getfont
  312. 720.000 nx sp 1440.000 nx sp sp (}) s 8237 ss 1440 8237 m
  313. (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp (%}) s 8565 ss
  314. 1440 8565 m (Courier02400240) getfont 720.000 nx sp (| []) s 8893 ss 1440 8893 m
  315. (Courier02400240) getfont sp (;) s 9221 ss 1440 9221 m (Courier02400240) getfont
  316. 9549 ss 1440 9549 m (Courier02400240) getfont (expr<double>) s 9877 ss
  317. 1440 9877 m (Courier02400240) getfont sp (:) s 1296.000 nx sp (term { $binop_expr = $term; }) s
  318. 10205 ss 1440 10205 m (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp
  319. sp (binop_expr { $$ = $binop_expr; }) s 10533 ss 1440 10533 m
  320. (Courier02400240) getfont 720.000 nx sp (;) s 10861 ss 1440 10861 m
  321. (Courier02400240) getfont 11189 ss 1440 11189 m (Courier02400240) getfont (binop_expr<double>) s
  322. 11517 ss 1440 11517 m (Courier02400240) getfont sp (:) s 1296.000 nx sp ('+' expr { $$ += $expr; }) s
  323. 11845 ss 1440 11845 m (Courier02400240) getfont 720.000 nx sp (|) s
  324. 1296.000 nx sp ('-' expr { $$ -= $expr; }) s 12173 ss 1440 12173 m
  325. (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ('*' expr { $$ *= $expr; }) s
  326. 12501 ss 1440 12501 m (Courier02400240) getfont 720.000 nx sp (|) s
  327. 1296.000 nx sp ('/' expr { $$ /= $expr; }) s 12829 ss 1440 12829 m
  328. (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ('&' expr { $$ = \(int\)$$ & \(int\)$expr; }) s
  329. 13157 ss 1440 13157 m (Courier02400240) getfont 720.000 nx sp (|) s
  330. 1296.000 nx sp ('|' expr { $$ = \(int\)$$ | \(int\)$expr; }) s 13485 ss
  331. 1440 13485 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ('^' expr { $$ = \(int\)$$ ^ \(int\)$expr; }) s
  332. 13813 ss 1440 13813 m (Courier02400240) getfont 720.000 nx sp (|) s
  333. 1296.000 nx sp ("<<" expr { $$ = \(int\)$$ << \(int\)$expr; }) s 14141 ss
  334. 1440 14141 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp (">>" expr { $$ = \(int\)$$ >> \(int\)$expr; }) s
  335. 14469 ss 1440 14469 m (Courier02400240) getfont 720.000 nx sp (|) s
  336. 1296.000 nx sp ("&&" expr { $$ = $$ && $expr; }) s
  337. NP 8415 1725 m 4260 1725 l GS 0.00 SG 1 SLW ST GR 4260 1725 m
  338. showpage vm_state restore
  339. X
  340. X
  341. save /vm_state E def [1 0 0 -1 0 0] concat 0.050000 0.050000 SC .5 SLW
  342. 0 -15840 TR 0 RO
  343. 0 0 0 15840 12240 15840 12240 0 pageboundary clip
  344. userdict /#copies 1 put statusdict /manualfeed false put 1253 ss 1440 1253 m
  345. (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ("||" expr { $$ = $$ || $expr; }) s
  346. 1581 ss 1440 1581 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp
  347. ([]) s 1909 ss 1440 1909 m (Courier02400240) getfont 720.000 nx sp (;) s 2237 ss
  348. 1440 2237 m (Courier02400240) getfont 2565 ss 1440 2565 m
  349. (Courier02400240) getfont (term<double>) s 2893 ss 1440 2893 m
  350. (Courier02400240) getfont sp (:) s 1296.000 nx sp (DOUBLE { $$ = atof\(\(char *\)yytext\); }) s
  351. 3221 ss 1440 3221 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp
  352. ('-' expr { $$ = -$expr; }) s 3549 ss 1440 3549 m (Courier02400240) getfont
  353. 720.000 nx sp (|) s 1296.000 nx sp ('~' expr { $$ = ~\(int\)$expr; }) s 3877 ss
  354. 1440 3877 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp ('!' expr { $$ = !$expr; }) s
  355. 4205 ss 1440 4205 m (Courier02400240) getfont 720.000 nx sp (|) s 1296.000 nx sp
  356. ('\(' expr '\)' { $$ = $expr; }) s 4533 ss 1440 4533 m (Courier02400240) getfont
  357. 720.000 nx sp (;) s 4861 ss 1440 4861 m (Courier02400240) getfont 5189 ss
  358. 1440 5189 m (Courier02400240) getfont ({) s 5517 ss 1440 5517 m
  359. (Courier02400240) getfont sp (main\(\)) s 5845 ss 1440 5845 m
  360. (Courier02400240) getfont sp ({) s 6173 ss 1440 6173 m (Courier02400240) getfont
  361. sp 1440.000 nx sp (w_setfile\(stdin\);) s 6501 ss 1440 6501 m
  362. (Courier02400240) getfont 720.000 nx sp 1440.000 nx sp (calc\(\);) s 6829 ss
  363. 1440 6829 m (Courier02400240) getfont 720.000 nx sp (}) s 7157 ss 1440 7157 m
  364. (Courier02400240) getfont (}) s 7485 ss 1440 7485 m (Courier02400240) getfont
  365. 7813 ss 1440 7813 m (Courier02400240) getfont ($$) s 8141 ss 1440 8141 m
  366. (Courier02400240) getfont 8469 ss 1440 8469 m (Courier02400240) getfont (D) s
  367. 576.000 nx sp ([0-9]) s 8797 ss 1440 8797 m (Courier02400240) getfont (L) s sp ([_A-Za-z]) s
  368. 9125 ss 1440 9125 m (Courier02400240) getfont 9453 ss 1440 9453 m
  369. (Courier02400240) getfont (%%) s 9781 ss 1440 9781 m (Courier02400240) getfont
  370. 10109 ss 1440 10109 m (Courier02400240) getfont (".") s 288.000 nx sp
  371. 1440.000 nx sp ({ return \(int\)EOI; }) s 10437 ss 1440 10437 m
  372. (Courier02400240) getfont 10765 ss 1440 10765 m (Courier02400240) getfont ($DOUBLE) s
  373. 1152.000 nx sp (\() s 103.200 nx sp ({) s sp (D) s sp (}) s sp (+) s sp (\)) s sp (|) s sp (\() s sp
  374. ({) 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
  375. 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
  376. 1442 11053 m (Courier02400240) getfont ({D}+\)|\({D}+\\.{D}+[Ee]-?{D}+\)) s
  377. 11381 ss 1440 11381 m (Courier02400240) getfont 11709 ss 1440 11709 m
  378. (Courier02400240) getfont ("#".*$) s 1296.000 nx sp 1440.000 nx sp (;) s 12037 ss
  379. 1440 12037 m (Courier02400240) getfont 12365 ss 1440 12365 m
  380. (Courier02400240) getfont ([ \\t\\v\\n\\f]) s 576.000 nx sp (;) s 12693 ss
  381. 1440 12693 m (Courier02400240) getfont (.) s sp ({ ) s -12.000 nx sp (w_scanerr\("Illegal ) s
  382. sp (character ) s sp (%d ) s sp (\($c\)", ) s sp (yytext[0], ) s sp (yytext[0]\); ) s sp
  383. 12981 ss 1442 12981 m (Courier02400240) getfont (}) s showpage vm_state restore
  384. X
  385. SHAR_EOF
  386. echo 'File wacco.doc.ps is complete' &&
  387. chmod 0555 wacco.doc.ps ||
  388. echo 'restore of wacco.doc.ps failed'
  389. Wc_c="`wc -c < 'wacco.doc.ps'`"
  390. test 98569 -eq "$Wc_c" ||
  391.     echo 'wacco.doc.ps: original size 98569, current size' "$Wc_c"
  392. rm -f _shar_wnt_.tmp
  393. fi
  394. # ============= wacco.w ==============
  395. if test -f 'wacco.w' -a X"$1" != X"-c"; then
  396.     echo 'x - skipping wacco.w (File already exists)'
  397.     rm -f _shar_wnt_.tmp
  398. else
  399. > _shar_wnt_.tmp
  400. echo 'x - extracting wacco.w (Text)'
  401. sed 's/^X//' << 'SHAR_EOF' > 'wacco.w' &&
  402. {
  403. // Copyright (c) 1991 by Parag Patel.  All Rights Reserved.
  404. static const char rcs_id[] = "$Header: wacco.w,v 1.13 91/02/22 16:04:36 hmgr Exp $";
  405. X
  406. #undef YYTEXT_DECL
  407. #define YYTEXT_DECL char yytext[]
  408. X
  409. #include "defs.h"
  410. X
  411. struct nodedat
  412. {
  413. X    symbol *sym;
  414. X    union
  415. X    {
  416. X        symnode *node;
  417. X        char *alias;
  418. X    };
  419. X    nodedat *prev;
  420. X    nodedat() { sym = NULL; node = NULL; prev = NULL; }
  421. };
  422. X
  423. }
  424. X
  425. program
  426. X    : directives { $code = NULL; } code { startcode = $code; } statlist
  427. X    ;
  428. X
  429. directives
  430. X    : DIRECTIVE
  431. X        {
  432. X            int argc;
  433. X            char **argv = strsep(yytext, " \t", TRUE, &argc);
  434. X            getoptions(argc, argv);
  435. X        }
  436. X    | []
  437. X    ;
  438. X
  439. statlist
  440. X    : statement { $code = NULL; } code { addnonterm($code); } statlist 
  441. X    | []
  442. X    ;
  443. X
  444. statement<symbol*>
  445. X    :    ID
  446. X        {
  447. X            $$ = addsymbol(yytext);
  448. X            if ($$->type == TERMINAL)
  449. X                (void)addnonterm($$);
  450. X            if (startsymbol == NULL) 
  451. X            {
  452. X                startsymbol = $$;
  453. X                $$->usecount += 2;
  454. X            }
  455. X        }
  456. X        idtype
  457. X        {
  458. X            if ($$->rettype != NULL && $idtype != NULL &&
  459. X                    strcmp($$->rettype, $idtype) != 0)
  460. X                scanerr("Two types defined for %s", $$->name);
  461. X
  462. X            if ($$->rettype == NULL)
  463. X                $$->rettype = $idtype;
  464. X            else
  465. X                delete $idtype;
  466. X        }
  467. X        (<boolean> EXPORT { $$ = TRUE; } | [] { $$ = FALSE; })
  468. X        {
  469. X            if ($_)
  470. X            {
  471. X                exportedname = $$->export = TRUE;
  472. X                $$->usecount += 2;
  473. X            }
  474. X        }
  475. X        resyncset ':'
  476. X        {
  477. X            $$->list = $resyncset;
  478. X            nodedat end;
  479. X            end.sym = $concatlist.sym = $orlist.sym = $$;
  480. X            $concatlist.prev = $orlist.prev = &end;
  481. X        }
  482. X        concatlist
  483. X        {
  484. X            symnode *node = $$->node;
  485. X            if (node != NULL)
  486. X            {
  487. X                while (node->or != NULL)
  488. X                    node = node->or;
  489. X                node->or = $concatlist.node;
  490. X            }
  491. X            else
  492. X                node = $$->node = $concatlist.node;
  493. X        }
  494. X        orlist
  495. X        {
  496. X            if (node == NULL)
  497. X                $$->node = $orlist.node;
  498. X            else if (node->or == NULL)
  499. X                node->or = $orlist.node;
  500. X            else
  501. X                node->or->or = $orlist.node;
  502. X        }
  503. X        ';'
  504. X    ;
  505. X
  506. idtype<char*>
  507. X    : '<'    { $$ = readtype(); }
  508. X    | []    { $$ = NULL; }
  509. X    ;
  510. X
  511. concatlist<nodedat>
  512. X    :    {
  513. X            $code = $exprlist.sym = $$.sym;
  514. X            $exprlist.prev = $$.prev;
  515. X        } 
  516. X        code exprlist
  517. X        {
  518. X            if ($code == NULL)
  519. X                $$.node = $exprlist.node;
  520. X            else
  521. X            {
  522. X                $$.node = new symnode;
  523. X                $$.node->sym = $code;
  524. X                $$.node->next = $exprlist.node;
  525. X            }
  526. X        }
  527. X    | []
  528. X    ;
  529. X
  530. orlist<nodedat>
  531. X    :    {
  532. X            $concatlist.sym = $orlist.sym = $$.sym;
  533. X            $concatlist.prev = $orlist.prev = $$.prev;
  534. X        }
  535. X        '|' concatlist orlist
  536. X        {
  537. X            $$.node = $concatlist.node;
  538. X            if ($$.node == NULL)
  539. X                $$.node = $orlist.node;
  540. X            else
  541. X                $$.node->or = $orlist.node;
  542. X        }
  543. X    | []
  544. X    ;
  545. X
  546. X
  547. exprlist<nodedat>
  548. X    :    {
  549. X            $expression.sym = $code = $exprlist.sym = $$.sym;
  550. X            $expression.prev = $exprlist.prev = $$.prev;
  551. X        }
  552. X        expression resyncset code exprlist
  553. X        {
  554. X            $$.node = new symnode;
  555. X            $$.node->sym = $expression.sym;
  556. X            $$.node->alias = $expression.alias;
  557. X            $$.node->next = $exprlist.node;
  558. X            $$.node->list = $resyncset;
  559. X            if ($code != NULL)
  560. X            {
  561. X                $$.node->next = new symnode;
  562. X                $$.node->next->sym = $code;
  563. X                $$.node->next->next = $exprlist.node;
  564. X            }
  565. X        }
  566. X    | []
  567. X    ;
  568. X
  569. resyncset<resynclist*>
  570. X    : '[' resynclist ']'    { $$ = $resynclist; }
  571. X    | []                    { $$ = NULL; }
  572. X    ;
  573. X
  574. resynclist<resynclist*>
  575. X    : resyncitem (',' resynclist { $$=$resynclist; } | [] { $$ = NULL; })
  576. X            {
  577. X                $$ = $resyncitem;
  578. X                $$->next = $_;
  579. X            }
  580. X    ;
  581. X
  582. resyncitem<resynclist*>
  583. X    : settype=first resyncid settype=follow
  584. X        {
  585. X            $$ = $resyncid;
  586. X            $$->first = $first == 0 && $follow == 0 ? 1 : $first;
  587. X            $$->follow = $follow;
  588. X        }
  589. X    ;
  590. X
  591. settype
  592. X    : '+'    { $$ = 1; }
  593. X    | '-'    { $$ = -1; }
  594. X    | []    { $$ = 0; }
  595. X    ;
  596. X
  597. resyncid<resynclist*>
  598. X    : ID            { $$ = new resynclist(yytext); }
  599. X    | NULLSYM        { $$ = new resynclist(NULL); }
  600. X    | STRING        { $$ = new resynclist(yytext); }
  601. X    | CHARACTER        { $$ = new resynclist(yytext); }
  602. X    | '#' count        { $$ = new resynclist(NULL);
  603. X                        $$->paren = $count == 0 ? 1 : $count; }
  604. X    ;
  605. X
  606. count
  607. X    : INT    { $$ = atoi(yytext); }
  608. X    | '*'    { $$ = -1; }
  609. X    | []    { $$ = 0; }
  610. X    ;
  611. X
  612. alias<char*>
  613. X    : '=' (ID { $$ = yytext; } | INT { $$ = yytext; })
  614. X            { $$ = strdup($_); }
  615. X    | []    { $$ = NULL; }
  616. X    ;
  617. X
  618. expression<nodedat>
  619. X    : ID        { $$.sym = addsymbol(yytext);  $$.sym->usecount++; }
  620. X        alias    { $$.alias = $alias; }
  621. X    | NULLSYM    { $$.sym = getsymbol(EMPTY); }
  622. X    | '#' count alias
  623. X        {
  624. X            nodedat *p = $$.prev;
  625. X            for (int i = 0; p != NULL && ($count < 0 || i < $count); i++)
  626. X            {
  627. X                $$.sym = p->sym;
  628. X                p = p->prev;
  629. X            }
  630. X            if ($count > 0 && i < $count)
  631. X                scanerr("not that many parentheses");
  632. X            $$.sym->usecount++;
  633. X            $$.alias = $alias;
  634. X        }
  635. X    | STRING
  636. X        {
  637. X            $$.sym = addsymbol(yytext);
  638. X            $$.sym->lexstr = $$.sym->name;
  639. X            gotlexstr = TRUE;
  640. X        }
  641. X    | CHARACTER
  642. X        {
  643. X            $$.sym = addsymbol(yytext);
  644. X            if ($$.sym->lexstr == NULL)
  645. X            {
  646. X                char *s = strdup(yytext);
  647. X                s[0] = s[strlen(s) - 1] = '"';
  648. X                $$.sym->lexstr = s;
  649. X            }
  650. X        }
  651. X    | '(' idtype
  652. X        {
  653. X            char *type = $$.sym->rettype;
  654. X            char *name = $$.sym->realname;
  655. X            static int num = 1;
  656. X
  657. X            addnonterm($$.sym = addsymbol(strbldf("_P%d", num++)));
  658. X            $$.sym->type = NONTERMINAL;
  659. X            $$.sym->rettype = $idtype == NULL ? type : $idtype;
  660. X            $$.sym->realname = name;
  661. X            $$.sym->usecount++;
  662. X
  663. X            $concatlist.sym = $orlist.sym = $$.sym;
  664. X            $concatlist.prev = $orlist.prev = &$$;
  665. X        }
  666. X        concatlist orlist ')' alias
  667. X        {
  668. X            $$.sym->node = $concatlist.node;
  669. X            if ($$.sym->node == NULL)
  670. X                $$.sym->node = $orlist.node;
  671. X            else
  672. X                $$.sym->node->or = $orlist.node;
  673. X            $$.alias = $alias;
  674. X        }
  675. X    ;
  676. X
  677. code<symbol*>
  678. X    :    {
  679. X            int rettype = 0;
  680. X            int line = currline();
  681. X        }
  682. X        (<char*>
  683. X            '{'        { $$ = readcode(rettype); }
  684. X            | BLOCKCODE    { $$ = readblockcode(rettype); }
  685. X        )
  686. X        {
  687. X            if ($$ != NULL)
  688. X                $$->usedret = rettype;
  689. X
  690. X            $$ = new symbol;
  691. X            $$->name = "<code>";
  692. X            $$->type = CODE;
  693. X            $$->code = $_;
  694. X            $$->line = line;
  695. X        }
  696. X    | []    { $$ = NULL; }
  697. X    ;
  698. SHAR_EOF
  699. chmod 0444 wacco.w ||
  700. echo 'restore of wacco.w failed'
  701. Wc_c="`wc -c < 'wacco.w'`"
  702. test 5585 -eq "$Wc_c" ||
  703.     echo 'wacco.w: original size 5585, current size' "$Wc_c"
  704. rm -f _shar_wnt_.tmp
  705. fi
  706. rm -f _shar_seq_.tmp
  707. echo You have unpacked the last part
  708. exit 0
  709. exit 0 # Just in case...
  710. -- 
  711. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  712. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  713. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  714. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  715.