1 mike 1.1 /*
2 **==============================================================================
3 **
4 ** Open Management Infrastructure (OMI)
5 **
6 ** Copyright (c) Microsoft Corporation
7 **
8 ** Licensed under the Apache License, Version 2.0 (the "License"); you may not
9 ** use this file except in compliance with the License. You may obtain a copy
10 ** of the License at
11 **
12 ** http://www.apache.org/licenses/LICENSE-2.0
13 **
14 ** THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 ** KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
16 ** WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
17 ** MERCHANTABLITY OR NON-INFRINGEMENT.
18 **
19 ** See the Apache 2 License for the specific language governing permissions
20 ** and limitations under the License.
21 **
22 mike 1.1 **==============================================================================
23 */
24
25 #ifndef lint
26 static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
27 #endif
28
29 #define YYBYACC 1
30 #define YYMAJOR 1
31 #define YYMINOR 9
32 #define YYPATCH 20110908
33
34 #define YYEMPTY (-1)
35 #define yyclearin (yychar = YYEMPTY)
36 #define yyerrok (yyerrflag = 0)
37 #define YYRECOVERING() (yyerrflag != 0)
38
39
40 #ifndef yyparse
41 #define yyparse wqlparse
42 #endif /* yyparse */
43 mike 1.1
44 #ifndef yylex
45 #define yylex wqllex
46 #endif /* yylex */
47
48 #ifndef yyerror
49 #define yyerror wqlerror
50 #endif /* yyerror */
51
52 #ifndef yychar
53 #define yychar wqlchar
54 #endif /* yychar */
55
56 #ifndef yyval
57 #define yyval wqlval
58 #endif /* yyval */
59
60 #ifndef yylval
61 #define yylval wqllval
62 #endif /* yylval */
63
64 mike 1.1 #ifndef yydebug
65 #define yydebug wqldebug
66 #endif /* yydebug */
67
68 #ifndef yynerrs
69 #define yynerrs wqlnerrs
70 #endif /* yynerrs */
71
72 #ifndef yyerrflag
73 #define yyerrflag wqlerrflag
74 #endif /* yyerrflag */
75
76 #ifndef yylhs
77 #define yylhs wqllhs
78 #endif /* yylhs */
79
80 #ifndef yylen
81 #define yylen wqllen
82 #endif /* yylen */
83
84 #ifndef yydefred
85 mike 1.1 #define yydefred wqldefred
86 #endif /* yydefred */
87
88 #ifndef yydgoto
89 #define yydgoto wqldgoto
90 #endif /* yydgoto */
91
92 #ifndef yysindex
93 #define yysindex wqlsindex
94 #endif /* yysindex */
95
96 #ifndef yyrindex
97 #define yyrindex wqlrindex
98 #endif /* yyrindex */
99
100 #ifndef yygindex
101 #define yygindex wqlgindex
102 #endif /* yygindex */
103
104 #ifndef yytable
105 #define yytable wqltable
106 mike 1.1 #endif /* yytable */
107
108 #ifndef yycheck
109 #define yycheck wqlcheck
110 #endif /* yycheck */
111
112 #ifndef yyname
113 #define yyname wqlname
114 #endif /* yyname */
115
116 #ifndef yyrule
117 #define yyrule wqlrule
118 #endif /* yyrule */
119 #define YYPREFIX "wql"
120
121 #define YYPURE 0
122
123 #line 2 "wql.y"
124
125 #include <stdio.h>
126 #include "state.h"
127 mike 1.1 #include "wql.h"
128
129 #if 0
130 # define YACCTRACE(MSG) \
131 printf("WQL_TRACE: %s(%d): %s\n", __FILE__, __LINE__, #MSG)
132 #else
133 # define YACCTRACE(MSG)
134 #endif
135
136 extern int wqllex();
137 extern void wqlerror(const char* msg);
138
139 extern int yylex();
140 extern void yyerror(const char* msg);
141
142 extern void* wqlmalloc(size_t size);
143 extern MI_Char* wqlstrdup(const MI_Char* str);
144
145 #line 25 "wql.y"
146 #ifdef YYSTYPE
147 #undef YYSTYPE_IS_DECLARED
148 mike 1.1 #define YYSTYPE_IS_DECLARED 1
149 #endif
150 #ifndef YYSTYPE_IS_DECLARED
151 #define YYSTYPE_IS_DECLARED 1
152 typedef union
153 {
154 WQL_Symbol symbol;
155 MI_Char* string;
156 long long integer;
157 double real;
158 unsigned char boolean;
159 } YYSTYPE;
160 #endif /* !YYSTYPE_IS_DECLARED */
161 #line 137 "y.tab.c"
162
163 /* compatibility with bison */
164 #ifdef YYPARSE_PARAM
165 /* compatibility with FreeBSD */
166 # ifdef YYPARSE_PARAM_TYPE
167 # define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
168 # else
169 mike 1.1 # define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
170 # endif
171 #else
172 # define YYPARSE_DECL() yyparse(void)
173 #endif
174
175 /* Parameters sent to lex. */
176 #ifdef YYLEX_PARAM
177 # define YYLEX_DECL() yylex(void *YYLEX_PARAM)
178 # define YYLEX yylex(YYLEX_PARAM)
179 #else
180 # define YYLEX_DECL() yylex(void)
181 # define YYLEX yylex()
182 #endif
183
184 /* Parameters sent to yyerror. */
185 #define YYERROR_DECL() yyerror(const char *s)
186 #define YYERROR_CALL(msg) yyerror(msg)
187
188 extern int YYPARSE_DECL();
189
190 mike 1.1 #define WQL_OR 257
191 #define WQL_AND 258
192 #define WQL_NOT 259
193 #define WQL_ERROR 260
194 #define WQL_LT 261
195 #define WQL_FROM 262
196 #define WQL_LE 263
197 #define WQL_WHERE 264
198 #define WQL_NE 265
199 #define WQL_GT 266
200 #define WQL_REAL 267
201 #define WQL_EQ 268
202 #define WQL_SELECT 269
203 #define WQL_GE 270
204 #define WQL_NULL 271
205 #define WQL_IDENTIFIER 272
206 #define WQL_BOOLEAN 273
207 #define WQL_INTEGER 274
208 #define WQL_STRING 275
209 #define YYERRCODE 256
210 static const short wqllhs[] = { -1,
211 mike 1.1 0, 0, 2, 2, 4, 4, 3, 3, 3, 3,
212 3, 5, 5, 5, 5, 5, 5, 1, 1, 1,
213 1, 1, 1,
214 };
215 static const short wqllen[] = { 2,
216 4, 6, 1, 1, 1, 3, 3, 2, 3, 3,
217 1, 3, 3, 3, 3, 3, 3, 1, 1, 1,
218 1, 1, 1,
219 };
220 static const short wqldefred[] = { 0,
221 0, 0, 5, 3, 0, 0, 0, 0, 0, 6,
222 0, 0, 20, 23, 22, 18, 19, 21, 0, 0,
223 0, 11, 8, 0, 0, 0, 0, 0, 0, 0,
224 0, 0, 7, 14, 15, 13, 16, 12, 17, 0,
225 9,
226 };
227 static const short wqldgoto[] = { 2,
228 20, 5, 21, 6, 22,
229 };
230 static const short wqlsindex[] = { -249,
231 -36, 0, 0, 0, -233, -14, -241, -240, -231, 0,
232 mike 1.1 -40, -40, 0, 0, 0, 0, 0, 0, -40, -258,
233 -244, 0, 0, -37, -256, -256, -256, -256, -256, -256,
234 -40, -40, 0, 0, 0, 0, 0, 0, 0, -224,
235 0,
236 };
237 static const short wqlrindex[] = { 0,
238 0, 0, 0, 0, 0, -227, 0, 0, 36, 0,
239 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
240 37, 0, 0, 0, 0, 0, 0, 0, 0, 0,
241 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
242 0,
243 };
244 static const short wqlgindex[] = { 0,
245 -2, 0, -10, 0, 0,
246 };
247 #define YYTABLESIZE 258
248 static const short wqltable[] = { 19,
249 10, 23, 25, 33, 26, 4, 27, 28, 24, 29,
250 13, 30, 31, 32, 14, 15, 16, 17, 18, 1,
251 40, 41, 34, 35, 36, 37, 38, 39, 7, 8,
252 9, 10, 11, 32, 4, 1, 2, 0, 0, 0,
253 mike 1.1 0, 10, 0, 0, 0, 0, 0, 0, 0, 0,
254 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
255 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
256 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
257 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
258 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
259 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
260 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
261 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
262 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
263 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
264 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
265 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
266 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
267 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
268 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
269 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
270 0, 0, 0, 0, 0, 0, 0, 0, 12, 31,
271 32, 0, 0, 0, 0, 0, 13, 0, 0, 0,
272 14, 15, 16, 17, 18, 3, 0, 0, 0, 0,
273 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
274 mike 1.1 0, 0, 0, 0, 0, 0, 0, 10,
275 };
276 static const short wqlcheck[] = { 40,
277 0, 12, 261, 41, 263, 42, 265, 266, 19, 268,
278 267, 270, 257, 258, 271, 272, 273, 274, 275, 269,
279 31, 32, 25, 26, 27, 28, 29, 30, 262, 44,
280 272, 272, 264, 258, 262, 0, 0, -1, -1, -1,
281 -1, 41, -1, -1, -1, -1, -1, -1, -1, -1,
282 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
283 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
284 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
285 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
286 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
287 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
288 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
289 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
290 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
291 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
292 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
293 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
294 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
295 mike 1.1 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
296 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
297 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
298 -1, -1, -1, -1, -1, -1, -1, -1, 259, 257,
299 258, -1, -1, -1, -1, -1, 267, -1, -1, -1,
300 271, 272, 273, 274, 275, 272, -1, -1, -1, -1,
301 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
302 -1, -1, -1, -1, -1, -1, -1, 257,
303 };
304 #define YYFINAL 2
305 #ifndef YYDEBUG
306 #define YYDEBUG 0
307 #endif
308 #define YYMAXTOKEN 275
309 #if YYDEBUG
310 static const char *yyname[] = {
311
312 "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
313 0,0,0,0,0,0,"'('","')'","'*'",0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
314 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
315 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
316 mike 1.1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
317 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
318 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"WQL_OR",
319 "WQL_AND","WQL_NOT","WQL_ERROR","WQL_LT","WQL_FROM","WQL_LE","WQL_WHERE",
320 "WQL_NE","WQL_GT","WQL_REAL","WQL_EQ","WQL_SELECT","WQL_GE","WQL_NULL",
321 "WQL_IDENTIFIER","WQL_BOOLEAN","WQL_INTEGER","WQL_STRING",
322 };
323 static const char *yyrule[] = {
324 "$accept : Start",
325 "Start : WQL_SELECT SelectList WQL_FROM WQL_IDENTIFIER",
326 "Start : WQL_SELECT SelectList WQL_FROM WQL_IDENTIFIER WQL_WHERE Condition",
327 "SelectList : '*'",
328 "SelectList : PropertyList",
329 "PropertyList : WQL_IDENTIFIER",
330 "PropertyList : PropertyList ',' WQL_IDENTIFIER",
331 "Condition : '(' Condition ')'",
332 "Condition : WQL_NOT Condition",
333 "Condition : Condition WQL_AND Condition",
334 "Condition : Condition WQL_OR Condition",
335 "Condition : Predicate",
336 "Predicate : Operand WQL_EQ Operand",
337 mike 1.1 "Predicate : Operand WQL_NE Operand",
338 "Predicate : Operand WQL_LT Operand",
339 "Predicate : Operand WQL_LE Operand",
340 "Predicate : Operand WQL_GT Operand",
341 "Predicate : Operand WQL_GE Operand",
342 "Operand : WQL_BOOLEAN",
343 "Operand : WQL_INTEGER",
344 "Operand : WQL_REAL",
345 "Operand : WQL_STRING",
346 "Operand : WQL_IDENTIFIER",
347 "Operand : WQL_NULL",
348
349 };
350 #endif
351
352 int yydebug;
353 int yynerrs;
354
355 int yyerrflag;
356 int yychar;
357 YYSTYPE yyval;
358 mike 1.1 YYSTYPE yylval;
359
360 /* define the initial stack-sizes */
361 #ifdef YYSTACKSIZE
362 #undef YYMAXDEPTH
363 #define YYMAXDEPTH YYSTACKSIZE
364 #else
365 #ifdef YYMAXDEPTH
366 #define YYSTACKSIZE YYMAXDEPTH
367 #else
368 #define YYSTACKSIZE 500
369 #define YYMAXDEPTH 500
370 #endif
371 #endif
372
373 #define YYINITSTACKSIZE 500
374
375 typedef struct {
376 unsigned stacksize;
377 short *s_base;
378 short *s_mark;
379 mike 1.1 short *s_last;
380 YYSTYPE *l_base;
381 YYSTYPE *l_mark;
382 } YYSTACKDATA;
383 /* variables for the parser stack */
384 static YYSTACKDATA yystack;
385
386 #if YYDEBUG
387 #include <stdio.h> /* needed for printf */
388 #endif
389
390 #include <stdlib.h> /* needed for malloc, etc */
391 #include <string.h> /* needed for memset */
392
393 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
394 static int yygrowstack(YYSTACKDATA *data)
395 {
396 int i;
397 unsigned newsize;
398 short *newss;
399 YYSTYPE *newvs;
400 mike 1.1
401 if ((newsize = data->stacksize) == 0)
402 newsize = YYINITSTACKSIZE;
403 else if (newsize >= YYMAXDEPTH)
404 return -1;
405 else if ((newsize *= 2) > YYMAXDEPTH)
406 newsize = YYMAXDEPTH;
407
408 i = data->s_mark - data->s_base;
409 newss = (short *)realloc(data->s_base, newsize * sizeof(*newss));
410 if (newss == 0)
411 return -1;
412
413 data->s_base = newss;
414 data->s_mark = newss + i;
415
416 newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs));
417 if (newvs == 0)
418 return -1;
419
420 data->l_base = newvs;
421 mike 1.1 data->l_mark = newvs + i;
422
423 data->stacksize = newsize;
424 data->s_last = data->s_base + newsize - 1;
425 return 0;
426 }
427
428 #if YYPURE || defined(YY_NO_LEAKS)
429 static void yyfreestack(YYSTACKDATA *data)
430 {
431 free(data->s_base);
432 free(data->l_base);
433 memset(data, 0, sizeof(*data));
434 }
435 #else
436 #define yyfreestack(data) /* nothing */
437 #endif
438
439 #define YYABORT goto yyabort
440 #define YYREJECT goto yyabort
441 #define YYACCEPT goto yyaccept
442 mike 1.1 #define YYERROR goto yyerrlab
443
444 int
445 YYPARSE_DECL()
446 {
447 int yym, yyn, yystate;
448 #if YYDEBUG
449 const char *yys;
450
451 if ((yys = getenv("YYDEBUG")) != 0)
452 {
453 yyn = *yys;
454 if (yyn >= '0' && yyn <= '9')
455 yydebug = yyn - '0';
456 }
457 #endif
458
459 yynerrs = 0;
460 yyerrflag = 0;
461 yychar = YYEMPTY;
462 yystate = 0;
463 mike 1.1
464 #if YYPURE
465 memset(&yystack, 0, sizeof(yystack));
466 #endif
467
468 if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
469 yystack.s_mark = yystack.s_base;
470 yystack.l_mark = yystack.l_base;
471 yystate = 0;
472 *yystack.s_mark = 0;
473
474 yyloop:
475 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
476 if (yychar < 0)
477 {
478 if ((yychar = YYLEX) < 0) yychar = 0;
479 #if YYDEBUG
480 if (yydebug)
481 {
482 yys = 0;
483 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
484 mike 1.1 if (!yys) yys = "illegal-symbol";
485 printf("%sdebug: state %d, reading %d (%s)\n",
486 YYPREFIX, yystate, yychar, yys);
487 }
488 #endif
489 }
490 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
491 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
492 {
493 #if YYDEBUG
494 if (yydebug)
495 printf("%sdebug: state %d, shifting to state %d\n",
496 YYPREFIX, yystate, yytable[yyn]);
497 #endif
498 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
499 {
500 goto yyoverflow;
501 }
502 yystate = yytable[yyn];
503 *++yystack.s_mark = yytable[yyn];
504 *++yystack.l_mark = yylval;
505 mike 1.1 yychar = YYEMPTY;
506 if (yyerrflag > 0) --yyerrflag;
507 goto yyloop;
508 }
509 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
510 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
511 {
512 yyn = yytable[yyn];
513 goto yyreduce;
514 }
515 if (yyerrflag) goto yyinrecovery;
516
517 yyerror("syntax error");
518
519 goto yyerrlab;
520
521 yyerrlab:
522 ++yynerrs;
523
524 yyinrecovery:
525 if (yyerrflag < 3)
526 mike 1.1 {
527 yyerrflag = 3;
528 for (;;)
529 {
530 if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
531 yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
532 {
533 #if YYDEBUG
534 if (yydebug)
535 printf("%sdebug: state %d, error recovery shifting\
536 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
537 #endif
538 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
539 {
540 goto yyoverflow;
541 }
542 yystate = yytable[yyn];
543 *++yystack.s_mark = yytable[yyn];
544 *++yystack.l_mark = yylval;
545 goto yyloop;
546 }
547 mike 1.1 else
548 {
549 #if YYDEBUG
550 if (yydebug)
551 printf("%sdebug: error recovery discarding state %d\n",
552 YYPREFIX, *yystack.s_mark);
553 #endif
554 if (yystack.s_mark <= yystack.s_base) goto yyabort;
555 --yystack.s_mark;
556 --yystack.l_mark;
557 }
558 }
559 }
560 else
561 {
562 if (yychar == 0) goto yyabort;
563 #if YYDEBUG
564 if (yydebug)
565 {
566 yys = 0;
567 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
568 mike 1.1 if (!yys) yys = "illegal-symbol";
569 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
570 YYPREFIX, yystate, yychar, yys);
571 }
572 #endif
573 yychar = YYEMPTY;
574 goto yyloop;
575 }
576
577 yyreduce:
578 #if YYDEBUG
579 if (yydebug)
580 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
581 YYPREFIX, yystate, yyn, yyrule[yyn]);
582 #endif
583 yym = yylen[yyn];
584 if (yym)
585 yyval = yystack.l_mark[1-yym];
586 else
587 memset(&yyval, 0, sizeof yyval);
588 switch (yyn)
589 mike 1.1 {
590 case 1:
591 #line 64 "wql.y"
592 {
593 YACCTRACE(Start1);
594 wqlstate.wql->className = yystack.l_mark[0].string;
595 }
596 break;
597 case 2:
598 #line 69 "wql.y"
599 {
600 YACCTRACE(Start2);
601 wqlstate.wql->className = yystack.l_mark[-2].string;
602 }
603 break;
604 case 3:
605 #line 76 "wql.y"
606 {
607 YACCTRACE(SelectList1);
608 }
609 break;
610 mike 1.1 case 4:
611 #line 80 "wql.y"
612 {
613 YACCTRACE(SelectList12);
614 }
615 break;
616 case 5:
617 #line 86 "wql.y"
618 {
619 YACCTRACE(PropertyList1);
620
621 if (wqlstate.wql->nproperties == WQL_MAX_PROPERTIES)
622 {
623 yyerror("property array overflow");
624 YYABORT;
625 }
626
627 wqlstate.wql->properties[wqlstate.wql->nproperties++] = yystack.l_mark[0].string;
628 }
629 break;
630 case 6:
631 mike 1.1 #line 98 "wql.y"
632 {
633 YACCTRACE(PropertyList2);
634
635 if (wqlstate.wql->nproperties == WQL_MAX_PROPERTIES)
636 {
637 yyerror("property array overflow");
638 YYABORT;
639 }
640
641 wqlstate.wql->properties[wqlstate.wql->nproperties++] = yystack.l_mark[0].string;
642 }
643 break;
644 case 7:
645 #line 112 "wql.y"
646 {
647 YACCTRACE(Condition1);
648 }
649 break;
650 case 8:
651 #line 116 "wql.y"
652 mike 1.1 {
653 WQL_Symbol operator;
654
655 YACCTRACE(Condition2);
656
657 if (wqlstate.wql->nsymbols == WQL_MAX_SYMBOLS)
658 {
659 yyerror("symbol array overflow");
660 YYABORT;
661 }
662
663 memset(&operator, 0, sizeof(WQL_Symbol));
664 operator.type = WQL_TYPE_NOT;
665 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = operator;
666 }
667 break;
668 case 9:
669 #line 132 "wql.y"
670 {
671 WQL_Symbol operator;
672
673 mike 1.1 YACCTRACE(Condition3);
674
675 if (wqlstate.wql->nsymbols == WQL_MAX_SYMBOLS)
676 {
677 yyerror("symbol array overflow");
678 YYABORT;
679 }
680
681 memset(&operator, 0, sizeof(WQL_Symbol));
682 operator.type = WQL_TYPE_AND;
683 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = operator;
684 }
685 break;
686 case 10:
687 #line 148 "wql.y"
688 {
689 WQL_Symbol operator;
690
691 YACCTRACE(Condition4);
692
693 if (wqlstate.wql->nsymbols == WQL_MAX_SYMBOLS)
694 mike 1.1 {
695 yyerror("symbol array overflow");
696 YYABORT;
697 }
698
699 memset(&operator, 0, sizeof(WQL_Symbol));
700 operator.type = WQL_TYPE_OR;
701 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = operator;
702 }
703 break;
704 case 11:
705 #line 164 "wql.y"
706 {
707 YACCTRACE(Condition5);
708 }
709 break;
710 case 12:
711 #line 170 "wql.y"
712 {
713 WQL_Symbol operator;
714
715 mike 1.1 YACCTRACE(Predicate1);
716
717 if (wqlstate.wql->nsymbols + 3 > WQL_MAX_SYMBOLS)
718 {
719 yyerror("symbol array overflow");
720 YYABORT;
721 }
722
723 memset(&operator, 0, sizeof(WQL_Symbol));
724 operator.type = WQL_TYPE_EQ;
725
726 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = yystack.l_mark[-2].symbol;
727 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = yystack.l_mark[0].symbol;
728 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = operator;
729 }
730 break;
731 case 13:
732 #line 189 "wql.y"
733 {
734 WQL_Symbol operator;
735
736 mike 1.1 YACCTRACE(Predicate2);
737
738 if (wqlstate.wql->nsymbols + 3 > WQL_MAX_SYMBOLS)
739 {
740 yyerror("symbol array overflow");
741 YYABORT;
742 }
743
744 memset(&operator, 0, sizeof(WQL_Symbol));
745 operator.type = WQL_TYPE_NE;
746
747 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = yystack.l_mark[-2].symbol;
748 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = yystack.l_mark[0].symbol;
749 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = operator;
750 }
751 break;
752 case 14:
753 #line 208 "wql.y"
754 {
755 WQL_Symbol operator;
756
757 mike 1.1 YACCTRACE(Predicate3);
758
759 if (wqlstate.wql->nsymbols + 3 > WQL_MAX_SYMBOLS)
760 {
761 yyerror("symbol array overflow");
762 YYABORT;
763 }
764
765 memset(&operator, 0, sizeof(WQL_Symbol));
766 operator.type = WQL_TYPE_LT;
767
768 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = yystack.l_mark[-2].symbol;
769 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = yystack.l_mark[0].symbol;
770 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = operator;
771 }
772 break;
773 case 15:
774 #line 227 "wql.y"
775 {
776 WQL_Symbol operator;
777
778 mike 1.1 YACCTRACE(Predicate4);
779
780 if (wqlstate.wql->nsymbols + 3 > WQL_MAX_SYMBOLS)
781 {
782 yyerror("symbol array overflow");
783 YYABORT;
784 }
785
786 memset(&operator, 0, sizeof(WQL_Symbol));
787 operator.type = WQL_TYPE_LE;
788
789 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = yystack.l_mark[-2].symbol;
790 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = yystack.l_mark[0].symbol;
791 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = operator;
792 }
793 break;
794 case 16:
795 #line 246 "wql.y"
796 {
797 WQL_Symbol operator;
798
799 mike 1.1 YACCTRACE(Predicate5);
800
801 if (wqlstate.wql->nsymbols + 3 > WQL_MAX_SYMBOLS)
802 {
803 yyerror("symbol array overflow");
804 YYABORT;
805 }
806
807 memset(&operator, 0, sizeof(WQL_Symbol));
808 operator.type = WQL_TYPE_GT;
809
810 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = yystack.l_mark[-2].symbol;
811 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = yystack.l_mark[0].symbol;
812 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = operator;
813 }
814 break;
815 case 17:
816 #line 265 "wql.y"
817 {
818 WQL_Symbol operator;
819
820 mike 1.1 YACCTRACE(Predicate6);
821
822 if (wqlstate.wql->nsymbols + 3 > WQL_MAX_SYMBOLS)
823 {
824 yyerror("symbol array overflow");
825 YYABORT;
826 }
827
828 memset(&operator, 0, sizeof(WQL_Symbol));
829 operator.type = WQL_TYPE_GE;
830
831 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = yystack.l_mark[-2].symbol;
832 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = yystack.l_mark[0].symbol;
833 wqlstate.wql->symbols[wqlstate.wql->nsymbols++] = operator;
834 }
835 break;
836 case 18:
837 #line 286 "wql.y"
838 {
839 YACCTRACE(Operand1);
840 yyval.symbol.value.boolean = yystack.l_mark[0].boolean;
841 mike 1.1 yyval.symbol.type = WQL_TYPE_BOOLEAN;
842 }
843 break;
844 case 19:
845 #line 292 "wql.y"
846 {
847 YACCTRACE(Operand2);
848 yyval.symbol.value.integer = yystack.l_mark[0].integer;
849 yyval.symbol.type = WQL_TYPE_INTEGER;
850 }
851 break;
852 case 20:
853 #line 298 "wql.y"
854 {
855 YACCTRACE(Operand3);
856 yyval.symbol.value.real = yystack.l_mark[0].real;
857 yyval.symbol.type = WQL_TYPE_REAL;
858 }
859 break;
860 case 21:
861 #line 304 "wql.y"
862 mike 1.1 {
863 YACCTRACE(Operand4);
864 yyval.symbol.value.string = yystack.l_mark[0].string;
865 yyval.symbol.type = WQL_TYPE_STRING;
866 }
867 break;
868 case 22:
869 #line 310 "wql.y"
870 {
871 YACCTRACE(Operand5);
872 yyval.symbol.value.string = yystack.l_mark[0].string;
873 yyval.symbol.type = WQL_TYPE_IDENTIFIER;
874 }
875 break;
876 case 23:
877 #line 316 "wql.y"
878 {
879 YACCTRACE(Operand6);
880 yyval.symbol.value.integer = 0;
881 yyval.symbol.type = WQL_TYPE_NULL;
882 }
883 mike 1.1 break;
884 #line 860 "y.tab.c"
885 }
886 yystack.s_mark -= yym;
887 yystate = *yystack.s_mark;
888 yystack.l_mark -= yym;
889 yym = yylhs[yyn];
890 if (yystate == 0 && yym == 0)
891 {
892 #if YYDEBUG
893 if (yydebug)
894 printf("%sdebug: after reduction, shifting from state 0 to\
895 state %d\n", YYPREFIX, YYFINAL);
896 #endif
897 yystate = YYFINAL;
898 *++yystack.s_mark = YYFINAL;
899 *++yystack.l_mark = yyval;
900 if (yychar < 0)
901 {
902 if ((yychar = YYLEX) < 0) yychar = 0;
903 #if YYDEBUG
904 mike 1.1 if (yydebug)
905 {
906 yys = 0;
907 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
908 if (!yys) yys = "illegal-symbol";
909 printf("%sdebug: state %d, reading %d (%s)\n",
910 YYPREFIX, YYFINAL, yychar, yys);
911 }
912 #endif
913 }
914 if (yychar == 0) goto yyaccept;
915 goto yyloop;
916 }
917 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
918 yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
919 yystate = yytable[yyn];
920 else
921 yystate = yydgoto[yym];
922 #if YYDEBUG
923 if (yydebug)
924 printf("%sdebug: after reduction, shifting from state %d \
925 mike 1.1 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
926 #endif
927 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
928 {
929 goto yyoverflow;
930 }
931 *++yystack.s_mark = (short) yystate;
932 *++yystack.l_mark = yyval;
933 goto yyloop;
934
935 yyoverflow:
936 yyerror("yacc stack overflow");
937
938 yyabort:
939 yyfreestack(&yystack);
940 return (1);
941
942 yyaccept:
943 yyfreestack(&yystack);
944 return (0);
945 }
|