|
|
1.1 ! root 1: #define YYNOCHAR (-1000) ! 2: #define yyerrok yyerrflag=0 ! 3: #define yyclearin yylval=YYNOCHAR ! 4: int yystack[YYMAXDEPTH]; ! 5: YYSTYPE yyvstack[YYMAXDEPTH], *yyv; ! 6: int yychar; ! 7: ! 8: #ifdef YYDEBUG ! 9: int yydebug = 1; /* No sir, not in the BSS */ ! 10: #include <stdio.h> ! 11: #endif ! 12: ! 13: short yyerrflag; ! 14: int *yys; ! 15: ! 16: yyparse() ! 17: { ! 18: register YYSTYPE *yypvt; ! 19: int act; ! 20: register unsigned *ip, yystate; ! 21: int pno; ! 22: yystate = 0; ! 23: yychar = YYNOCHAR; ! 24: yyv = &yyvstack[-1]; ! 25: yys = &yystack[-1]; ! 26: ! 27: stack: ! 28: if( ++yys >= &yystack[YYMAXDEPTH] ) { ! 29: write(2, "Stack overflow\n", 15); ! 30: exit(1); ! 31: } ! 32: *yys = yystate; ! 33: *++yyv = yyval; ! 34: #ifdef YYDEBUG ! 35: if( yydebug ) ! 36: fprintf(stdout, "Stack state %d, char %d\n", yystate, yychar); ! 37: #endif ! 38: ! 39: read: ! 40: ip = &yyact[yypa[yystate]]; ! 41: if( ip[1] != YYNOCHAR ) { ! 42: if( yychar == YYNOCHAR ) { ! 43: yychar = yylex(); ! 44: #ifdef YYDEBUG ! 45: if( yydebug ) ! 46: fprintf(stdout, "lex read char %d, val %d\n", yychar, yylval); ! 47: #endif ! 48: } ! 49: while (ip[1]!=YYNOCHAR) { ! 50: if (ip[1]==yychar) ! 51: break; ! 52: ip += 2; ! 53: } ! 54: } ! 55: act = ip[0]; ! 56: switch( act>>YYACTSH ) { ! 57: case YYSHIFTACT: ! 58: if( ip[1]==YYNOCHAR ) ! 59: goto YYerract; ! 60: if( yychar != -1 ) ! 61: yychar = YYNOCHAR; /* dont throw away EOF */ ! 62: yystate = act&YYAMASK; ! 63: yyval = yylval; ! 64: #ifdef YYDEBUG ! 65: if( yydebug ) ! 66: fprintf(stdout, "shift %d\n", yystate); ! 67: #endif ! 68: if( yyerrflag ) ! 69: --yyerrflag; ! 70: goto stack; ! 71: ! 72: case YYACCEPTACT: ! 73: #ifdef YYDEBUG ! 74: if( yydebug ) ! 75: fprintf(stdout, "accept\n"); ! 76: #endif ! 77: return(0); ! 78: ! 79: case YYERRACT: ! 80: YYerract: ! 81: switch (yyerrflag) { ! 82: case 0: ! 83: yyerror("Syntax error"); ! 84: ! 85: case 1: ! 86: case 2: ! 87: ! 88: yyerrflag = 3; ! 89: while( yys >= & yystack[0] ) { ! 90: ip = &yyact[yypa[*yys]]; ! 91: while( ip[1]!=YYNOCHAR ) ! 92: ip += 2; ! 93: if( (*ip&~YYAMASK) == (YYSHIFTACT<<YYACTSH) ) { ! 94: yystate = *ip&YYAMASK; ! 95: goto stack; ! 96: } ! 97: #ifdef YYDEBUG ! 98: if( yydebug ) ! 99: fprintf(stderr, "error recovery leaves state %d, uncovers %d\n", *yys, yys[-1]); ! 100: #endif ! 101: yys--; ! 102: yyv--; ! 103: } ! 104: #ifdef YYDEBUG ! 105: if( yydebug ) ! 106: fprintf(stderr, "no shift on error; abort\n"); ! 107: #endif ! 108: return(1); ! 109: ! 110: case 3: ! 111: #ifdef YYDEBUG ! 112: if( yydebug ) ! 113: fprintf(stderr, "Error recovery clobbers char %o\n", yychar); ! 114: #endif ! 115: if( yychar==YYEOFVAL ) ! 116: return(1); ! 117: yychar = YYNOCHAR; ! 118: goto read; ! 119: } ! 120: ! 121: case YYREDACT: ! 122: pno = act&YYAMASK; ! 123: #ifdef YYDEBUG ! 124: if( yydebug ) ! 125: fprintf(stdout, "reduce %d\n", pno); ! 126: #endif ! 127: yypvt = yyv; ! 128: yyv -= yypn[pno]; ! 129: yys -= yypn[pno]; ! 130: yyval = yyv[1]; ! 131: switch(pno) { ! 132: $A ! 133: } ! 134: ip = &yygo[ yypgo[yypdnt[pno]] ]; ! 135: while( *ip!=*yys && *ip!=YYNOCHAR ) ! 136: ip += 2; ! 137: yystate = ip[1]; ! 138: goto stack; ! 139: } ! 140: } ! 141: ! 142: ! 143: ! 144:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.