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