📄 gram.c
字号:
57, 57, 57, 57, 57, 57, 57, 57, 57, 10, 10, 10, 74, 7, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 16, 16, 16, 50, 50, 50, 50, 51, 51, 64, 64, 65, 65, 66, 66, 80, 54, 54, 67, 67, 81, 82, 76, 83, 84, 77, 77, 85, 85, 45, 45, 45, 70, 70, 86, 86, 72, 72, 87, 36, 18, 18, 19, 19, 75, 75, 89, 88, 88, 90, 90, 43, 43, 91, 91, 3, 68, 68, 92, 92, 95, 93, 94, 94, 96, 96, 11, 69, 69, 97, 20, 20, 71, 21, 21, 22, 22, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 12, 12, 13, 13, 13, 13, 13, 13, 37, 37, 37, 37, 32, 40, 40, 44, 44, 48, 48, 48, 48, 48, 48, 48, 47, 49, 49, 49, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 58, 58, 58, 58, 58, 58, 58, 58, 58, 99, 23, 24, 24, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 4, 100, 101, 101, 101, 101, 73, 73, 35, 25, 25, 46, 46, 14, 14, 28, 28, 59, 78, 79, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 111, 111, 111, 106, 113, 113, 113, 108, 108, 105, 105, 114, 114, 115, 115, 115, 115, 115, 115, 15, 107, 109, 110, 110, 29, 29, 6, 6, 30, 30, 30, 31, 31, 31, 31, 31, 31, 5, 5, 5, 5, 5, 112 };yytabelem yyr2[]={ 0, 0, 3, 2, 2, 2, 3, 3, 2, 1, 1, 3, 4, 3, 4, 4, 5, 3, 0, 1, 1, 0, 1, 2, 3, 1, 3, 1, 3, 0, 2, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 5, 7, 5, 5, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 6, 3, 4, 5, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 0, 6, 0, 0, 0, 2, 3, 1, 3, 1, 2, 1, 1, 3, 1, 1, 1, 3, 3, 2, 1, 5, 1, 3, 0, 3, 0, 2, 3, 1, 3, 1, 1, 1, 3, 1, 3, 3, 4, 1, 0, 2, 1, 3, 1, 3, 1, 1, 2, 4, 1, 3, 0, 0, 1, 1, 3, 1, 3, 1, 1, 1, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 5, 5, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 3, 1, 1, 3, 3, 3, 3, 2, 3, 1, 7, 4, 1, 2, 2, 6, 2, 2, 5, 3, 1, 4, 4, 5, 2, 1, 1, 10, 1, 3, 4, 3, 3, 1, 1, 3, 3, 7, 7, 0, 1, 3, 1, 3, 1, 2, 1, 1, 1, 3, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 2, 3, 1, 3, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 3, 1, 3, 1, 1, 1, 2, 2, 2, 1, 3, 3, 4, 4, 1, 3, 1, 5, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 3, 5, 5, 5, 0 };yytabelem yychk[]={-1000, -1, -55, -2, 256, 3, 1, -56, -57, -58, 18, 37, 4, 60, 23, 69, 44, -7, 40, -10, -50, -64, -65, -66, -67, -68, -69, 66, 43, 57, -98, 33, 97, -99, 36, 35, 39, -8, 27, 42, 53, 41, 30, 50, 55,-100, 20, 29,-101,-102, 48, -35, 64, -14, 49, -9, 19, 45, 46, 47,-103, 24, 58, 68, 52, 63, 28, 34, 31, 54, 25, 72, 32, 21, 67, 100,-104,-106,-107,-109,-110,-111,-113, 62, 73, 59, 22, 65, 38, 51, 56, 26, -17, 5, -59, -60, -60, -60, -60, 44, -73, 78, -52, -33, 14, 78, 99, -73, 78, 78, 78, 78, -73, 78, -97, 83, -70, -86, -33, -51, 85, 83, -71, -59, -98, 70, -59, -59, -59, -16, 82, -71, -71, -71, -71, -81, -71, -37, -33, -59, -59, -59, 74, -59, -59, -59, -59, -59, -59, -59,-105, -42, 82, 84, 74, -37, -48, -41, -12, 12, 13, 5, 6, 7, 8, -49, 80, 81, 11, 10, 9,-105, 74,-105,-108, -42, 82,-105, 78, -59, -59, -59, -59, -59, -53, -52, -53, -52, -52, -60, -33, -26, 74, -33, -76, -51, -36, -33, -33, -33, -80, 74, -82, -76, -92, -93, -95, -33, 78, 14, 74, -78, -73, 74, -78, -36, -51, -33, -33, -80, -82, -92, 76, -32, 74, -4, 6, 74, 75, -25, -46, -38, 82, -39, 74, -47, -37, -48, -12, 90, -40, -38, -40, 74, -3, 6, -33, 74, -33, -41,-114, -42, 74,-115, 82, 84, -15, 15, -12, 82, 83, 84, 85, -41, -41, -29, 78, -6, -37, 74, 78, -30, -39, -5, -31, -38, -47, 74, -30,-112,-112,-112,-112, -41, 82, -61, 74, -26, -26, -52, -71, 75, -27, -34, -33, 82, -75, 74, -77, -84, -73, -75, -54, -37, -19, -18, -37, 74, 74, -7, 83, -86, 83, -72, -87, -33, -3, -24, -23, 98, -33, -38, -38, 74, -36, -38, -21, -40, -22, -38, 71, -38, 75, 78, -12, 82, 83, 84, -13, 89, 88, 87, 86, 85, 91, 93, 92, 95, 94, 96, -3, -38, -39, -38, -38, -38, -73, -91, -3, 75, 75, 78, -41, -38, 82, 84, -41, -41, -41, -41, -41, 75, 78, -29, -29, -29, 78, 78, 78, -38, -39, -5, -31,-112,-112, 75, -62, -63, 14, -26, -74, 75, 78, -16, -88, -89, 99, 78, -85, -45, -44, -12, -47, -33, -48, 74, -36, 75, 78, 83, 78, -19, -94, -96, -11, 14, -20, -33, 75, 78, 76, -79, 74, 76, 75, -79, 82, 75, 77, 78, -33, 75, -46, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 75, 78, 75, 74, 78, 75,-115, -41, 75, -6, 78, -39, -5, -39, -5, -39, -5, 75, 78, 78, 78, 75, 78, 76, -75, -34, 75, 78, -90, -43, -38, 82, -85, 82, -44, -37, -83, -18, 78, 75, 78, 81, 78, -87, -38, -73, -38, -28, -38, 70, 75, -32, 74, -40, -38, -3, -39, -91, -3, -73, -23, -33, -39, -23, -23, -23, -63, 14, -16, -90, 77, -45, -44, -77, -23, -96, -11, -33, -24, 75, 78, -79, 75, 78, 75, 75, -38, 75, 75, 75, 75, -43, -38, 83, 75, -38, -3, 78, -3 };yytabelem yydef[]={ 1, -2, 0, 0, 9, 10, 2, 3, 4, 5, 0, 240, 8, 18, 18, 18, 18, 229, 0, 37, -2, 39, 40, 41, -2, 43, 44, 45, 47, 139, 199, 240, 202, 0, 240, 240, 240, 67, 139, 139, 139, 139, 87, 139, 134, 0, 240, 240, 215, 216, 240, 218, 240, 240, 240, 54, 224, 240, 240, 240, 243, 240, 236, 237, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 0, 0, 0, 0, 256, 240, 240, 240, 240, 240, 259, 260, 261, 263, 264, 265, 6, 36, 7, 21, 21, 0, 0, 18, 0, 230, 29, 19, 20, 0, 89, 0, 230, 0, 0, 0, 89, 127, 135, 0, 46, 99, 101, 102, 74, 0, 0, -2, 203, 204, 0, 206, 207, 53, 241, 0, 0, 0, 0, 89, 127, 0, 169, 0, 214, 0, 0, 174, 174, 0, 0, 0, 0, 0, 244, -2, 246, 247, 0, 191, 192, 0, 0, 178, 179, 180, 181, 182, 183, 184, 161, 162, 186, 187, 188, 248, 0, 249, 250, -2, 267, 254, 0, 301, 301, 301, 301, 0, 11, 22, 13, 29, 29, 0, 139, 17, 0, 111, 91, 229, 73, 111, 77, 79, 81, 0, 86, 0, 124, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 76, 78, 80, 85, 123, 0, 170, -2, 0, 223, 0, 219, 0, 232, 234, 0, 144, 0, 146, 147, 148, 0, 0, 221, 175, 222, 0, 225, 122, -2, 0, 231, 272, 0, 189, 0, 270, 273, 274, 0, 278, 0, 0, 0, 0, 0, 197, 272, 251, 0, 283, 285, 0, 0, 255, -2, 288, 289, 0, -2, 0, 257, 258, 262, 279, 280, 301, 301, 12, 0, 14, 15, 29, 52, 30, 0, 32, 34, 35, 67, 113, 0, 0, 0, 106, 0, 83, 0, 109, 107, 0, 0, 128, 0, 100, 75, 0, 103, 0, 242, 201, 210, 0, 0, 0, 242, 0, 71, 212, 0, 0, 141, -2, 0, 0, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 164, 165, 166, 167, 168, 235, 0, 144, 153, 159, 0, 0, 0, 120, -2, 269, 0, 0, 275, 276, 277, 193, 194, 195, 196, 198, 268, 0, 253, 0, 252, 0, 0, 0, 0, 144, 0, 0, 281, 282, 23, 0, 25, 27, 16, 111, 31, 0, 50, 0, 0, 51, 0, 92, 94, 96, 0, 98, 176, 177, 0, 72, 82, 0, 90, 0, 0, 0, 129, 131, 133, 136, 137, 48, 0, 0, 229, 0, 0, 0, 68, 0, 171, 174, 0, 213, 0, 233, 149, 150, 151, 152, -2, 155, 156, 157, 158, 160, 145, 0, 208, 0, 0, 229, 271, 272, 190, 284, 0, -2, 291, -2, 293, -2, 295, -2, 0, 0, 0, 24, 0, 0, 67, 33, 112, 0, 114, 116, 119, 118, 93, 0, 97, 84, 91, 110, 0, 125, 0, 0, 0, 104, 105, 0, 0, 209, 238, 205, 242, 172, 174, 0, 143, 0, 144, 0, 121, 0, 0, 169, -2, 0, 0, 0, 26, 28, 49, 115, 0, 95, 96, 0, 0, 130, 132, 138, 200, 211, 0, 69, 173, 0, 185, 227, 228, 286, 298, 299, 300, 117, 119, 88, 108, 239, 0, 0, 217 };# ifdef YYDEBUG# include "y.debug"# endif# define YYFLAG -1000# define YYERROR goto yyerrlab# define YYACCEPT return(0)# define YYABORT return(1)/* parser for yacc output */#ifdef YYDEBUGint yydebug = 0; /* 1 for debugging */#endifYYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */int yychar = -1; /* current input token number */int yynerrs = 0; /* number of errors */yytabelem yyerrflag = 0; /* error recovery flag */yyparse(){ yytabelem yys[YYMAXDEPTH]; int yyj, yym; register YYSTYPE *yypvt; register int yystate, yyn; register yytabelem *yyps; register YYSTYPE *yypv; register yytabelem *yyxi; yystate = 0; yychar = -1; yynerrs = 0; yyerrflag = 0; yyps= &yys[-1]; yypv= &yyv[-1];yystack: /* put a state and value onto the stack */#ifdef YYDEBUG if(yydebug >= 3) if(yychar < 0 || yytoknames[yychar] == 0) printf("char %d in %s", yychar, yystates[yystate]); else printf("%s in %s", yytoknames[yychar], yystates[yystate]);#endif if( ++yyps >= &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); } *yyps = yystate; ++yypv; *yypv = yyval;yynewstate: yyn = yypact[yystate]; if(yyn <= YYFLAG) goto yydefault; /* simple state */ if(yychar<0) { yychar = yylex();#ifdef YYDEBUG if(yydebug >= 2) { if(yychar <= 0) printf("lex EOF\n"); else if(yytoknames[yychar]) printf("lex %s\n", yytoknames[yychar]); else printf("lex (%c)\n", yychar); }#endif if(yychar < 0) yychar = 0; } if((yyn += yychar) < 0 || yyn >= YYLAST) goto yydefault; if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */ yychar = -1; yyval = yylval; yystate = yyn; if( yyerrflag > 0 ) --yyerrflag; goto yystack; }yydefault: /* default state action */ if( (yyn=yydef[yystate]) == -2 ) { if(yychar < 0) { yychar = yylex();#ifdef YYDEBUG if(yydebug >= 2) if(yychar < 0) printf("lex EOF\n"); else printf("lex %s\n", yytoknames[yychar]);#endif if(yychar < 0) yychar = 0; } /* look through exception table */ for(yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate); yyxi += 2 ) ; /* VOID */ while( *(yyxi+=2) >= 0 ){ if( *yyxi == yychar ) break; } if( (yyn = yyxi[1]) < 0 ) return(0); /* accept */ } if( yyn == 0 ){ /* error */ /* error ... attempt to resume parsing */ switch( yyerrflag ){ case 0: /* brand new error */#ifdef YYDEBUG yyerror("syntax error\n%s", yystates[yystate]); if(yytoknames[yychar]) yyerror("saw %s\n", yytoknames[yychar]); else if(yychar >= ' ' && yychar < '\177') yyerror("saw `%c'\n", yychar); else if(yychar == 0) yyerror("saw EOF\n"); else yyerror("saw char 0%o\n", yychar);#else yyerror( "syntax error" );#endifyyerrlab: ++yynerrs; case 1: case 2: /* incompletely recovered error ... try again */ yyerrflag = 3; /* find a state where "error" is a legal shift action */ while ( yyps >= yys ) { yyn = yypact[*yyps] + YYERRCODE; if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){ yystate = yyact[yyn]; /* simulate a shift of "error" */ goto yystack; } yyn = yypact[*yyps]; /* the current yyps has no shift onn "error", pop stack */#ifdef YYDEBUG if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );#endif --yyps; --yypv; } /* there is no state on the stack with an error shift ... abort */yyabort: return(1); case 3: /* no shift yet; clobber input char */#ifdef YYDEBUG if( yydebug ) { printf("error recovery discards "); if(yytoknames[yychar]) printf("%s\n", yytoknames[yychar]); else if(yychar >= ' ' && yychar < '\177') printf("`%c'\n", yychar); else if(yychar == 0) printf("EOF\n"); else printf("char 0%o\n", yychar); }#endif if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */ yychar = -1; goto yynewstate; /* try again in the same state */ } } /* reduction by production yyn */#ifdef YYDEBUG if(yydebug) { char *s; printf("reduce %d in:\n\t", yyn); for(s = yystates[yystate]; *s; s++) { putchar(*s); if(*s == '\n' && *(s+1)) putchar('\t'); } }#endif yyps -= yyr2[yyn]; yypvt = yypv; yypv -= yyr2[yyn]; yyval = yypv[1]; yym=yyn; /* consult goto table to find next state */ yyn = yyr1[yyn]; yyj = yypgo[yyn] + *yyps + 1; if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]]; switch(yym){ case 3:/* # line 218 "gram.in" */{/* stat: is the nonterminal for Fortran statements */ lastwasbranch = NO; } break;case 5:/* # line 224 "gram.in" */{ /* forbid further statement function definitions... */ if (parstate == INDATA && laststfcn != thisstno) parstate = INEXEC; thisstno++; if(yypvt[-1].labval && (yypvt[-1].labval->labelno==dorange)) enddo(yypvt[-1].labval->labelno); if(lastwasbranch && thislabel==NULL) warn("statement cannot be reached"); lastwasbranch = thiswasbranch; thiswasbranch = NO; if(yypvt[-1].labval) { if(yypvt[-1].labval->labtype == LABFORMAT) err("label already that of a format"); else yypvt[-1].labval->labtype = LABEXEC; } freetemps(); } break;case 6:/* # line 244 "gram.in" */{ if (can_include) doinclude( yypvt[-0].charpval ); else { fprintf(diagfile, "Cannot open file %s\n", yypvt[-0].charpval); done(1); } } break;case 7:/* # line 252 "gram.in" */{ if (yypvt[-2].labval) lastwasbranch = NO; endproc(); /* lastwasbranch = NO; -- set in endproc() */ } break;case 8:/* # line 257 "gram.in" */{ unclassifiable();/* flline flushes the current line, ignoring the rest of the text there */ flline(); } break;case 9:/* # line 263 "gram.in" */{ flline(); needkwd = NO; inioctl = NO; yyerrok; yyclearin; } break;case 10:/* # line 268 "gram.in" */{ if(yystno != 0) { yyval.labval = thislabel = mklabel(yystno); if( ! headerdone ) { if (procclass == CLUNKNOWN) procclass = CLMAIN; puthead(CNULL, procclass); } if(thislabel->labdefined) execerr("label %s already defined", convic(thislabel->stateno) ); else { if(thislabel->blklevel!=0 && thislabel->blklevel<blklevel && thislabel->labtype!=LABFORMAT) warn1("there is a branch to label %s from outside block", convic( (ftnint) (thislabel->stateno) ) ); thislabel->blklevel = blklevel; thislabel->labdefined = YES; if(thislabel->labtype != LABFORMAT) p1_label((long)(thislabel - labeltab)); } } else yyval.labval = thislabel = NULL; } break;case 11:/* # line 296 "gram.in" */{startproc(yypvt[-0].extval, CLMAIN); } break;case 12:/* # line 298 "gram.in" */{ warn("ignoring arguments to main program"); /* hashclear(); */ startproc(yypvt[-1].extval, CLMAIN); } break;case 13:/* # line 302 "gram.in" */{ if(yypvt[-0].extval) NO66("named BLOCKDATA"); startproc(yypvt[-0].extval, CLBLOCK); } break;case 14:/* # line 305 "gram.in" */{ entrypt(CLPROC, TYSUBR, (ftnint) 0, yypvt[-1].extval, yypvt[-0].chval); } break;case 15:/* # line 307 "gram.in" */{ entrypt(CLPROC, TYUNKNOWN, (ftnint) 0, yypvt[-1].extval, yypvt[-0].chval); } break;case 16:/* # line 309 "gram.in" */{ entrypt(CLPROC, yypvt[-4].ival, varleng, yypvt[-1].extval, yypvt[-0].chval); } break;case 17:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -