|
DataMuseum.dkPresents historical artifacts from the history of: Commodore CBM-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Commodore CBM-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 2577 (0xa11) Types: TextFile Notes: UNIX file Names: »yyparse.c«
└─⟦eafc30061⟧ Bits:30001199 Commodore 900 hard disk image └─⟦8281d0872⟧ UNIX Filesystem └─ ⟦294235107⟧ »vol3.fd« UNIX Filesystem └─ ⟦this⟧ »lib/yyparse.c« └─⟦eafc30061⟧ Bits:30001199 Commodore 900 hard disk image └─⟦5ec4c54f2⟧ UNIX Filesystem └─ ⟦this⟧ »lib/yyparse.c« └─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code └─⟦926b8033d⟧ UNIX Filesystem └─ ⟦this⟧ »lib/yyparse.c« └─⟦f27320a65⟧ Bits:30001972 Commodore 900 hard disk image with partial source code └─⟦f4b8d8c84⟧ UNIX Filesystem └─ ⟦this⟧ »cmd/yacc/yyparse.c«
#include "action.h" #define YYNOCHAR (-1000) #define yyerrok yyerrflag=0 #define yyclearin yylval=YYNOCHAR int yystack[YYMAXDEPTH]; YYSTYPE yyvstack[YYMAXDEPTH], *yyv; int yychar; #ifdef YYDEBUG int yydebug = 1; /* No sir, not in the BSS */ #include <stdio.h> #endif short yyerrflag; int *yys; yyparse() { register YYSTYPE *yypvt; int act; register unsigned *ip, yystate; int pno; yystate = 0; yychar = YYNOCHAR; yyv = &yyvstack[-1]; yys = &yystack[-1]; stack: if( ++yys >= &yystack[YYMAXDEPTH] ) { write(2, "Stack overflow\n", 15); exit(1); } *yys = yystate; *++yyv = yyval; #ifdef YYDEBUG if( yydebug ) fprintf(stdout, "Stack state %d, char %d\n", yystate, yychar); #endif read: ip = &yyact[yypa[yystate]]; if( ip[1] != YYNOCHAR ) { if( yychar == YYNOCHAR ) { yychar = yylex(); #ifdef YYDEBUG if( yydebug ) fprintf(stdout, "lex read char %d, val %d\n", yychar, yylval); #endif } while (ip[1]!=YYNOCHAR) { if (ip[1]==yychar) break; ip += 2; } } act = ip[0]; switch( act>>YYACTSH ) { case YYSHIFTACT: if( ip[1]==YYNOCHAR ) goto YYerract; if( yychar != -1 ) yychar = YYNOCHAR; /* dont throw away EOF */ yystate = act&YYAMASK; yyval = yylval; #ifdef YYDEBUG if( yydebug ) fprintf(stdout, "shift %d\n", yystate); #endif if( yyerrflag ) --yyerrflag; goto stack; case YYACCEPTACT: #ifdef YYDEBUG if( yydebug ) fprintf(stdout, "accept\n"); #endif return(0); case YYERRACT: YYerract: switch (yyerrflag) { case 0: yyerror("Syntax error"); case 1: case 2: yyerrflag = 3; while( yys >= & yystack[0] ) { ip = &yyact[yypa[*yys]]; while( ip[1]!=YYNOCHAR ) ip += 2; if( (*ip&~YYAMASK) == (YYSHIFTACT<<YYACTSH) ) { yystate = *ip&YYAMASK; goto stack; } #ifdef YYDEBUG if( yydebug ) fprintf(stderr, "error recovery leaves state %d, uncovers %d\n", *yys, yys[-1]); #endif yys--; yyv--; } #ifdef YYDEBUG if( yydebug ) fprintf(stderr, "no shift on error; abort\n"); #endif return(1); case 3: #ifdef YYDEBUG if( yydebug ) fprintf(stderr, "Error recovery clobbers char %o\n", yychar); #endif if( yychar==YYEOFVAL ) return(1); yychar = YYNOCHAR; goto read; } case YYREDACT: pno = act&YYAMASK; #ifdef YYDEBUG if( yydebug ) fprintf(stdout, "reduce %d\n", pno); #endif yypvt = yyv; yyv -= yypn[pno]; yys -= yypn[pno]; yyval = yyv[1]; switch(pno) { $A } ip = &yygo[ yypgo[yypdnt[pno]] ]; while( *ip!=*yys && *ip!=YYNOCHAR ) ip += 2; yystate = ip[1]; goto stack; } }