2 static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93";
11 #define YYPATCH 20100216
14 #define yyclearin (yychar = YYEMPTY)
15 #define yyerrok (yyerrflag = 0)
16 #define YYRECOVERING() (yyerrflag != 0)
20 /* compatibility with bison */
22 /* compatibility with FreeBSD */
23 #ifdef YYPARSE_PARAM_TYPE
24 #define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM)
26 #define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM)
29 #define YYPARSE_DECL() yyparse(void)
30 #endif /* YYPARSE_PARAM */
32 extern int YYPARSE_DECL();
51 #define kw_TAILMATCH 262
54 #define IDENTIFIER 265
56 static const short yylhs[] = { -1,
57 0, 1, 1, 1, 1, 1, 1, 1, 4, 4,
58 2, 2, 2, 2, 2, 3, 3, 3, 3, 5,
61 static const short yylen[] = { 2,
62 1, 1, 1, 2, 3, 3, 3, 1, 1, 3,
63 4, 4, 3, 5, 3, 1, 1, 1, 1, 1,
66 static const short yydefred[] = { 0,
67 2, 3, 20, 21, 0, 0, 0, 0, 0, 0,
68 8, 0, 16, 17, 18, 19, 0, 0, 0, 0,
69 0, 0, 0, 0, 0, 0, 0, 0, 7, 0,
70 0, 0, 0, 0, 15, 13, 0, 0, 0, 22,
71 0, 23, 0, 12, 11, 10, 24, 14,
73 static const short yydgoto[] = { 9,
74 10, 11, 12, 28, 13, 14, 15, 16, 31,
76 static const short yysindex[] = { -33,
77 0, 0, 0, 0, -23, -33, -33, -105, 0, -247,
78 0, -28, 0, 0, 0, 0, -36, -247, -39, -244,
79 -33, -33, -26, -36, -38, -37, -22, -16, 0, -19,
80 -97, -247, -247, -36, 0, 0, -36, -36, -36, 0,
81 -244, 0, -9, 0, 0, 0, 0, 0,
83 static const short yyrindex[] = { 0,
84 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,
85 0, 0, 0, 0, 0, 0, 0, 3, 0, 0,
86 0, 0, 0, 0, 0, 0, -4, 0, 0, -87,
87 0, 6, 8, 0, 0, 0, 0, 0, 0, 0,
88 0, 0, 0, 0, 0, 0, 0, 0,
90 static const short yygindex[] = { 0,
91 13, 0, -8, -24, 0, 0, 0, 16, -1,
93 #define YYTABLESIZE 234
94 static const short yytable[] = { 6,
95 8, 29, 4, 8, 25, 5, 7, 6, 27, 43,
96 8, 21, 22, 34, 46, 36, 17, 20, 18, 19,
97 30, 39, 37, 38, 40, 27, 41, 42, 44, 45,
98 27, 48, 26, 32, 33, 1, 9, 25, 35, 47,
99 0, 0, 0, 4, 0, 0, 5, 0, 6, 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, 21,
117 22, 0, 0, 1, 2, 0, 3, 4, 5, 3,
120 static const short yycheck[] = { 33,
121 37, 41, 0, 37, 33, 0, 40, 0, 17, 34,
122 37, 259, 260, 40, 39, 24, 40, 123, 6, 7,
123 265, 44, 61, 61, 41, 34, 46, 125, 37, 38,
124 39, 41, 61, 21, 22, 0, 41, 125, 23, 41,
125 -1, -1, -1, 41, -1, -1, 41, -1, 41, -1,
126 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
127 -1, -1, -1, -1, -1, -1, -1, -1, -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, 259,
143 260, -1, -1, 257, 258, -1, 263, 264, 265, 263,
150 #define YYMAXTOKEN 265
152 static const char *yyname[] = {
154 "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,
155 "'!'",0,0,0,"'%'",0,0,"'('","')'",0,0,"','",0,"'.'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,
156 "'='",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,
157 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,
158 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,
159 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,
160 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,
161 0,0,"kw_TRUE","kw_FALSE","kw_AND","kw_OR","kw_IN","kw_TAILMATCH","NUMBER",
162 "STRING","IDENTIFIER",
164 static const char *yyrule[] = {
170 "expr : expr kw_AND expr",
171 "expr : expr kw_OR expr",
172 "expr : '(' expr ')'",
175 "words : word ',' words",
176 "comp : word '=' '=' word",
177 "comp : word '!' '=' word",
178 "comp : word kw_TAILMATCH word",
179 "comp : word kw_IN '(' words ')'",
180 "comp : word kw_IN variable",
187 "function : IDENTIFIER '(' words ')'",
188 "variable : '%' '{' variables '}'",
189 "variables : IDENTIFIER '.' variables",
190 "variables : IDENTIFIER",
198 /* define the initial stack-sizes */
201 #define YYMAXDEPTH YYSTACKSIZE
204 #define YYSTACKSIZE YYMAXDEPTH
206 #define YYSTACKSIZE 500
207 #define YYMAXDEPTH 500
211 #define YYINITSTACKSIZE 500
232 /* variables for the parser stack */
233 static YYSTACKDATA yystack;
234 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
235 static int yygrowstack(YYSTACKDATA *data)
242 if ((newsize = data->stacksize) == 0)
243 newsize = YYINITSTACKSIZE;
244 else if (newsize >= YYMAXDEPTH)
246 else if ((newsize *= 2) > YYMAXDEPTH)
247 newsize = YYMAXDEPTH;
249 i = data->s_mark - data->s_base;
250 newss = (data->s_base != 0)
251 ? (short *)realloc(data->s_base, newsize * sizeof(*newss))
252 : (short *)malloc(newsize * sizeof(*newss));
256 data->s_base = newss;
257 data->s_mark = newss + i;
259 newvs = (data->l_base != 0)
260 ? (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs))
261 : (YYSTYPE *)malloc(newsize * sizeof(*newvs));
265 data->l_base = newvs;
266 data->l_mark = newvs + i;
268 data->stacksize = newsize;
269 data->s_last = data->s_base + newsize - 1;
273 #if YYPURE || defined(YY_NO_LEAKS)
274 static void yyfreestack(YYSTACKDATA *data)
278 memset(data, 0, sizeof(*data));
281 #define yyfreestack(data) /* nothing */
284 #define YYABORT goto yyabort
285 #define YYREJECT goto yyabort
286 #define YYACCEPT goto yyaccept
287 #define YYERROR goto yyerrlab
292 int yym, yyn, yystate;
296 if ((yys = getenv("YYDEBUG")) != 0)
299 if (yyn >= '0' && yyn <= '9')
310 memset(&yystack, 0, sizeof(yystack));
313 if (yystack.s_base == NULL && yygrowstack(&yystack)) goto yyoverflow;
314 yystack.s_mark = yystack.s_base;
315 yystack.l_mark = yystack.l_base;
320 if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
323 if ((yychar = yylex()) < 0) yychar = 0;
328 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
329 if (!yys) yys = "illegal-symbol";
330 printf("%sdebug: state %d, reading %d (%s)\n",
331 YYPREFIX, yystate, yychar, yys);
335 if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
336 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
340 printf("%sdebug: state %d, shifting to state %d\n",
341 YYPREFIX, yystate, yytable[yyn]);
343 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
347 yystate = yytable[yyn];
348 *++yystack.s_mark = yytable[yyn];
349 *++yystack.l_mark = yylval;
351 if (yyerrflag > 0) --yyerrflag;
354 if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
355 yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
360 if (yyerrflag) goto yyinrecovery;
362 yyerror("syntax error");
375 if ((yyn = yysindex[*yystack.s_mark]) && (yyn += YYERRCODE) >= 0 &&
376 yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
380 printf("%sdebug: state %d, error recovery shifting\
381 to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]);
383 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
387 yystate = yytable[yyn];
388 *++yystack.s_mark = yytable[yyn];
389 *++yystack.l_mark = yylval;
396 printf("%sdebug: error recovery discarding state %d\n",
397 YYPREFIX, *yystack.s_mark);
399 if (yystack.s_mark <= yystack.s_base) goto yyabort;
407 if (yychar == 0) goto yyabort;
412 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
413 if (!yys) yys = "illegal-symbol";
414 printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
415 YYPREFIX, yystate, yychar, yys);
425 printf("%sdebug: state %d, reducing by rule %d (%s)\n",
426 YYPREFIX, yystate, yyn, yyrule[yyn]);
430 yyval = yystack.l_mark[1-yym];
432 memset(&yyval, 0, sizeof yyval);
436 { _hx509_expr_input.expr = yystack.l_mark[0].expr; }
439 { yyval.expr = _hx509_make_expr(op_TRUE, NULL, NULL); }
442 { yyval.expr = _hx509_make_expr(op_FALSE, NULL, NULL); }
445 { yyval.expr = _hx509_make_expr(op_NOT, yystack.l_mark[0].expr, NULL); }
448 { yyval.expr = _hx509_make_expr(op_AND, yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
451 { yyval.expr = _hx509_make_expr(op_OR, yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
454 { yyval.expr = yystack.l_mark[-1].expr; }
457 { yyval.expr = _hx509_make_expr(op_COMP, yystack.l_mark[0].expr, NULL); }
460 { yyval.expr = _hx509_make_expr(expr_WORDS, yystack.l_mark[0].expr, NULL); }
463 { yyval.expr = _hx509_make_expr(expr_WORDS, yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
466 { yyval.expr = _hx509_make_expr(comp_EQ, yystack.l_mark[-3].expr, yystack.l_mark[0].expr); }
469 { yyval.expr = _hx509_make_expr(comp_NE, yystack.l_mark[-3].expr, yystack.l_mark[0].expr); }
472 { yyval.expr = _hx509_make_expr(comp_TAILEQ, yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
475 { yyval.expr = _hx509_make_expr(comp_IN, yystack.l_mark[-4].expr, yystack.l_mark[-1].expr); }
478 { yyval.expr = _hx509_make_expr(comp_IN, yystack.l_mark[-2].expr, yystack.l_mark[0].expr); }
481 { yyval.expr = yystack.l_mark[0].expr; }
484 { yyval.expr = yystack.l_mark[0].expr; }
487 { yyval.expr = yystack.l_mark[0].expr; }
490 { yyval.expr = yystack.l_mark[0].expr; }
493 { yyval.expr = _hx509_make_expr(expr_NUMBER, yystack.l_mark[0].string, NULL); }
496 { yyval.expr = _hx509_make_expr(expr_STRING, yystack.l_mark[0].string, NULL); }
500 yyval.expr = _hx509_make_expr(expr_FUNCTION, yystack.l_mark[-3].string, yystack.l_mark[-1].expr); }
503 { yyval.expr = yystack.l_mark[-1].expr; }
507 yyval.expr = _hx509_make_expr(expr_VAR, yystack.l_mark[-2].string, yystack.l_mark[0].expr); }
511 yyval.expr = _hx509_make_expr(expr_VAR, yystack.l_mark[0].string, NULL); }
514 yystack.s_mark -= yym;
515 yystate = *yystack.s_mark;
516 yystack.l_mark -= yym;
518 if (yystate == 0 && yym == 0)
522 printf("%sdebug: after reduction, shifting from state 0 to\
523 state %d\n", YYPREFIX, YYFINAL);
526 *++yystack.s_mark = YYFINAL;
527 *++yystack.l_mark = yyval;
530 if ((yychar = yylex()) < 0) yychar = 0;
535 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
536 if (!yys) yys = "illegal-symbol";
537 printf("%sdebug: state %d, reading %d (%s)\n",
538 YYPREFIX, YYFINAL, yychar, yys);
542 if (yychar == 0) goto yyaccept;
545 if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
546 yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
547 yystate = yytable[yyn];
549 yystate = yydgoto[yym];
552 printf("%sdebug: after reduction, shifting from state %d \
553 to state %d\n", YYPREFIX, *yystack.s_mark, yystate);
555 if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack))
559 *++yystack.s_mark = (short) yystate;
560 *++yystack.l_mark = yyval;
564 yyerror("yacc stack overflow");
567 yyfreestack(&yystack);
571 yyfreestack(&yystack);