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