#include #ifndef lint #if 0 static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; #else __IDSTRING(yyrcsid, "$NetBSD: skeleton.c,v 1.14 1997/10/20 03:41:16 lukem Exp $"); #endif #endif #include #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 #define YYLEX yylex() #define YYEMPTY -1 #define yyclearin (yychar=(YYEMPTY)) #define yyerrok (yyerrflag=0) #define YYRECOVERING (yyerrflag!=0) #define YYPREFIX "yy" #line 2 "/Users/jj/Desktop/GMTEdit/grammar.y" #include #include int printingError = 0; #line 10 "/Users/jj/Desktop/GMTEdit/grammar.y" typedef union { int ival; double dval; } YYSTYPE; #line 31 "y.tab.c" #define NUMBER 257 #define SIN 258 #define COS 259 #define TAN 260 #define ASIN 261 #define ACOS 262 #define ATAN 263 #define SINH 264 #define COSH 265 #define TANH 266 #define ASINH 267 #define ACOSH 268 #define ATANH 269 #define SQRT 270 #define MOD 271 #define LN 272 #define LOG 273 #define PI 274 #define UMINUS 275 #define YYERRCODE 256 short yylhs[] = { -1, 0, 0, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, }; short yylen[] = { 2, 1, 2, 2, 4, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 2, 2, 2, 1, 1, 1, }; short yydefred[] = { 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 24, 25, 27, 0, 2, 0, 0, 0, 0, 0, 0, 3, 0, 5, 23, 0, 0, 0, 0, 22, 0, 4, }; short yydgoto[] = { 20, 21, 22, 23, }; short yysindex[] = { -38, 0, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, -38, 0, -38, -38, -38, -10, 0, 0, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, 0, 0, 0, 0, -33, 0, -38, -38, -38, -38, -38, -38, 0, -38, 0, 0, -31, -31, -93, -93, 0, -4, 0, }; short yyrindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 10, 50, 72, 79, 86, 93, 100, 108, 115, 122, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 158, 165, 138, 151, 0, 0, 0, }; short yygindex[] = { 0, 62, 0, -17, }; #define YYTABLESIZE 267 short yytable[] = { 48, 47, 19, 41, 0, 0, 58, 18, 50, 45, 43, 45, 44, 10, 46, 0, 46, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 43, 49, 44, 0, 46, 45, 43, 0, 44, 0, 46, 10, 10, 10, 10, 10, 0, 10, 11, 11, 11, 11, 11, 0, 11, 0, 0, 12, 47, 0, 47, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 0, 39, 40, 13, 0, 47, 0, 0, 0, 0, 14, 47, 12, 12, 12, 12, 12, 15, 12, 0, 0, 0, 0, 0, 16, 51, 52, 53, 54, 55, 56, 17, 57, 0, 13, 13, 13, 13, 13, 18, 13, 14, 14, 14, 14, 14, 19, 14, 15, 15, 15, 15, 15, 20, 15, 16, 16, 16, 16, 16, 21, 16, 17, 17, 17, 17, 17, 0, 17, 8, 18, 18, 18, 18, 18, 0, 18, 19, 19, 19, 19, 19, 9, 19, 20, 20, 20, 20, 20, 6, 20, 21, 21, 21, 21, 21, 7, 21, 0, 42, 8, 8, 8, 8, 8, 0, 8, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 0, 9, 6, 0, 6, 6, 6, 0, 0, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 15, 16, 17, 0, 42, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 42, }; short yycheck[] = { 10, 94, 40, 20, -1, -1, 10, 45, 41, 42, 43, 42, 45, 10, 47, -1, 47, -1, -1, -1, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 42, 43, 44, 45, -1, 47, 42, 43, -1, 45, -1, 47, 41, 42, 43, 44, 45, -1, 47, 41, 42, 43, 44, 45, -1, 47, -1, -1, 10, 94, -1, 94, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, -1, 18, 19, 10, -1, 94, -1, -1, -1, -1, 10, 94, 41, 42, 43, 44, 45, 10, 47, -1, -1, -1, -1, -1, 10, 42, 43, 44, 45, 46, 47, 10, 49, -1, 41, 42, 43, 44, 45, 10, 47, 41, 42, 43, 44, 45, 10, 47, 41, 42, 43, 44, 45, 10, 47, 41, 42, 43, 44, 45, 10, 47, 41, 42, 43, 44, 45, -1, 47, 10, 41, 42, 43, 44, 45, -1, 47, 41, 42, 43, 44, 45, 10, 47, 41, 42, 43, 44, 45, 10, 47, 41, 42, 43, 44, 45, 10, 47, -1, 271, 41, 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, -1, -1, 41, 42, 43, 44, 45, -1, 47, 41, -1, 43, 44, 45, -1, -1, 41, -1, 43, 44, 45, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, -1, 272, 273, 274, -1, 271, -1, 271, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 271, -1, -1, -1, -1, -1, 271, }; #define YYFINAL 20 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 275 #if YYDEBUG char *yyname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,"'\\n'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'^'", 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,"NUMBER","SIN","COS","TAN","ASIN","ACOS","ATAN","SINH","COSH","TANH", "ASINH","ACOSH","ATANH","SQRT","MOD","LN","LOG","PI","UMINUS", }; char *yyrule[] = { "$accept : list", "list : stat", "list : list stat", "stat : expr '\\n'", "stat : expr ',' expr '\\n'", "expr : '(' expr ')'", "expr : expr '+' expr", "expr : expr '-' expr", "expr : expr '*' expr", "expr : expr '/' expr", "expr : SIN expr", "expr : COS expr", "expr : TAN expr", "expr : ASIN expr", "expr : ACOS expr", "expr : ATAN expr", "expr : SINH expr", "expr : COSH expr", "expr : TANH expr", "expr : ASINH expr", "expr : ACOSH expr", "expr : ATANH expr", "expr : expr '^' expr", "expr : expr MOD expr", "expr : LN expr", "expr : LOG expr", "expr : SQRT expr", "expr : '-' expr", "expr : number", "number : NUMBER", "number : PI", }; #endif #ifdef YYSTACKSIZE #undef YYMAXDEPTH #define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 10000 #define YYMAXDEPTH 10000 #endif #endif #define YYINITSTACKSIZE 200 int yydebug; int yynerrs; int yyerrflag; int yychar; short *yyssp; YYSTYPE *yyvsp; YYSTYPE yyval; YYSTYPE yylval; short *yyss; short *yysslim; YYSTYPE *yyvs; int yystacksize; #line 99 "/Users/jj/Desktop/GMTEdit/grammar.y" /* beginning of functions section */ void yyerror(char *s) { if (printingError == 0) { printf("Syntax Error\n"); fflush(stdout); printingError = 1; } } int main(int argc,char **argv) { while (!feof(stdin)) { yyparse(); } exit(0); } #line 245 "y.tab.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ int yyparse __P((void)); static int yygrowstack __P((void)); static int yygrowstack() { int newsize, i; short *newss; YYSTYPE *newvs; if ((newsize = yystacksize) == 0) newsize = YYINITSTACKSIZE; else if (newsize >= YYMAXDEPTH) return -1; else if ((newsize *= 2) > YYMAXDEPTH) newsize = YYMAXDEPTH; i = yyssp - yyss; if ((newss = (short *)realloc(yyss, newsize * sizeof *newss)) == NULL) return -1; yyss = newss; yyssp = newss + i; if ((newvs = (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs)) == NULL) return -1; yyvs = newvs; yyvsp = newvs + i; yystacksize = newsize; yysslim = yyss + newsize - 1; return 0; } #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab int yyparse() { int yym, yyn, yystate; #if YYDEBUG char *yys; if ((yys = getenv("YYDEBUG")) != NULL) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } #endif yynerrs = 0; yyerrflag = 0; yychar = (-1); if (yyss == NULL && yygrowstack()) goto yyoverflow; yyssp = yyss; yyvsp = yyvs; *yyssp = yystate = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, yystate, yytable[yyn]); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; yychar = (-1); if (yyerrflag > 0) --yyerrflag; goto yyloop; } if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag) goto yyinrecovery; goto yynewerror; yynewerror: yyerror("syntax error"); goto yyerrlab; yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; goto yyloop; } else { #if YYDEBUG if (yydebug) printf("%sdebug: error recovery discarding state %d\n", YYPREFIX, *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; --yyvsp; } } } else { if (yychar == 0) goto yyabort; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, error recovery discards token %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif yychar = (-1); goto yyloop; } yyreduce: #if YYDEBUG if (yydebug) printf("%sdebug: state %d, reducing by rule %d (%s)\n", YYPREFIX, yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; yyval = yyvsp[1-yym]; switch (yyn) { case 3: #line 36 "/Users/jj/Desktop/GMTEdit/grammar.y" { printf("%10g\n",yyvsp[-1].dval); printingError = 0; fflush(stdout); } break; case 4: #line 42 "/Users/jj/Desktop/GMTEdit/grammar.y" { printf("%g,%g\n", yyvsp[-3].dval, yyvsp[-1].dval); printingError = 0; fflush(stdout); } break; case 5: #line 50 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = yyvsp[-1].dval; } break; case 6: #line 53 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = yyvsp[-2].dval + yyvsp[0].dval;} break; case 7: #line 54 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = yyvsp[-2].dval - yyvsp[0].dval;} break; case 8: #line 55 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = yyvsp[-2].dval * yyvsp[0].dval;} break; case 9: #line 56 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = yyvsp[-2].dval / yyvsp[0].dval;} break; case 10: #line 57 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = sin(yyvsp[0].dval);} break; case 11: #line 59 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = cos(yyvsp[0].dval);} break; case 12: #line 61 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = tan(yyvsp[0].dval);} break; case 13: #line 63 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = asin(yyvsp[0].dval);} break; case 14: #line 65 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = acos(yyvsp[0].dval);} break; case 15: #line 66 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = atan(yyvsp[0].dval);} break; case 16: #line 68 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = sinh(yyvsp[0].dval);} break; case 17: #line 70 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = cosh(yyvsp[0].dval);} break; case 18: #line 72 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = tanh(yyvsp[0].dval);} break; case 19: #line 74 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = asinh(yyvsp[0].dval);} break; case 20: #line 76 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = acosh(yyvsp[0].dval);} break; case 21: #line 78 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = atanh(yyvsp[0].dval);} break; case 22: #line 80 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = pow(yyvsp[-2].dval,yyvsp[0].dval);} break; case 23: #line 81 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = fmod(yyvsp[-2].dval,yyvsp[0].dval);} break; case 24: #line 82 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = log(yyvsp[0].dval);} break; case 25: #line 84 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = log10(yyvsp[0].dval);} break; case 26: #line 86 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = sqrt(yyvsp[0].dval);} break; case 27: #line 89 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = -yyvsp[0].dval; } break; case 30: #line 96 "/Users/jj/Desktop/GMTEdit/grammar.y" { yyval.dval = M_PI; } break; #line 541 "y.tab.c" } yyssp -= yym; yystate = *yyssp; yyvsp -= yym; yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state 0 to\ state %d\n", YYPREFIX, YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; *++yyvsp = yyval; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == 0) goto yyaccept; goto yyloop; } if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state %d \ to state %d\n", YYPREFIX, *yyssp, yystate); #endif if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } *++yyssp = yystate; *++yyvsp = yyval; goto yyloop; yyoverflow: yyerror("yacc stack overflow"); yyabort: return (1); yyaccept: return (0); }