home *** CD-ROM | disk | FTP | other *** search
-
- # line 15 "gram.y"
- #include "sc.h"
-
- # line 18 "gram.y"
- typedef union {
- int ival;
- double fval;
- struct ent *ent;
- struct enode *enode;
- char *sval;
- } YYSTYPE;
- # define STRING 257
- # define NUMBER 258
- # define FNUMBER 259
- # define WORD 260
- # define COL 261
- # define S_FORMAT 262
- # define S_LABEL 263
- # define S_LEFTSTRING 264
- # define S_RIGHTSTRING 265
- # define S_GET 266
- # define S_PUT 267
- # define S_MERGE 268
- # define S_LET 269
- # define S_WRITE 270
- # define S_TBL 271
- # define S_PROGLET 272
- # define S_COPY 273
- # define S_SHOW 274
- # define K_FIXED 275
- # define K_SUM 276
- # define K_PROD 277
- # define K_AVE 278
- #define yyclearin yychar = -1
- #define yyerrok yyerrflag = 0
- extern int yychar;
- extern short yyerrflag;
- #ifndef YYMAXDEPTH
- #define YYMAXDEPTH 150
- #endif
- YYSTYPE yylval, yyval;
- # define YYERRCODE 256
- short yyexca[] ={
- -1, 1,
- 0, -1,
- -2, 0,
- -1, 83,
- 60, 0,
- 61, 0,
- 62, 0,
- -2, 34,
- -1, 85,
- 60, 0,
- 61, 0,
- 62, 0,
- -2, 35,
- -1, 86,
- 60, 0,
- 61, 0,
- 62, 0,
- -2, 36,
- -1, 96,
- 60, 0,
- 61, 0,
- 62, 0,
- -2, 39,
- -1, 97,
- 60, 0,
- 61, 0,
- 62, 0,
- -2, 41,
- -1, 98,
- 60, 0,
- 61, 0,
- 62, 0,
- -2, 40,
- };
- # define YYNPROD 43
- # define YYLAST 267
- short yyact[]={
-
- 14, 69, 70, 71, 16, 55, 6, 3, 4, 5,
- 7, 9, 8, 2, 10, 11, 49, 13, 12, 27,
- 49, 54, 26, 43, 49, 20, 44, 43, 45, 53,
- 44, 43, 45, 34, 44, 30, 45, 52, 51, 50,
- 25, 24, 23, 22, 87, 21, 90, 42, 84, 67,
- 33, 42, 105, 32, 65, 42, 31, 67, 59, 57,
- 29, 58, 65, 60, 104, 94, 59, 57, 103, 58,
- 56, 60, 36, 35, 95, 111, 62, 63, 64, 61,
- 110, 109, 93, 67, 62, 63, 64, 61, 65, 39,
- 67, 67, 59, 57, 92, 58, 65, 60, 38, 59,
- 59, 57, 91, 58, 60, 60, 67, 1, 0, 48,
- 62, 63, 64, 48, 0, 0, 0, 48, 62, 63,
- 64, 61, 40, 0, 0, 15, 17, 18, 19, 0,
- 0, 68, 0, 0, 73, 74, 28, 0, 75, 76,
- 66, 0, 72, 0, 0, 0, 0, 0, 66, 0,
- 0, 37, 0, 0, 0, 0, 78, 79, 80, 81,
- 82, 83, 85, 86, 88, 89, 67, 0, 0, 0,
- 0, 0, 0, 0, 66, 59, 57, 0, 58, 77,
- 60, 0, 66, 96, 0, 0, 97, 0, 0, 98,
- 67, 0, 0, 0, 102, 65, 67, 0, 0, 59,
- 57, 0, 58, 0, 60, 59, 57, 0, 58, 0,
- 60, 0, 0, 0, 99, 100, 101, 62, 63, 64,
- 0, 0, 0, 62, 63, 64, 106, 107, 108, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 46, 47, 0, 16, 46, 47, 0, 16, 46,
- 47, 0, 16, 0, 0, 0, 0, 0, 41, 0,
- 0, 0, 41, 0, 0, 0, 41 };
- short yypact[]={
-
- -256,-1000,-257,-257,-257,-257,-236,-212,-214,-215,
- -216,-217,-239,-257,-1000, -1,-223, -5, -8, -11,
- -225,-1000,-1000,-1000,-1000,-1000, 15, 14,-257, -9,
- -1000,-218,-219,-220,-229,-240,-253, 12, 58,-1000,
- -1000, -9,-275, -9, -9, -9,-1000,-1000, -9, -9,
- -1000,-1000,-1000,-1000,-1000,-1000,-257, -9, -9, -9,
- -9, -9, -13, -9, -17, -9, -9, -15,-1000, 62,
- 54, 42, 24,-1000,-1000,-1000,-1000,-1000, 57, 57,
- 73, 73, 16, 133, -9, 133, 133, -9, 163, 157,
- -9,-257,-257,-257,-1000, -9, 133, 133, 133, 10,
- 6, -6, 50,-257,-257,-257, 40, 39, 34,-1000,
- -1000,-1000 };
- short yypgo[]={
-
- 0, 122, 98, 89, 107 };
- short yyr1[]={
-
- 0, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 1 };
- short yyr2[]={
-
- 0, 4, 4, 4, 4, 4, 2, 2, 2, 2,
- 2, 4, 4, 5, 0, 1, 1, 2, 7, 7,
- 7, 3, 2, 2, 1, 1, 2, 2, 3, 3,
- 3, 3, 1, 5, 3, 3, 3, 3, 3, 4,
- 4, 4, 2 };
- short yychk[]={
-
- -1000, -4, 269, 263, 264, 265, 262, 266, 268, 267,
- 270, 271, 274, 273, 256, -1, 261, -1, -1, -1,
- 261, 257, 257, 257, 257, 257, 261, 258, -1, 61,
- 258, 61, 61, 61, 258, 58, 58, -1, -2, -3,
- -1, 275, 64, 40, 43, 45, 258, 259, 126, 33,
- 257, 257, 257, 258, 261, 258, 58, 43, 45, 42,
- 47, 63, 60, 61, 62, 38, 124, 33, -3, 276,
- 277, 278, -2, -3, -3, -3, -3, -1, -2, -2,
- -2, -2, -2, -2, 61, -2, -2, 61, -2, -2,
- 61, 40, 40, 40, 41, 58, -2, -2, -2, -1,
- -1, -1, -2, 58, 58, 58, -1, -1, -1, 41,
- 41, 41 };
- short yydef[]={
-
- 14, -2, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 15, 0, 0, 0, 0, 0,
- 0, 6, 7, 8, 9, 10, 0, 0, 0, 0,
- 42, 0, 0, 0, 0, 0, 0, 0, 1, 32,
- 16, 0, 0, 0, 0, 0, 24, 25, 0, 0,
- 2, 3, 4, 5, 11, 12, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 17, 0,
- 0, 0, 0, 22, 23, 26, 27, 13, 28, 29,
- 30, 31, 0, -2, 0, -2, -2, 0, 37, 38,
- 0, 0, 0, 0, 21, 0, -2, -2, -2, 0,
- 0, 0, 33, 0, 0, 0, 0, 0, 0, 18,
- 19, 20 };
- #ifndef lint
- static char yaccpar_sccsid[] = "@(#)yaccpar 4.1 (Berkeley) 2/11/83";
- #endif not lint
-
- #
- # define YYFLAG -1000
- # define YYERROR goto yyerrlab
- # define YYACCEPT return(0)
- # define YYABORT return(1)
-
- /* parser for yacc output */
-
- #ifdef YYDEBUG
- int yydebug = 0; /* 1 for debugging */
- #endif
- YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
- int yychar = -1; /* current input token number */
- int yynerrs = 0; /* number of errors */
- short yyerrflag = 0; /* error recovery flag */
-
- yyparse() {
-
- short yys[YYMAXDEPTH];
- short yyj, yym;
- register YYSTYPE *yypvt;
- register short yystate, *yyps, yyn;
- register YYSTYPE *yypv;
- register short *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 ) printf( "state %d, char 0%o\n", yystate, yychar );
- #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 ) if( (yychar=yylex())<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 ) if( (yychar=yylex())<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 */
-
- yyerror( "syntax error" );
- yyerrlab:
- ++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 char %d\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 ) printf("reduce %d\n",yyn);
- #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 1:
- # line 59 "gram.y"
- { let (yypvt[-2].ent, yypvt[-0].enode); } break;
- case 2:
- # line 61 "gram.y"
- { label (yypvt[-2].ent, yypvt[-0].sval, 0); } break;
- case 3:
- # line 63 "gram.y"
- { label (yypvt[-2].ent, yypvt[-0].sval, -1); } break;
- case 4:
- # line 65 "gram.y"
- { label (yypvt[-2].ent, yypvt[-0].sval, 1); } break;
- case 5:
- # line 67 "gram.y"
- { fwidth[yypvt[-2].ival] = yypvt[-1].ival;
- FullUpdate++;
- modflg++;
- precision[yypvt[-2].ival] = yypvt[-0].ival; } break;
- case 6:
- # line 71 "gram.y"
- { readfile (yypvt[-0].sval,1); } break;
- case 7:
- # line 72 "gram.y"
- { readfile (yypvt[-0].sval,0); } break;
- case 8:
- # line 73 "gram.y"
- { writefile (yypvt[-0].sval); } break;
- case 9:
- # line 74 "gram.y"
- { printfile (yypvt[-0].sval); } break;
- case 10:
- # line 75 "gram.y"
- { tblprintfile (yypvt[-0].sval); } break;
- case 11:
- # line 76 "gram.y"
- { showcol( yypvt[-2].ival, yypvt[-0].ival); } break;
- case 12:
- # line 77 "gram.y"
- { showrow( yypvt[-2].ival, yypvt[-0].ival); } break;
- case 13:
- # line 79 "gram.y"
- { copy(yypvt[-3].ent, yypvt[-2].ent, yypvt[-0].ent); } break;
- case 16:
- # line 83 "gram.y"
- { yyval.enode = new ('v', yypvt[-0].ent); } break;
- case 17:
- # line 84 "gram.y"
- { yyval.enode = new ('f', 0L, yypvt[-0].enode); } break;
- case 18:
- # line 86 "gram.y"
- { yyval.enode = new (O_REDUCE('+'), yypvt[-3].ent, yypvt[-1].ent); } break;
- case 19:
- # line 88 "gram.y"
- { yyval.enode = new (O_REDUCE('*'), yypvt[-3].ent, yypvt[-1].ent); } break;
- case 20:
- # line 90 "gram.y"
- { yyval.enode = new (O_REDUCE('a'), yypvt[-3].ent, yypvt[-1].ent); } break;
- case 21:
- # line 91 "gram.y"
- { yyval.enode = yypvt[-1].enode; } break;
- case 22:
- # line 92 "gram.y"
- { yyval.enode = yypvt[-0].enode; } break;
- case 23:
- # line 93 "gram.y"
- { yyval.enode = new ('m', 0L, yypvt[-0].enode); } break;
- case 24:
- # line 94 "gram.y"
- { yyval.enode = new ('k', (double) yypvt[-0].ival); } break;
- case 25:
- # line 95 "gram.y"
- { yyval.enode = new ('k', yypvt[-0].fval); } break;
- case 26:
- # line 96 "gram.y"
- { yyval.enode = new ('~', 0L, yypvt[-0].enode); } break;
- case 27:
- # line 97 "gram.y"
- { yyval.enode = new ('~', 0L, yypvt[-0].enode); } break;
- case 28:
- # line 100 "gram.y"
- { yyval.enode = new ('+', yypvt[-2].enode, yypvt[-0].enode); } break;
- case 29:
- # line 101 "gram.y"
- { yyval.enode = new ('-', yypvt[-2].enode, yypvt[-0].enode); } break;
- case 30:
- # line 102 "gram.y"
- { yyval.enode = new ('*', yypvt[-2].enode, yypvt[-0].enode); } break;
- case 31:
- # line 103 "gram.y"
- { yyval.enode = new ('/', yypvt[-2].enode, yypvt[-0].enode); } break;
- case 33:
- # line 105 "gram.y"
- { yyval.enode = new ('?', yypvt[-4].enode, new(':', yypvt[-2].enode, yypvt[-0].enode)); } break;
- case 34:
- # line 106 "gram.y"
- { yyval.enode = new ('<', yypvt[-2].enode, yypvt[-0].enode); } break;
- case 35:
- # line 107 "gram.y"
- { yyval.enode = new ('=', yypvt[-2].enode, yypvt[-0].enode); } break;
- case 36:
- # line 108 "gram.y"
- { yyval.enode = new ('>', yypvt[-2].enode, yypvt[-0].enode); } break;
- case 37:
- # line 109 "gram.y"
- { yyval.enode = new ('&', yypvt[-2].enode, yypvt[-0].enode); } break;
- case 38:
- # line 110 "gram.y"
- { yyval.enode = new ('|', yypvt[-2].enode, yypvt[-0].enode); } break;
- case 39:
- # line 111 "gram.y"
- { yyval.enode = new ('~', 0L, new ('>', yypvt[-3].enode, yypvt[-0].enode)); } break;
- case 40:
- # line 112 "gram.y"
- { yyval.enode = new ('~', 0L, new ('=', yypvt[-3].enode, yypvt[-0].enode)); } break;
- case 41:
- # line 113 "gram.y"
- { yyval.enode = new ('~', 0L, new ('<', yypvt[-3].enode, yypvt[-0].enode)); } break;
- case 42:
- # line 116 "gram.y"
- { yyval.ent = lookat(yypvt[-0].ival , yypvt[-1].ival); } break;
- }
- goto yystack; /* stack new state and value */
-
- }
-