gram.c

来自「把fortran语言编的程序转为c语言编的程序, 运行环境linux」· C语言 代码 · 共 1,828 行 · 第 1/4 页

C
1,828
字号
  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 + =
减小字号Ctrl + -
显示快捷键?