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