void dump_ruleset(Rule *rules, int num_rules) { int i; for (i = 0; i < num_rules; i++) dump_rule(&(rules[i])); }
void dump_rules(Rule **rules, int nrules) { int i; for (i = 0; i < nrules; i++) { printf("[%4d] ", rules[i]->id); dump_rule(rules[i]); } }
static p_action doAction( YYCHKTYPE t, parse_stack *state ) { YYSTYPE yyval = { 0 }; YYSTYPE *yyvp; YYACTTYPE yyk; YYACTTYPE yyi; YYACTTYPE yyaction; YYACTTYPE rule; YYCHKTYPE yylhs; for(;;) { yyk = *(state->ssp); yyi = yyk + t; while( yyi >= YYUSED || yychktab[yyi] != t ) { yyi = yyk + YYPTOKEN; if( yyi >= YYUSED || yychktab[yyi] != YYPTOKEN ) { goto use_d_token; } yyk = yyacttab[yyi]; yyi = yyk + t; } yyaction = yyacttab[yyi]; if( yyaction == YYNOACTION ) { use_d_token: yyk = *(state->ssp); yyi = yyk + YYDTOKEN; while( yyi >= YYUSED || yychktab[yyi] != YYDTOKEN ) { yyi = yyk + YYPTOKEN; if( yyi >= YYUSED || yychktab[yyi] != YYPTOKEN ) { return( P_SYNTAX ); } yyk = yyacttab[yyi]; yyi = yyk + YYDTOKEN; } yyaction = yyacttab[yyi]; if( yyaction == YYNOACTION ) { return( P_SYNTAX ); } } if( yyaction < YYUSED ) { if( yyaction == YYSTOP ) { return( P_ACCEPT ); } state->ssp++; *(state->ssp) = yyaction; state->vsp++; *(state->vsp) = yylval; #ifdef YYDEBUG puts_far( yytoknames[t] ); #endif return( P_SHIFT ); } rule = yyaction - YYUSED; yyi = yyplentab[rule]; state->vsp -= yyi; state->ssp -= yyi; if( state->ssp < state->sstack ) { return( P_ERROR ); } yylhs = yyplhstab[rule]; yyk = *(state->ssp); yyi = yyk + yylhs; while( yyi >= YYUSED || yychktab[yyi] != yylhs ) { yyi = yyk + YYPTOKEN; if( yyi >= YYUSED || yychktab[yyi] != YYPTOKEN ) { return( P_ERROR ); } yyk = yyacttab[yyi]; yyi = yyk + yylhs; } state->ssp++; *(state->ssp) = yyacttab[yyi]; #if 0 /*** change with new yacc */ yyvp = state->vsp; #else yyvp = ++(state->vsp); #endif #ifdef YYDEBUG dump_rule( rule ); #endif if( !yysyntaxerror ) { switch( rule ) { /* */ /* */ default: #if 0 /*** change with new yacc */ yyval = yyvp[1]; #else yyval = yyvp[0]; #endif } } #if 0 /*** change with new yacc **/ state->vsp++; #endif *(state->vsp) = yyval; /* reduce as far as possible */ } }
bool yyparse( void ) { short yypnum; short yyi, yyk, yylhs, yyaction; short yytoken; short yys[MAXDEPTH], *yysp; YYSTYPE yyv[MAXDEPTH], *yyvp; short yyerrflag; yyerrflag = 0; yyaction = 0; yysp = yys; yyvp = yyv; *yysp = YYSTART; yytoken = yylex(); for(;;){ yynewact: yyk = *yysp; while( (yyi = yyk + yytoken) < 0 || yyi >= YYUSED || yychktab[yyi] != yytoken ) if( (yyi = yyk + YYPTOKEN) < 0 || yyi >= YYUSED || yychktab[yyi] != YYPTOKEN ) goto yycheck1; else yyk = yyacttab[yyi]; yyaction = yyacttab[yyi]; if( yyaction == YYNOACTION ){ yycheck1: yyk = *yysp; while( (yyi = yyk + YYDTOKEN) < 0 || yyi >= YYUSED || yychktab[yyi] != YYDTOKEN ) if( (yyi = yyk + YYPTOKEN) < 0 || yyi >= YYUSED || yychktab[yyi] != YYPTOKEN ) goto yycheck2; else yyk = yyacttab[yyi]; yyaction = yyacttab[yyi]; if( yyaction == YYNOACTION ){ yycheck2: switch( yyerrflag ){ case 0: yyerror( "syntax error" ); yyerrlab: case 1: case 2: yyerrflag = 3; while( yysp >= yys ){ yyk = *yysp; while( (yyi = yyk + YYETOKEN) < 0 || yyi >= YYUSED || yychktab[yyi] != YYETOKEN ) if( (yyi = yyk + YYPTOKEN) < 0 || yyi >= YYUSED || yychktab[yyi] != YYPTOKEN ) goto continu; else yyk = yyacttab[yyi]; yyaction = yyacttab[yyi]; if( yyaction < YYUSED ){ *++yysp = yyaction; ++yyvp; goto yynewact; }; continu:; --yysp; --yyvp; }; YYABORT; case 3: if( yytoken == 0 ) /* EOF token */ YYABORT; yytoken = yylex(); goto yynewact; }; }; }; if( yyaction < YYUSED ){ if( yyaction == YYSTOP ){ YYACCEPT; } else { *++yysp = yyaction; *++yyvp = yylval; if( yyerrflag ) --yyerrflag; yytoken = yylex(); }; } else { yypnum = yyaction - YYUSED; yyi = yyplentab[yypnum]; yysp -= yyi; yyvp -= yyi; yylhs = yyplhstab[yypnum]; if( yysp < yys ){ printf( "stack underflow\n" ); YYABORT; }; yyk = *yysp; while( (yyi = yyk + yylhs) < 0 || yyi >= YYUSED || yychktab[yyi] != yylhs ){ if( (yyi = yyk + YYPTOKEN) < 0 || yyi >= YYUSED || yychktab[yyi] != YYPTOKEN ){ printf( "missing nonterminal\n" ); YYABORT; }; yyk = yyacttab[yyi]; }; *++yysp = yyacttab[yyi]; ++yyvp; #ifdef AS_DEBUG_DUMP dump_rule( yypnum ); #endif switch( yypnum ){ default: yyval = yyvp[0]; }; *yyvp = yyval; }; }; }