📄 parse.c
字号:
; break;}case 38:#line 449 "parse.y"{ varlength = true; if ( yyvsp[-3] > yyvsp[-1] || yyvsp[-3] < 0 ) { synerr( "bad iteration values" ); yyval = yyvsp[-5]; } else { if ( yyvsp[-3] == 0 ) { if ( yyvsp[-1] <= 0 ) { synerr( "bad iteration values" ); yyval = yyvsp[-5]; } else yyval = mkopt( mkrep( yyvsp[-5], 1, yyvsp[-1] ) ); } else yyval = mkrep( yyvsp[-5], yyvsp[-3], yyvsp[-1] ); } ; break;}case 39:#line 475 "parse.y"{ varlength = true; if ( yyvsp[-2] <= 0 ) { synerr( "iteration value must be positive" ); yyval = yyvsp[-4]; } else yyval = mkrep( yyvsp[-4], yyvsp[-2], INFINITY ); ; break;}case 40:#line 489 "parse.y"{ /* the singleton could be something like "(foo)", * in which case we have no idea what its length * is, so we punt here. */ varlength = true; if ( yyvsp[-1] <= 0 ) { synerr( "iteration value must be positive" ); yyval = yyvsp[-3]; } else yyval = link_machines( yyvsp[-3], copysingl( yyvsp[-3], yyvsp[-1] - 1 ) ); ; break;}case 41:#line 507 "parse.y"{ if ( ! madeany ) { /* create the '.' character class */ anyccl = cclinit(); ccladd( anyccl, '\n' ); cclnegate( anyccl ); if ( useecs ) mkeccl( ccltbl + cclmap[anyccl], ccllen[anyccl], nextecm, ecgroup, csize, csize ); madeany = true; } ++rulelen; yyval = mkstate( -anyccl ); ; break;}case 42:#line 529 "parse.y"{ if ( ! cclsorted ) /* sort characters for fast searching. We use a * shell sort since this list could be large. */ cshell( ccltbl + cclmap[yyvsp[0]], ccllen[yyvsp[0]], true ); if ( useecs ) mkeccl( ccltbl + cclmap[yyvsp[0]], ccllen[yyvsp[0]], nextecm, ecgroup, csize, csize ); ++rulelen; yyval = mkstate( -yyvsp[0] ); ; break;}case 43:#line 546 "parse.y"{ ++rulelen; yyval = mkstate( -yyvsp[0] ); ; break;}case 44:#line 553 "parse.y"{ yyval = yyvsp[-1]; ; break;}case 45:#line 556 "parse.y"{ yyval = yyvsp[-1]; ; break;}case 46:#line 559 "parse.y"{ ++rulelen; if ( caseins && yyvsp[0] >= 'A' && yyvsp[0] <= 'Z' ) yyvsp[0] = clower( yyvsp[0] ); yyval = mkstate( yyvsp[0] ); ; break;}case 47:#line 570 "parse.y"{ yyval = yyvsp[-1]; ; break;}case 48:#line 573 "parse.y"{ /* *Sigh* - to be compatible Unix lex, negated ccls * match newlines */#ifdef NOTDEF ccladd( yyvsp[-1], '\n' ); /* negated ccls don't match '\n' */ cclsorted = false; /* because we added the newline */#endif cclnegate( yyvsp[-1] ); yyval = yyvsp[-1]; ; break;}case 49:#line 587 "parse.y"{ if ( yyvsp[-2] > yyvsp[0] ) synerr( "negative range in character class" ); else { if ( caseins ) { if ( yyvsp[-2] >= 'A' && yyvsp[-2] <= 'Z' ) yyvsp[-2] = clower( yyvsp[-2] ); if ( yyvsp[0] >= 'A' && yyvsp[0] <= 'Z' ) yyvsp[0] = clower( yyvsp[0] ); } for ( i = yyvsp[-2]; i <= yyvsp[0]; ++i ) ccladd( yyvsp[-3], i ); /* keep track if this ccl is staying in alphabetical * order */ cclsorted = cclsorted && (yyvsp[-2] > lastchar); lastchar = yyvsp[0]; } yyval = yyvsp[-3]; ; break;}case 50:#line 615 "parse.y"{ if ( caseins ) if ( yyvsp[0] >= 'A' && yyvsp[0] <= 'Z' ) yyvsp[0] = clower( yyvsp[0] ); ccladd( yyvsp[-1], yyvsp[0] ); cclsorted = cclsorted && (yyvsp[0] > lastchar); lastchar = yyvsp[0]; yyval = yyvsp[-1]; ; break;}case 51:#line 627 "parse.y"{ cclsorted = true; lastchar = 0; yyval = cclinit(); ; break;}case 52:#line 635 "parse.y"{ if ( caseins ) if ( yyvsp[0] >= 'A' && yyvsp[0] <= 'Z' ) yyvsp[0] = clower( yyvsp[0] ); ++rulelen; yyval = link_machines( yyvsp[-1], mkstate( yyvsp[0] ) ); ; break;}case 53:#line 646 "parse.y"{ yyval = mkstate( SYM_EPSILON ); ; break;}}#line 783 "/u/icdc/rdt/tools/lib/bison.cc" /* the action file gets copied in in place of this dollarsign */ yyvsp -= yylen; yyssp -= yylen;#ifdef YY_parse_LSP_NEEDED yylsp -= yylen;#endif#if YY_parse_DEBUG != 0 if (YY_parse_DEBUG_FLAG) { short *ssp1 = yyss - 1; fprintf (stderr, "state stack now"); while (ssp1 != yyssp) fprintf (stderr, " %d", *++ssp1); fprintf (stderr, "\n"); }#endif *++yyvsp = yyval;#ifdef YY_parse_LSP_NEEDED yylsp++; if (yylen == 0) { yylsp->first_line = YY_parse_LLOC.first_line; yylsp->first_column = YY_parse_LLOC.first_column; yylsp->last_line = (yylsp-1)->last_line; yylsp->last_column = (yylsp-1)->last_column; yylsp->text = 0; } else { yylsp->last_line = (yylsp+yylen-1)->last_line; yylsp->last_column = (yylsp+yylen-1)->last_column; }#endif /* Now "shift" the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTBASE] + *yyssp; if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTBASE]; YYGOTO(yynewstate);YYLABEL(yyerrlab) /* here on detecting error */ if (! yyerrstatus) /* If not already recovering from an error, report this error. */ { ++YY_parse_NERRS;#ifdef YY_parse_ERROR_VERBOSE yyn = yypact[yystate]; if (yyn > YYFLAG && yyn < YYLAST) { int size = 0; char *msg; int x, count; count = 0; /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ for (x = (yyn < 0 ? -yyn : 0); x < (sizeof(yytname) / sizeof(char *)); x++) if (yycheck[x + yyn] == x) size += strlen(yytname[x]) + 15, count++; msg = (char *) malloc(size + 15); if (msg != 0) { strcpy(msg, "parse error"); if (count < 5) { count = 0; for (x = (yyn < 0 ? -yyn : 0); x < (sizeof(yytname) / sizeof(char *)); x++) if (yycheck[x + yyn] == x) { strcat(msg, count == 0 ? ", expecting `" : " or `"); strcat(msg, yytname[x]); strcat(msg, "'"); count++; } } YY_parse_ERROR(msg); free(msg); } else YY_parse_ERROR ("parse error; also virtual memory exceeded"); } else#endif /* YY_parse_ERROR_VERBOSE */ YY_parse_ERROR("parse error"); } YYGOTO(yyerrlab1);YYLABEL(yyerrlab1) /* here on error raised explicitly by an action */ if (yyerrstatus == 3) { /* if just tried and failed to reuse lookahead token after an error, discard it. */ /* return failure if at end of input */ if (YY_parse_CHAR == YYEOF) YYABORT;#if YY_parse_DEBUG != 0 if (YY_parse_DEBUG_FLAG) fprintf(stderr, "Discarding token %d (%s).\n", YY_parse_CHAR, yytname[yychar1]);#endif YY_parse_CHAR = YYEMPTY; } /* Else will try to reuse lookahead token after shifting the error token. */ yyerrstatus = 3; /* Each real token shifted decrements this */ YYGOTO(yyerrhandle);YYLABEL(yyerrdefault) /* current state does not do anything special for the error token. */#if 0 /* This is wrong; only states that explicitly want error tokens should shift them. */ yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ if (yyn) YYGOTO(yydefault);#endifYYLABEL(yyerrpop) /* pop the current state because it cannot handle the error token */ if (yyssp == yyss) YYABORT; yyvsp--; yystate = *--yyssp;#ifdef YY_parse_LSP_NEEDED yylsp--;#endif#if YY_parse_DEBUG != 0 if (YY_parse_DEBUG_FLAG) { short *ssp1 = yyss - 1; fprintf (stderr, "Error: state stack now"); while (ssp1 != yyssp) fprintf (stderr, " %d", *++ssp1); fprintf (stderr, "\n"); }#endifYYLABEL(yyerrhandle) yyn = yypact[yystate]; if (yyn == YYFLAG) YYGOTO(yyerrdefault); yyn += YYTERROR; if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) YYGOTO(yyerrdefault); yyn = yytable[yyn]; if (yyn < 0) { if (yyn == YYFLAG) YYGOTO(yyerrpop); yyn = -yyn; YYGOTO(yyreduce); } else if (yyn == 0) YYGOTO(yyerrpop); if (yyn == YYFINAL) YYACCEPT;#if YY_parse_DEBUG != 0 if (YY_parse_DEBUG_FLAG) fprintf(stderr, "Shifting error token, ");#endif *++yyvsp = YY_parse_LVAL;#ifdef YY_parse_LSP_NEEDED *++yylsp = YY_parse_LLOC;#endif yystate = yyn; YYGOTO(yynewstate);/* end loop, in which YYGOTO may be used. */ YYENDGOTO}/* END *//* #line 982 "/u/icdc/rdt/tools/lib/bison.cc" */#line 1918 "y.tab.c"#line 649 "parse.y"/* build_eof_action - build the "<<EOF>>" action for the active start * conditions */void build_eof_action() { register int i; for ( i = 1; i <= actvp; ++i ) { if ( sceof[actvsc[i]] ) format_pinpoint_message( "multiple <<EOF>> rules for start condition %s", scname[actvsc[i]] ); else { sceof[actvsc[i]] = true; fprintf( temp_action_file, "case YY_STATE_EOF(%s):\n", scname[actvsc[i]] ); } } line_directive_out( temp_action_file ); }/* synerr - report a syntax error */void synerr( str )char str[]; { syntaxerror = true; pinpoint_message( str ); }/* format_pinpoint_message - write out a message formatted with one string, * pinpointing its location */void format_pinpoint_message( msg, arg )char msg[], arg[]; { char errmsg[MAXLINE]; (void) sprintf( errmsg, msg, arg ); pinpoint_message( errmsg ); }/* pinpoint_message - write out a message, pinpointing its location */void pinpoint_message( str )char str[]; { fprintf( stderr, "\"%s\", line %d: %s\n", infilename, linenum, str ); }/* yyerror - eat up an error message from the parser; * currently, messages are ignore */void yyerror( msg )char msg[]; { }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -