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