|
|
1.1 root 1:
2: # line 2 "conf_read.y"
3: #ifndef lint
4: static char *rcsid = "$Header: /f/osi/others/quipu/uips/sd/RCS/y.tab.c,v 7.0 90/06/12 13:14:08 mrose Exp $";
5: #endif
6:
7: /*
8: * $Header: /f/osi/others/quipu/uips/sd/RCS/y.tab.c,v 7.0 90/06/12 13:14:08 mrose Exp $
9: */
10:
11: /*
12: * $Log: y.tab.c,v $
13: * Revision 7.0 90/06/12 13:14:08 mrose
14: * *** empty log message ***
15: *
16: * Revision 1.6 90/04/26 10:36:54 emsrdsm
17: * *** empty log message ***
18: *
19: * Revision 1.5 90/04/25 15:08:06 emsrdsm
20: * i) lint'ed
21: *
22: * Revision 1.4 90/04/20 17:58:22 emsrdsm
23: * i) no more freeing
24: *
25: * Revision 1.3 90/04/18 18:28:39 emsrdsm
26: * fixed i) does not move to leaves
27: * ii) added default mechanism described using "typeDefaults" file.
28: * iii) added 'sorting' to attribute display
29: *
30: * Revision 1.2 90/03/15 16:34:20 emsrdsm
31: * *** empty log message ***
32: *
33: * Revision 1.1 90/03/09 17:58:22 emsrdsm
34: * Initial revision
35: *
36: */
37:
38: #include <stdio.h>
39: #include <ctype.h>
40: #include <string.h>
41:
42: #include "filt.h"
43: #include "symtab.h"
44:
45: extern make_type();
46: extern filt_struct *make_item_filter();
47: extern filt_struct *link_filters();
48: extern filt_struct *make_parent_filter();
49: extern put_symbol_value();
50:
51: extern FILE *file;
52: extern int curr_filt;
53: extern char **file_names;
54: extern table_entry symtab;
55:
56: # line 54 "conf_read.y"
57: typedef union {
58: filt_struct *filt;
59: char strval[255];
60: int symbol;
61: } YYSTYPE;
62: # define NUMBER 257
63: # define NAME 258
64: # define DEFAULT 259
65: # define STRING 260
66: # define OID 261
67: # define AND 262
68: # define OR 263
69: # define NOT 264
70: # define APPROX 265
71: # define EQUAL 266
72: # define ITEM 267
73: # define SUBSTRING 268
74: #define yyclearin yychar = -1
75: #define yyerrok yyerrflag = 0
76: extern int yychar;
77: extern short yyerrflag;
78: #ifndef YYMAXDEPTH
79: #define YYMAXDEPTH 150
80: #endif
81: YYSTYPE yylval, yyval;
82: # define YYERRCODE 256
83:
84: # line 105 "conf_read.y"
85:
86:
87: yylex()
88: {
89: int c, count = 0;
90: char lexeme[255];
91:
92: while(iswspace(c = getc(file)))
93: if (c == EOF) return(0);
94:
95: lexeme[count++] = c;
96:
97: switch(c) {
98: case '#':
99: while (getc(file) != '\n');
100: return(yylex());
101: case '"':
102: count = 0;
103: while ((c = getc(file)) != '"')
104: lexeme[count++] = c;
105: lexeme[count] = '\0';
106: (void) strcpy(yylval.strval, lexeme);
107: return STRING;
108: case '$':
109: while (!iswspace((c = getc(file))) && !issymbol(c))
110: lexeme[count++] = c;
111: lexeme[count] = '\0';
112: put_symbol_value(symtab, lexeme+1, (char *) 0);
113: (void) strcpy(yylval.strval, lexeme);
114: return STRING;
115: case '(':
116: return (int) c;
117: case ')':
118: return (int) c;
119: case ':':
120: return (int) c;
121: case '&':
122: yylval.symbol = AND;
123: return AND;
124: case '|':
125: yylval.symbol = OR;
126: return OR;
127: case '!':
128: yylval.symbol = NOT;
129: return NOT;
130: case '*':
131: lexeme[count] = '\0';
132: (void) strcpy(yylval.strval, lexeme);
133: return STRING;
134: case '~':
135: if((lexeme[count] = getc(file)) == '=') {
136: yylval.symbol = APPROX;
137: return APPROX;
138: }
139: break;
140: case '%':
141: if((lexeme[count] = getc(file)) == '=') {
142: yylval.symbol = SUBSTRING;
143: return SUBSTRING;
144: }
145: break;
146: case '=':
147: yylval.symbol = EQUAL;
148: return EQUAL;
149: }
150:
151: while(!iswspace(c = getc(file)) && c != '\0' && !issymbol(c))
152: if (c != EOF)
153: lexeme[count++] = c;
154: else
155: return(0);
156:
157: (void) fseek(file,(long) -1, 1);
158:
159: lexeme[count] = '\0';
160: switch(*lexeme) {
161: case 'd':
162: case 'D':
163: if(!strcmp(lexeme, "default") || !strcmp(lexeme, "DEFAULT"))
164: return DEFAULT;
165: else {
166: (void) strcpy(yylval.strval, lexeme);
167: return STRING;
168: }
169: case 'n':
170: case 'N':
171: if(!strcmp(lexeme, "name") || !strcmp(lexeme, "NAME"))
172: return NAME;
173: else {
174: (void) strcpy(yylval.strval, lexeme);
175: return STRING;
176: }
177: case '0':
178: case '1':
179: case '2':
180: case '3':
181: case '4':
182: case '5':
183: case '6':
184: case '7':
185: case '8':
186: case '9':
187: count = 0;
188: while (isdigit(lexeme[count]) || lexeme[count] == '.') count++;
189: if (lexeme[count] == '\0') {
190: (void) strcpy(yylval.strval, lexeme);
191: return OID;
192: } else {
193: (void) strcpy(yylval.strval, lexeme);
194: return STRING;
195: }
196: default:
197: (void) strcpy(yylval.strval, lexeme);
198: return STRING;
199: }
200: }
201:
202: yyerror(err)
203: char *err;
204: {
205: /* Sorry */
206: (void) fprintf(stderr, "Parse error in 'filterTypes' dir: ");
207: (void) fprintf(stderr, err);
208: (void) fprintf(stderr, "\n");
209: }
210:
211: int
212: issymbol(c)
213: char c;
214: {
215: switch(c) {
216: case '#':
217: return 1;
218: case '"':
219: return 1;
220: case '(':
221: return 1;
222: case ')':
223: return 1;
224: case ':':
225: return 1;
226: case '&':
227: return 1;
228: case '|':
229: return 1;
230: case '!':
231: return 1;
232: case '*':
233: return 1;
234: case '~':
235: return 1;
236: case '=':
237: return 1;
238: case '$':
239: return 1;
240: case '%':
241: return 1;
242: }
243: return 0;
244: }
245:
246: int
247: iswspace(c)
248: char c;
249: {
250: switch(c) {
251: case ' ':
252: return 1;
253: case '\n':
254: return 1;
255: case '\t':
256: return 1;
257: }
258: return 0;
259: }
260:
261:
262:
263: short yyexca[] ={
264: -1, 1,
265: 0, -1,
266: -2, 0,
267: };
268: # define YYNPROD 19
269: # define YYLAST 42
270: short yyact[]={
271:
272: 18, 19, 23, 20, 11, 12, 13, 10, 14, 3,
273: 8, 27, 26, 22, 7, 24, 25, -1, 2, 4,
274: 17, 9, 5, 6, 1, 0, 15, 16, 0, 0,
275: 0, 0, 21, 0, 0, 0, 0, 0, 0, 0,
276: 0, 28 };
277: short yypact[]={
278:
279: -249,-1000, -26, -48,-1000,-1000,-1000,-257,-252, -26,
280: -26,-265,-1000,-1000,-1000, -26, -28,-258,-1000,-1000,
281: -1000, -26,-1000, -29, -30, -26,-1000,-1000,-1000 };
282: short yypgo[]={
283:
284: 0, 24, 16, 15, 23, 22, 21, 20, 18, 17 };
285: short yyr1[]={
286:
287: 0, 1, 8, 9, 9, 4, 4, 4, 3, 3,
288: 3, 2, 2, 5, 7, 7, 7, 6, 6 };
289: short yyr2[]={
290:
291: 0, 2, 3, 3, 0, 6, 4, 1, 2, 1,
292: 0, 1, 1, 5, 1, 1, 1, 1, 1 };
293: short yychk[]={
294:
295: -1000, -1, -8, 258, -2, -5, -4, 40, 58, -6,
296: 264, 261, 262, 263, 260, -2, -2, -7, 265, 266,
297: 268, -2, 41, 260, -3, -2, 41, 41, -3 };
298: short yydef[]={
299:
300: 0, -2, 0, 0, 1, 7, 12, 0, 0, 0,
301: 0, 0, 17, 18, 2, 0, 0, 0, 14, 15,
302: 16, 10, 6, 0, 0, 9, 13, 5, 8 };
303: #ifndef lint
304: static char yaccpar_sccsid[] = "@(#)yaccpar 1.3 86/10/08 SMI"; /* from UCB 4.1 83/02/11 */
305: #endif
306:
307: #
308: # define YYFLAG -1000
309: # define YYERROR goto yyerrlab
310: # define YYACCEPT return(0)
311: # define YYABORT return(1)
312:
313: /* parser for yacc output */
314:
315: #ifdef YYDEBUG
316: int yydebug = 0; /* 1 for debugging */
317: #endif
318: YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
319: int yychar = -1; /* current input token number */
320: int yynerrs = 0; /* number of errors */
321: short yyerrflag = 0; /* error recovery flag */
322:
323: yyparse() {
324:
325: short yys[YYMAXDEPTH];
326: short yyj, yym;
327: register YYSTYPE *yypvt;
328: register short yystate, *yyps, yyn;
329: register YYSTYPE *yypv;
330: register short *yyxi;
331:
332: yystate = 0;
333: yychar = -1;
334: yynerrs = 0;
335: yyerrflag = 0;
336: yyps= &yys[-1];
337: yypv= &yyv[-1];
338:
339: yystack: /* put a state and value onto the stack */
340:
341: #ifdef YYDEBUG
342: if( yydebug ) printf( "state %d, char 0%o\n", yystate, yychar );
343: #endif
344: if( ++yyps>= &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); }
345: *yyps = yystate;
346: ++yypv;
347: *yypv = yyval;
348:
349: yynewstate:
350:
351: yyn = yypact[yystate];
352:
353: if( yyn<= YYFLAG ) goto yydefault; /* simple state */
354:
355: if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
356: if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
357:
358: if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
359: yychar = -1;
360: yyval = yylval;
361: yystate = yyn;
362: if( yyerrflag > 0 ) --yyerrflag;
363: goto yystack;
364: }
365:
366: yydefault:
367: /* default state action */
368:
369: if( (yyn=yydef[yystate]) == -2 ) {
370: if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
371: /* look through exception table */
372:
373: for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
374:
375: while( *(yyxi+=2) >= 0 ){
376: if( *yyxi == yychar ) break;
377: }
378: if( (yyn = yyxi[1]) < 0 ) return(0); /* accept */
379: }
380:
381: if( yyn == 0 ){ /* error */
382: /* error ... attempt to resume parsing */
383:
384: switch( yyerrflag ){
385:
386: case 0: /* brand new error */
387:
388: yyerror( "syntax error" );
389: yyerrlab:
390: ++yynerrs;
391:
392: case 1:
393: case 2: /* incompletely recovered error ... try again */
394:
395: yyerrflag = 3;
396:
397: /* find a state where "error" is a legal shift action */
398:
399: while ( yyps >= yys ) {
400: yyn = yypact[*yyps] + YYERRCODE;
401: if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
402: yystate = yyact[yyn]; /* simulate a shift of "error" */
403: goto yystack;
404: }
405: yyn = yypact[*yyps];
406:
407: /* the current yyps has no shift onn "error", pop stack */
408:
409: #ifdef YYDEBUG
410: if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
411: #endif
412: --yyps;
413: --yypv;
414: }
415:
416: /* there is no state on the stack with an error shift ... abort */
417:
418: yyabort:
419: return(1);
420:
421:
422: case 3: /* no shift yet; clobber input char */
423:
424: #ifdef YYDEBUG
425: if( yydebug ) printf( "error recovery discards char %d\n", yychar );
426: #endif
427:
428: if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
429: yychar = -1;
430: goto yynewstate; /* try again in the same state */
431:
432: }
433:
434: }
435:
436: /* reduction by production yyn */
437:
438: #ifdef YYDEBUG
439: if( yydebug ) printf("reduce %d\n",yyn);
440: #endif
441: yyps -= yyr2[yyn];
442: yypvt = yypv;
443: yypv -= yyr2[yyn];
444: yyval = yypv[1];
445: yym=yyn;
446: /* consult goto table to find next state */
447: yyn = yyr1[yyn];
448: yyj = yypgo[yyn] + *yyps + 1;
449: if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
450: switch(yym){
451:
452: case 1:
453: # line 70 "conf_read.y"
454: {make_type(yypvt[-1].strval, yypvt[-0].filt);} break;
455: case 2:
456: # line 73 "conf_read.y"
457: {(void) strcpy(yyval.strval, yypvt[-0].strval);} break;
458: case 3:
459: # line 76 "conf_read.y"
460: {(void) strcpy(yyval.strval, yypvt[-0].strval);} break;
461: case 4:
462: # line 77 "conf_read.y"
463: {(void) strcpy(yyval.strval, "\0");} break;
464: case 5:
465: # line 80 "conf_read.y"
466: {yyval.filt = make_parent_filter(yypvt[-4].symbol, yypvt[-3].filt, yypvt[-2].filt, yypvt[-1].filt);} break;
467: case 6:
468: # line 81 "conf_read.y"
469: {yyval.filt = make_parent_filter(yypvt[-2].symbol, yypvt[-1].filt, (filt_struct *) 0,(filt_struct *) 0);} break;
470: case 7:
471: # line 82 "conf_read.y"
472: {yyval.filt = yypvt[-0].filt;} break;
473: case 8:
474: # line 85 "conf_read.y"
475: {yyval.filt = link_filters(yypvt[-1].filt, yypvt[-0].filt);} break;
476: case 9:
477: # line 86 "conf_read.y"
478: {yyval.filt = yypvt[-0].filt;} break;
479: case 10:
480: # line 87 "conf_read.y"
481: {yyval.filt = (filt_struct *) 0;} break;
482: case 11:
483: # line 90 "conf_read.y"
484: {yyval.filt = yypvt[-0].filt;} break;
485: case 12:
486: # line 91 "conf_read.y"
487: {yyval.filt = yypvt[-0].filt;} break;
488: case 13:
489: # line 94 "conf_read.y"
490: {yyval.filt = make_item_filter(yypvt[-3].strval, yypvt[-2].symbol, yypvt[-1].strval);} break;
491: case 14:
492: # line 97 "conf_read.y"
493: {yyval.symbol = yypvt[-0].symbol;} break;
494: case 15:
495: # line 98 "conf_read.y"
496: {yyval.symbol = yypvt[-0].symbol;} break;
497: case 16:
498: # line 99 "conf_read.y"
499: {yyval.symbol = yypvt[-0].symbol;} break;
500: case 17:
501: # line 102 "conf_read.y"
502: {yyval.symbol = yypvt[-0].symbol;} break;
503: case 18:
504: # line 103 "conf_read.y"
505: {yyval.symbol = yypvt[-0].symbol;} break;
506: }
507: goto yystack; /* stack new state and value */
508:
509: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.