]> git.saurik.com Git - wxWidgets.git/blame - src/common/dosyacc.c
Added chapter on collection and container classes to contents
[wxWidgets.git] / src / common / dosyacc.c
CommitLineData
2bda0e17
KB
1#ifndef lint
2static char yysccsid[] = "@(#)yaccpar 1.7 (Berkeley) 09/09/90";
3#endif
4#define YYBYACC 1
5#line 2 "parser.y"
6#include "string.h"
004fd0c8 7#if defined(_MSC_VER) || defined(__VISAGECPP__)
b8c631bb
JS
8#include <io.h>
9#endif
2bda0e17
KB
10#include "wx/expr.h"
11
12#ifndef __EXTERN_C__
13#define __EXTERN_C__ 1
14#endif
15
16#if defined(__cplusplus) || defined(__STDC__)
17#if defined(__cplusplus) && defined(__EXTERN_C__)
18extern "C" {
19#endif
20#endif
21int yylex(void);
22int yylook(void);
23int yywrap(void);
24int yyback(int *, int);
25
26/* You may need to put /DLEX_SCANNER in your makefile
27 * if you're using LEX!
2bda0e17
KB
28 */
29#ifdef LEX_SCANNER
30/* int yyoutput(int); */
31void yyoutput(int);
32#else
33void yyoutput(int);
34#endif
35
36#if defined(__cplusplus) || defined(__STDC__)
37#if defined(__cplusplus) && defined(__EXTERN_C__)
38}
39#endif
40#endif
41#line 36 "parser.y"
42typedef union {
43 char *s;
44/* struct pexpr *expr; */
45} YYSTYPE;
46#line 44 "y_tab.c"
47#define INTEGER 1
48#define WORD 2
49#define STRING 3
50#define PERIOD 13
51#define OPEN 4
52#define CLOSE 5
53#define COMMA 6
54#define NEWLINE 7
55#define ERROR 8
56#define OPEN_SQUARE 9
57#define CLOSE_SQUARE 10
58#define EQUALS 11
59#define EXP 14
60#define YYERRCODE 256
61short yylhs[] = { -1,
62 0, 0, 1, 1, 1, 2, 2, 2, 3, 3,
63 3, 4, 4, 5, 5, 5, 5, 5, 5, 5,
64};
65short yylen[] = { 2,
66 0, 2, 2, 2, 2, 4, 2, 3, 0, 1,
67 3, 3, 1, 1, 1, 1, 3, 3, 5, 1,
68};
69short yydefred[] = { 1,
70 0, 0, 0, 0, 2, 0, 5, 3, 0, 0,
71 0, 15, 7, 20, 0, 0, 13, 4, 0, 0,
72 0, 0, 8, 0, 6, 0, 18, 0, 12, 11,
73 0, 19,
74};
75short yydgoto[] = { 1,
76 5, 14, 15, 16, 17,
77};
78short yysindex[] = { 0,
79 -2, 9, 2, 1, 0, 10, 0, 0, 11, -5,
80 17, 0, 0, 0, 14, -1, 0, 0, 33, 38,
81 41, 16, 0, 11, 0, 29, 0, 40, 0, 0,
82 44, 0,
83};
84short yyrindex[] = { 0,
85 0, 0, 0, 0, 0, 0, 0, 0, 42, 21,
86 24, 0, 0, 0, 0, 30, 0, 0, 0, 0,
87 0, 0, 0, 31, 0, 27, 0, 24, 0, 0,
88 0, 0,
89};
90short yygindex[] = { 0,
91 0, 45, -8, 0, 26,
92};
93#define YYTABLESIZE 254
94short yytable[] = { 3,
95 19, 10, 11, 12, 24, 9, 4, 20, 21, 4,
96 13, 10, 11, 12, 8, 30, 10, 28, 12, 4,
97 9, 7, 18, 23, 4, 16, 16, 22, 14, 14,
98 16, 17, 17, 14, 10, 9, 17, 25, 26, 10,
99 9, 27, 31, 9, 32, 6, 9, 29, 0, 0,
100 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
101 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
102 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
103 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
104 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
105 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
106 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
107 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
108 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
109 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
110 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
111 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
112 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
113 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
114 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
115 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
116 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
117 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
118 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
119 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
120 0, 0, 0, 2,
121};
122short yycheck[] = { 2,
123 9, 1, 2, 3, 6, 4, 9, 13, 14, 9,
124 10, 1, 2, 3, 13, 24, 1, 2, 3, 9,
125 4, 13, 13, 10, 9, 5, 6, 11, 5, 6,
126 10, 5, 6, 10, 5, 5, 10, 5, 1, 10,
127 10, 1, 14, 4, 1, 1, 5, 22, -1, -1,
128 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
129 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
130 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
131 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
132 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
133 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
134 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
135 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
136 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
137 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
138 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
139 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
140 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
141 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
142 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
143 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
144 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
145 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
146 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
147 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
148 -1, -1, -1, 256,
149};
150#define YYFINAL 1
151#ifndef YYDEBUG
152#define YYDEBUG 0
153#endif
154#define YYMAXTOKEN 14
155#if YYDEBUG
156char *yyname[] = {
157"end-of-file","INTEGER","WORD","STRING","OPEN","CLOSE","COMMA","NEWLINE",
158"ERROR","OPEN_SQUARE","CLOSE_SQUARE","EQUALS",0,"PERIOD","EXP",
159};
160char *yyrule[] = {
161"$accept : commands",
162"commands :",
163"commands : commands command",
164"command : WORD PERIOD",
165"command : expr PERIOD",
166"command : error PERIOD",
167"expr : WORD OPEN arglist CLOSE",
168"expr : OPEN_SQUARE CLOSE_SQUARE",
169"expr : OPEN_SQUARE arglist CLOSE_SQUARE",
170"arglist :",
171"arglist : arg",
172"arglist : arg COMMA arglist",
173"arg : WORD EQUALS arg1",
174"arg : arg1",
175"arg1 : WORD",
176"arg1 : STRING",
177"arg1 : INTEGER",
178"arg1 : INTEGER PERIOD INTEGER",
179"arg1 : INTEGER EXP INTEGER",
180"arg1 : INTEGER PERIOD INTEGER EXP INTEGER",
181"arg1 : expr",
182};
183#endif
184#define yyclearin (yychar=(-1))
185#define yyerrok (yyerrflag=0)
186#ifdef YYSTACKSIZE
187#ifndef YYMAXDEPTH
188#define YYMAXDEPTH YYSTACKSIZE
189#endif
190#else
191#ifdef YYMAXDEPTH
192#define YYSTACKSIZE YYMAXDEPTH
193#else
194#define YYSTACKSIZE 600
195#define YYMAXDEPTH 600
196#endif
197#endif
198int yydebug;
199int yynerrs;
200int yyerrflag;
201int yychar;
202short *yyssp;
203YYSTYPE *yyvsp;
204YYSTYPE yyval;
205YYSTYPE yylval;
206short yyss[YYSTACKSIZE];
207YYSTYPE yyvs[YYSTACKSIZE];
208#define yystacksize YYSTACKSIZE
209#line 118 "parser.y"
210
a367b9b3
JS
211#ifdef IDE_INVOKED
212#include "../common/doslex.c"
213#else
2bda0e17 214#include "../common/lex_yy.c"
a367b9b3 215#endif
2bda0e17
KB
216
217/*
218void yyerror(s)
219char *s;
220{
221 syntax_error(s);
222}
223*/
224
225/* Ansi prototype. If this doesn't work for you... uncomment
226 the above instead.
227 */
228
229void yyerror(char *s)
230{
231 syntax_error(s);
232}
233
234/*
235 * Unfortunately, my DOS version of FLEX
236 * requires yywrap to be #def'ed, whereas
237 * the UNIX flex expects a proper function.
238 */
239
240/* Not sure if __SC__ is the appropriate thing
241 * to test
242 */
243
244#ifndef __SC__
245#ifdef USE_DEFINE
246#ifndef yywrap
247#define yywrap() 1
248#endif
249#else
c49359e0
DW
250# if !(defined(__VISAGECPP__) && __IBMC__ >= 400)
251/* VA 4.0 thinks this is multiply defined (in lex_yy.c) */
252 int yywrap() { return 1; }
253# endif
2bda0e17
KB
254#endif
255#endif
256#line 247 "y_tab.c"
257#define YYABORT goto yyabort
258#define YYACCEPT goto yyaccept
259#define YYERROR goto yyerrlab
260int
261yyparse()
262{
263 register int yym, yyn, yystate;
264#if YYDEBUG
265 register char *yys;
266 extern char *getenv();
267
004fd0c8
DW
268 yys = getenv("YYDEBUG");
269 if (yys)
2bda0e17
KB
270 {
271 yyn = *yys;
272 if (yyn >= '0' && yyn <= '9')
273 yydebug = yyn - '0';
274 }
275#endif
276
277 yynerrs = 0;
278 yyerrflag = 0;
279 yychar = (-1);
280
281 yyssp = yyss;
282 yyvsp = yyvs;
283 *yyssp = yystate = 0;
284
285yyloop:
004fd0c8
DW
286 yyn = yydefred[yystate];
287 if (yyn != 0) goto yyreduce;
2bda0e17
KB
288 if (yychar < 0)
289 {
290 if ((yychar = yylex()) < 0) yychar = 0;
291#if YYDEBUG
292 if (yydebug)
293 {
294 yys = 0;
295 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
296 if (!yys) yys = "illegal-symbol";
297 printf("yydebug: state %d, reading %d (%s)\n", yystate,
298 yychar, yys);
299 }
300#endif
301 }
302 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
303 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
304 {
305#if YYDEBUG
306 if (yydebug)
307 printf("yydebug: state %d, shifting to state %d\n",
308 yystate, yytable[yyn]);
309#endif
310 if (yyssp >= yyss + yystacksize - 1)
311 {
312 goto yyoverflow;
313 }
314 *++yyssp = yystate = yytable[yyn];
315 *++yyvsp = yylval;
316 yychar = (-1);
317 if (yyerrflag > 0) --yyerrflag;
318 goto yyloop;
319 }
320 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
321 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
322 {
323 yyn = yytable[yyn];
324 goto yyreduce;
325 }
326 if (yyerrflag) goto yyinrecovery;
327#ifdef lint
328 goto yynewerror;
329#endif
330yynewerror:
331 yyerror("syntax error");
332#ifdef lint
333 goto yyerrlab;
334#endif
335yyerrlab:
336 ++yynerrs;
337yyinrecovery:
338 if (yyerrflag < 3)
339 {
340 yyerrflag = 3;
341 for (;;)
342 {
343 if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
344 yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
345 {
346#if YYDEBUG
347 if (yydebug)
348 printf("yydebug: state %d, error recovery shifting\
349 to state %d\n", *yyssp, yytable[yyn]);
350#endif
351 if (yyssp >= yyss + yystacksize - 1)
352 {
353 goto yyoverflow;
354 }
355 *++yyssp = yystate = yytable[yyn];
356 *++yyvsp = yylval;
357 goto yyloop;
358 }
359 else
360 {
361#if YYDEBUG
362 if (yydebug)
363 printf("yydebug: error recovery discarding state %d\n",
364 *yyssp);
365#endif
366 if (yyssp <= yyss) goto yyabort;
367 --yyssp;
368 --yyvsp;
369 }
370 }
371 }
372 else
373 {
374 if (yychar == 0) goto yyabort;
375#if YYDEBUG
376 if (yydebug)
377 {
378 yys = 0;
379 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
380 if (!yys) yys = "illegal-symbol";
381 printf("yydebug: state %d, error recovery discards token %d (%s)\n",
382 yystate, yychar, yys);
383 }
384#endif
385 yychar = (-1);
386 goto yyloop;
387 }
388yyreduce:
389#if YYDEBUG
390 if (yydebug)
391 printf("yydebug: state %d, reducing by rule %d (%s)\n",
392 yystate, yyn, yyrule[yyn]);
393#endif
394 yym = yylen[yyn];
395 yyval = yyvsp[1-yym];
396 switch (yyn)
397 {
398case 3:
399#line 68 "parser.y"
5b077d48 400{process_command(proio_cons(wxmake_word(yyvsp[-1].s), NULL)); free(yyvsp[-1].s);}
2bda0e17
KB
401break;
402case 4:
403#line 70 "parser.y"
404{process_command(yyvsp[-1].s);}
405break;
406case 5:
407#line 72 "parser.y"
408{syntax_error("Unrecognized command.");}
409break;
410case 6:
411#line 76 "parser.y"
5b077d48 412{yyval.s = proio_cons(wxmake_word(yyvsp[-3].s), yyvsp[-1].s); free(yyvsp[-3].s);}
2bda0e17
KB
413break;
414case 7:
415#line 78 "parser.y"
416{yyval.s = proio_cons(NULL, NULL);}
417break;
418case 8:
419#line 80 "parser.y"
420{yyval.s = yyvsp[-1].s; }
421break;
422case 9:
423#line 84 "parser.y"
424{yyval.s = NULL;}
425break;
426case 10:
427#line 86 "parser.y"
428{yyval.s = proio_cons(yyvsp[0].s, NULL);}
429break;
430case 11:
431#line 89 "parser.y"
432{yyval.s = proio_cons(yyvsp[-2].s, yyvsp[0].s);}
433break;
434case 12:
435#line 93 "parser.y"
5b077d48 436{yyval.s = proio_cons(wxmake_word("="), proio_cons(wxmake_word(yyvsp[-2].s), proio_cons(yyvsp[0].s, NULL)));
2bda0e17
KB
437 free(yyvsp[-2].s); }
438break;
439case 13:
440#line 96 "parser.y"
441{yyval.s = yyvsp[0].s; }
442break;
443case 14:
444#line 99 "parser.y"
5b077d48 445{yyval.s = wxmake_word(yyvsp[0].s); free(yyvsp[0].s);}
2bda0e17
KB
446break;
447case 15:
448#line 101 "parser.y"
5b077d48 449{yyval.s = wxmake_string(yyvsp[0].s); free(yyvsp[0].s);}
2bda0e17
KB
450break;
451case 16:
452#line 103 "parser.y"
5b077d48 453{yyval.s = wxmake_integer(yyvsp[0].s); free(yyvsp[0].s);}
2bda0e17
KB
454break;
455case 17:
456#line 105 "parser.y"
5b077d48 457{yyval.s = wxmake_real(yyvsp[-2].s, yyvsp[0].s); free(yyvsp[-2].s); free(yyvsp[0].s); }
2bda0e17
KB
458break;
459case 18:
460#line 107 "parser.y"
5b077d48 461{yyval.s = wxmake_exp(yyvsp[-2].s, yyvsp[0].s); free(yyvsp[-2].s); free(yyvsp[0].s); }
2bda0e17
KB
462break;
463case 19:
464#line 110 "parser.y"
5b077d48 465{yyval.s = wxmake_exp2(yyvsp[-4].s, yyvsp[-2].s, yyvsp[0].s); free(yyvsp[-4].s); free(yyvsp[-2].s);
2bda0e17
KB
466 free(yyvsp[0].s); }
467break;
468case 20:
469#line 114 "parser.y"
470{yyval.s = yyvsp[0].s;}
471break;
472#line 461 "y_tab.c"
473 }
474 yyssp -= yym;
475 yystate = *yyssp;
476 yyvsp -= yym;
477 yym = yylhs[yyn];
478 if (yystate == 0 && yym == 0)
479 {
480#if YYDEBUG
481 if (yydebug)
482 printf("yydebug: after reduction, shifting from state 0 to\
483 state %d\n", YYFINAL);
484#endif
485 yystate = YYFINAL;
486 *++yyssp = YYFINAL;
487 *++yyvsp = yyval;
488 if (yychar < 0)
489 {
490 if ((yychar = yylex()) < 0) yychar = 0;
491#if YYDEBUG
492 if (yydebug)
493 {
494 yys = 0;
495 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
496 if (!yys) yys = "illegal-symbol";
497 printf("yydebug: state %d, reading %d (%s)\n",
498 YYFINAL, yychar, yys);
499 }
500#endif
501 }
502 if (yychar == 0) goto yyaccept;
503 goto yyloop;
504 }
505 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
506 yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
507 yystate = yytable[yyn];
508 else
509 yystate = yydgoto[yym];
510#if YYDEBUG
511 if (yydebug)
512 printf("yydebug: after reduction, shifting from state %d \
513to state %d\n", *yyssp, yystate);
514#endif
515 if (yyssp >= yyss + yystacksize - 1)
516 {
517 goto yyoverflow;
518 }
519 *++yyssp = yystate;
520 *++yyvsp = yyval;
521 goto yyloop;
522yyoverflow:
523 yyerror("yacc stack overflow");
524yyabort:
525 return (1);
526yyaccept:
527 return (0);
528}