|
|
1.1 ! root 1: ! 2: # line 2 "parse.y" ! 3: ! 4: /* ! 5: * Copyright (c) 1983 Regents of the University of California. ! 6: * All rights reserved. ! 7: * ! 8: * Redistribution and use in source and binary forms are permitted ! 9: * provided that the above copyright notice and this paragraph are ! 10: * duplicated in all such forms and that any documentation, ! 11: * advertising materials, and other materials related to such ! 12: * distribution and use acknowledge that the software was developed ! 13: * by the University of California, Berkeley. The name of the ! 14: * University may not be used to endorse or promote products derived ! 15: * from this software without specific prior written permission. ! 16: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR ! 17: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED ! 18: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 19: */ ! 20: ! 21: #ifndef lint ! 22: static char sccsid[] = "@(#)parse.y 5.4 (Berkeley) 6/18/88"; ! 23: #endif /* not lint */ ! 24: #include "htable.h" ! 25: ! 26: #include "y.tab.h" ! 27: ! 28: # line 28 "parse.y" ! 29: typedef union { ! 30: int number; ! 31: struct addr *addrlist; ! 32: struct name *namelist; ! 33: } YYSTYPE; ! 34: # define END 257 ! 35: # define NUMBER 258 ! 36: # define KEYWORD 259 ! 37: # define NAME 260 ! 38: #define yyclearin yychar = -1 ! 39: #define yyerrok yyerrflag = 0 ! 40: extern int yychar; ! 41: extern short yyerrflag; ! 42: #ifndef YYMAXDEPTH ! 43: #define YYMAXDEPTH 150 ! 44: #endif ! 45: YYSTYPE yylval, yyval; ! 46: # define YYERRCODE 256 ! 47: ! 48: # line 139 "parse.y" ! 49: ! 50: ! 51: #include <stdio.h> ! 52: ! 53: extern int yylineno; ! 54: ! 55: yyerror(msg) ! 56: char *msg; ! 57: { ! 58: fprintf(stderr, "\"%s\", line %d: %s\n", infile, yylineno, msg); ! 59: } ! 60: short yyexca[] ={ ! 61: -1, 1, ! 62: 0, -1, ! 63: -2, 0, ! 64: }; ! 65: # define YYNPROD 22 ! 66: # define YYLAST 203 ! 67: short yyact[]={ ! 68: ! 69: 35, 29, 22, 38, 31, 24, 4, 5, 16, 3, ! 70: 32, 26, 18, 11, 42, 39, 8, 40, 33, 27, ! 71: 19, 12, 7, 28, 21, 14, 41, 20, 13, 36, ! 72: 15, 9, 2, 10, 6, 37, 30, 23, 1, 0, ! 73: 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, ! 74: 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, ! 75: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 76: 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, ! 77: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 78: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 79: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 80: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 81: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 82: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 83: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 84: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 85: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 86: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 87: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 88: 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, ! 89: 0, 0, 38 }; ! 90: short yypact[]={ ! 91: ! 92: -250,-250,-1000, -36,-241,-1000,-1000,-245,-1000, -37, ! 93: -16, -21,-252,-245,-246, -38, -17,-1000, -22,-255, ! 94: -252,-247,-1000, -39,-1000,-1000, -23,-256,-248,-1000, ! 95: -40,-1000,-1000, -58,-1000,-242, -41, -18,-1000,-1000, ! 96: -243,-257,-1000,-1000 }; ! 97: short yypgo[]={ ! 98: ! 99: 0, 38, 30, 37, 36, 29, 35, 31, 33, 32 }; ! 100: short yyr1[]={ ! 101: ! 102: 0, 1, 1, 9, 9, 9, 9, 9, 9, 9, ! 103: 7, 7, 8, 2, 2, 3, 3, 4, 4, 5, ! 104: 5, 6 }; ! 105: short yyr2[]={ ! 106: ! 107: 0, 1, 2, 7, 9, 11, 12, 13, 2, 1, ! 108: 1, 3, 7, 1, 3, 0, 1, 0, 1, 1, ! 109: 3, 1 }; ! 110: short yychk[]={ ! 111: ! 112: -1000, -1, -9, 259, 256, 257, -9, 58, 257, -7, ! 113: -8, 258, 58, 44, 46, -2, 260, -7, 258, 58, ! 114: 44, 46, 257, -3, 260, -2, 258, 58, 46, 257, ! 115: -4, 260, 258, 58, 257, 58, -5, -6, 260, 257, ! 116: 58, 44, 257, -5 }; ! 117: short yydef[]={ ! 118: ! 119: 0, -2, 1, 0, 0, 9, 2, 0, 8, 0, ! 120: 10, 0, 0, 0, 0, 0, 13, 11, 0, 15, ! 121: 0, 0, 3, 0, 16, 14, 0, 17, 0, 4, ! 122: 0, 18, 12, 0, 5, 0, 0, 19, 21, 6, ! 123: 0, 0, 7, 20 }; ! 124: # ifdef YYDEBUG ! 125: # include "y.debug" ! 126: # endif ! 127: ! 128: # define YYFLAG -1000 ! 129: # define YYERROR goto yyerrlab ! 130: # define YYACCEPT return(0) ! 131: # define YYABORT return(1) ! 132: ! 133: /* parser for yacc output */ ! 134: ! 135: #ifdef YYDEBUG ! 136: int yydebug = 0; /* 1 for debugging */ ! 137: #endif ! 138: YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */ ! 139: int yychar = -1; /* current input token number */ ! 140: int yynerrs = 0; /* number of errors */ ! 141: short yyerrflag = 0; /* error recovery flag */ ! 142: ! 143: yyparse() ! 144: { short yys[YYMAXDEPTH]; ! 145: int yyj, yym; ! 146: register YYSTYPE *yypvt; ! 147: register int yystate, yyn; ! 148: register short *yyps; ! 149: register YYSTYPE *yypv; ! 150: register short *yyxi; ! 151: ! 152: yystate = 0; ! 153: yychar = -1; ! 154: yynerrs = 0; ! 155: yyerrflag = 0; ! 156: yyps= &yys[-1]; ! 157: yypv= &yyv[-1]; ! 158: ! 159: yystack: /* put a state and value onto the stack */ ! 160: #ifdef YYDEBUG ! 161: if(yydebug >= 3) ! 162: if(yychar < 0 || yytoknames[yychar] == 0) ! 163: printf("char %d in %s", yychar, yystates[yystate]); ! 164: else ! 165: printf("%s in %s", yytoknames[yychar], yystates[yystate]); ! 166: #endif ! 167: if( ++yyps >= &yys[YYMAXDEPTH] ) { ! 168: yyerror( "yacc stack overflow" ); ! 169: return(1); ! 170: } ! 171: *yyps = yystate; ! 172: ++yypv; ! 173: *yypv = yyval; ! 174: yynewstate: ! 175: yyn = yypact[yystate]; ! 176: if(yyn <= YYFLAG) goto yydefault; /* simple state */ ! 177: if(yychar<0) { ! 178: yychar = yylex(); ! 179: #ifdef YYDEBUG ! 180: if(yydebug >= 2) { ! 181: if(yychar <= 0) ! 182: printf("lex EOF\n"); ! 183: else if(yytoknames[yychar]) ! 184: printf("lex %s\n", yytoknames[yychar]); ! 185: else ! 186: printf("lex (%c)\n", yychar); ! 187: } ! 188: #endif ! 189: if(yychar < 0) ! 190: yychar = 0; ! 191: } ! 192: if((yyn += yychar) < 0 || yyn >= YYLAST) ! 193: goto yydefault; ! 194: if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */ ! 195: yychar = -1; ! 196: yyval = yylval; ! 197: yystate = yyn; ! 198: if( yyerrflag > 0 ) --yyerrflag; ! 199: goto yystack; ! 200: } ! 201: yydefault: ! 202: /* default state action */ ! 203: if( (yyn=yydef[yystate]) == -2 ) { ! 204: if(yychar < 0) { ! 205: yychar = yylex(); ! 206: #ifdef YYDEBUG ! 207: if(yydebug >= 2) ! 208: if(yychar < 0) ! 209: printf("lex EOF\n"); ! 210: else ! 211: printf("lex %s\n", yytoknames[yychar]); ! 212: #endif ! 213: if(yychar < 0) ! 214: yychar = 0; ! 215: } ! 216: /* look through exception table */ ! 217: for(yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate); ! 218: yyxi += 2 ) ; /* VOID */ ! 219: while( *(yyxi+=2) >= 0 ){ ! 220: if( *yyxi == yychar ) break; ! 221: } ! 222: if( (yyn = yyxi[1]) < 0 ) return(0); /* accept */ ! 223: } ! 224: if( yyn == 0 ){ /* error */ ! 225: /* error ... attempt to resume parsing */ ! 226: switch( yyerrflag ){ ! 227: case 0: /* brand new error */ ! 228: #ifdef YYDEBUG ! 229: yyerror("syntax error\n%s", yystates[yystate]); ! 230: if(yytoknames[yychar]) ! 231: yyerror("saw %s\n", yytoknames[yychar]); ! 232: else if(yychar >= ' ' && yychar < '\177') ! 233: yyerror("saw `%c'\n", yychar); ! 234: else if(yychar == 0) ! 235: yyerror("saw EOF\n"); ! 236: else ! 237: yyerror("saw char 0%o\n", yychar); ! 238: #else ! 239: yyerror( "syntax error" ); ! 240: #endif ! 241: yyerrlab: ! 242: ++yynerrs; ! 243: case 1: ! 244: case 2: /* incompletely recovered error ... try again */ ! 245: yyerrflag = 3; ! 246: /* find a state where "error" is a legal shift action */ ! 247: while ( yyps >= yys ) { ! 248: yyn = yypact[*yyps] + YYERRCODE; ! 249: if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){ ! 250: yystate = yyact[yyn]; /* simulate a shift of "error" */ ! 251: goto yystack; ! 252: } ! 253: yyn = yypact[*yyps]; ! 254: /* the current yyps has no shift onn "error", pop stack */ ! 255: #ifdef YYDEBUG ! 256: if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] ); ! 257: #endif ! 258: --yyps; ! 259: --yypv; ! 260: } ! 261: /* there is no state on the stack with an error shift ... abort */ ! 262: yyabort: ! 263: return(1); ! 264: case 3: /* no shift yet; clobber input char */ ! 265: #ifdef YYDEBUG ! 266: if( yydebug ) { ! 267: printf("error recovery discards "); ! 268: if(yytoknames[yychar]) ! 269: printf("%s\n", yytoknames[yychar]); ! 270: else if(yychar >= ' ' && yychar < '\177') ! 271: printf("`%c'\n", yychar); ! 272: else if(yychar == 0) ! 273: printf("EOF\n"); ! 274: else ! 275: printf("char 0%o\n", yychar); ! 276: } ! 277: #endif ! 278: if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */ ! 279: yychar = -1; ! 280: goto yynewstate; /* try again in the same state */ ! 281: } ! 282: } ! 283: /* reduction by production yyn */ ! 284: #ifdef YYDEBUG ! 285: if(yydebug) { char *s; ! 286: printf("reduce %d in:\n\t", yyn); ! 287: for(s = yystates[yystate]; *s; s++) { ! 288: putchar(*s); ! 289: if(*s == '\n' && *(s+1)) ! 290: putchar('\t'); ! 291: } ! 292: } ! 293: #endif ! 294: yyps -= yyr2[yyn]; ! 295: yypvt = yypv; ! 296: yypv -= yyr2[yyn]; ! 297: yyval = yypv[1]; ! 298: yym=yyn; ! 299: /* consult goto table to find next state */ ! 300: yyn = yyr1[yyn]; ! 301: yyj = yypgo[yyn] + *yyps + 1; ! 302: if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]]; ! 303: switch(yym){ ! 304: ! 305: case 3: ! 306: # line 47 "parse.y" ! 307: { ! 308: do_entry(yypvt[-6].number, yypvt[-4].addrlist, yypvt[-2].namelist, NONAME, NONAME, NONAME); ! 309: } break; ! 310: case 4: ! 311: # line 51 "parse.y" ! 312: { ! 313: do_entry(yypvt[-8].number, yypvt[-6].addrlist, yypvt[-4].namelist, yypvt[-2].namelist, NONAME, NONAME); ! 314: } break; ! 315: case 5: ! 316: # line 55 "parse.y" ! 317: { ! 318: do_entry(yypvt[-10].number, yypvt[-8].addrlist, yypvt[-6].namelist, yypvt[-4].namelist, yypvt[-2].namelist, NONAME); ! 319: } break; ! 320: case 6: ! 321: # line 59 "parse.y" ! 322: { ! 323: do_entry(yypvt[-11].number, yypvt[-9].addrlist, yypvt[-7].namelist, yypvt[-5].namelist, yypvt[-3].namelist, NONAME); ! 324: } break; ! 325: case 7: ! 326: # line 63 "parse.y" ! 327: { ! 328: do_entry(yypvt[-12].number, yypvt[-10].addrlist, yypvt[-8].namelist, yypvt[-6].namelist, yypvt[-4].namelist, yypvt[-2].namelist); ! 329: } break; ! 330: case 10: ! 331: # line 71 "parse.y" ! 332: { ! 333: yyval.addrlist = yypvt[-0].addrlist; ! 334: } break; ! 335: case 11: ! 336: # line 75 "parse.y" ! 337: { ! 338: yypvt[-2].addrlist->addr_link = yypvt[-0].addrlist; ! 339: yyval.addrlist = yypvt[-2].addrlist; ! 340: } break; ! 341: case 12: ! 342: # line 82 "parse.y" ! 343: { ! 344: char *a; ! 345: ! 346: yyval.addrlist = (struct addr *)malloc(sizeof (struct addr)); ! 347: a = (char *)&(yyval.addrlist->addr_val); ! 348: a[0] = yypvt[-6].number; a[1] = yypvt[-4].number; a[2] = yypvt[-2].number; a[3] = yypvt[-0].number; ! 349: yyval.addrlist->addr_link = NOADDR; ! 350: } break; ! 351: case 13: ! 352: # line 93 "parse.y" ! 353: { ! 354: yyval.namelist = yypvt[-0].namelist; ! 355: } break; ! 356: case 14: ! 357: # line 97 "parse.y" ! 358: { ! 359: yypvt[-2].namelist->name_link = yypvt[-0].namelist; ! 360: yyval.namelist = yypvt[-2].namelist; ! 361: } break; ! 362: case 15: ! 363: # line 104 "parse.y" ! 364: { ! 365: yyval.namelist = NONAME; ! 366: } break; ! 367: case 16: ! 368: # line 108 "parse.y" ! 369: { ! 370: yyval.namelist = yypvt[-0].namelist; ! 371: } break; ! 372: case 17: ! 373: # line 114 "parse.y" ! 374: { ! 375: yyval.namelist = NONAME; ! 376: } break; ! 377: case 18: ! 378: # line 118 "parse.y" ! 379: { ! 380: yyval.namelist = yypvt[-0].namelist; ! 381: } break; ! 382: case 19: ! 383: # line 124 "parse.y" ! 384: { ! 385: yyval.namelist = yypvt[-0].namelist; ! 386: } break; ! 387: case 20: ! 388: # line 128 "parse.y" ! 389: { ! 390: yypvt[-2].namelist->name_link = yypvt[-0].namelist; ! 391: yyval.namelist = yypvt[-2].namelist; ! 392: } break; ! 393: case 21: ! 394: # line 135 "parse.y" ! 395: { ! 396: yyval.namelist = yypvt[-0].namelist; ! 397: } break; ! 398: } ! 399: goto yystack; /* stack new state and value */ ! 400: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.