home *** CD-ROM | disk | FTP | other *** search
/ rtsi.com / 2014.01.www.rtsi.com.tar / www.rtsi.com / OS9 / OSK / EFFO / forum7.lzh / C / VC / gram.c < prev    next >
Text File  |  1988-08-29  |  14KB  |  530 lines

  1.  
  2. # line 13 "gram.y"
  3. #include "sc.h"
  4.  
  5. # line 16 "gram.y"
  6. typedef union  {
  7.     long ival;
  8.     double fval;
  9.     struct ent *ent;
  10.     struct enode *enode;
  11.     char *sval;
  12.     struct lnode *lnode;
  13. } YYSTYPE;
  14. # define STRING 257
  15. # define NUMBER 258
  16. # define FNUMBER 259
  17. # define WORD 260
  18. # define S_FORMAT 261
  19. # define S_LABEL 262
  20. # define S_LEFTSTRING 263
  21. # define S_RIGHTSTRING 264
  22. # define S_GET 265
  23. # define S_PUT 266
  24. # define S_MERGE 267
  25. # define S_LET 268
  26. # define S_WRITE 269
  27. # define S_TBL 270
  28. # define S_PROGLET 271
  29. # define K_EXEC 272
  30. # define K_FIXED 273
  31. # define K_ABS 274
  32. # define K_ACOS 275
  33. # define K_ASIN 276
  34. # define K_ATAN 277
  35. # define K_CEIL 278
  36. # define K_COS 279
  37. # define K_EXP 280
  38. # define K_FLOOR 281
  39. # define K_HYPOT 282
  40. # define K_LN 283
  41. # define K_LOG 284
  42. # define K_SIN 285
  43. # define K_SQRT 286
  44. # define K_TAN 287
  45. # define K_R 288
  46. # define K_C 289
  47. #define yyclearin yychar = -1
  48. #define yyerrok yyerrflag = 0
  49. extern int yychar;
  50. extern short yyerrflag;
  51. #ifndef YYMAXDEPTH
  52. #define YYMAXDEPTH 150
  53. #endif
  54. YYSTYPE yylval, yyval;
  55. # define YYERRCODE 256
  56. short yyexca[] ={
  57. -1, 1,
  58.     0, -1,
  59.     -2, 0,
  60. -1, 94,
  61.     60, 0,
  62.     61, 0,
  63.     62, 0,
  64.     -2, 35,
  65. -1, 96,
  66.     60, 0,
  67.     61, 0,
  68.     62, 0,
  69.     -2, 36,
  70. -1, 97,
  71.     60, 0,
  72.     61, 0,
  73.     62, 0,
  74.     -2, 37,
  75. -1, 107,
  76.     60, 0,
  77.     61, 0,
  78.     62, 0,
  79.     -2, 40,
  80. -1, 108,
  81.     60, 0,
  82.     61, 0,
  83.     62, 0,
  84.     -2, 42,
  85. -1, 109,
  86.     60, 0,
  87.     61, 0,
  88.     62, 0,
  89.     -2, 41,
  90.     };
  91. #define YYNPROD 63
  92. #define YYLAST 353
  93. short yyact[]={
  94.  
  95.   49,  16,  17,  17,  16,  68,  35,  43,  12,  64,
  96.   44,  31,  45,   6,   3,   4,   5,   7,   9,   8,
  97.    2,  10,  11,  30,  21, 103,  67,  66,  65,  26,
  98.   25,  24,  49,  23,  22, 115, 101,  34,  79,  43,
  99.   33,  64,  44,  77,  45,  32, 110,  71,  69,  27,
  100.   70, 112,  72,  83, 120, 111,  81, 119,  80,  79,
  101.   98,   1,  14,  79,  49,  74,  75,  76,  73,  38,
  102.   79,  43,  71,  64,  44,  77,  45,  72,  29,  71,
  103.   69,  42,  70,  40,  72, 114,  13,  18,  19,  20,
  104.    0,   0,  95,  48,   0, 106,  49,  74,  75,  76,
  105.   73,   0,  15,  43,  79,  64,  44, 116,  45,  77,
  106.   79,   0, 105,  71,  69,  77,  70,  28,  72,  71,
  107.   69,   0,  70,   0,  72,  48,   0,   0,   0,  78,
  108.    0,  74,  75,  76,  73,  36,  79,  74,  75,  76,
  109.   73,  77,   0,   0,  79,  71,  69,   0,  70,  77,
  110.   72,  84,   0,  71,  69, 121,  70,  48,  72,   0,
  111.    0,  78,   0,  74,  75,  76,  37, 104,   0,   0,
  112.    0,  74,  75,  76,   0,   0,   0,  89,  90,  91,
  113.   92,  93,  94,  96,  97,  99, 100,   0, 102,  48,
  114.   79,   0,   0,   0,   0,  78, 118,   0,   0,  71,
  115.   69,  78,  70, 107,  72,   0, 108,   0,  82, 109,
  116.    0,  85,  86,   0, 113,  87,  88,  74,  75,  76,
  117.   79,   0,   0,   0, 117,  46,  47,  78,   0,  71,
  118.   69,   0,  70,   0,  72,   0,   0,   0,   0,  39,
  119.   41,  50,  51,  52,  53,  54,  55,  56,  57,  58,
  120.   59,  60,  61,  62,  63,  16,  17,  46,  47,   0,
  121.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  122.    0,  39,  41,  50,  51,  52,  53,  54,  55,  56,
  123.   57,  58,  59,  60,  61,  62,  63,  16,  17,  46,
  124.   47,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  125.    0,   0,   0,  39,  41,  50,  51,  52,  53,  54,
  126.   55,  56,  57,  58,  59,  60,  61,  62,  63,  16,
  127.   17,  46,  47,   0,   0,   0,   0,   0,   0,   0,
  128.    0,   0,   0,   0,   0,  39,  41,  50,  51,  52,
  129.   53,  54,  55,  56,  57,  58,  59,  60,  61,  62,
  130.   63,  16,  17 };
  131. short yypact[]={
  132.  
  133. -248,-1000,-287,-287,-287,-287,-234,-223,-224,-226,
  134. -227,-228,-1000, -12,-286,-284,-235,-247, -16, -21,
  135.  -24,-252,-1000,-1000,-1000,-1000,-1000,  63,-1000,-1000,
  136. -1000,-1000,-229,-230,-231,-253,  77,-1000,  18,  16,
  137. -1000,  63,   6,  63,  63,  63,-1000,-1000,  63,  63,
  138. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  139. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,  63,
  140.   63,  63,  63,  63,  31,  63,  -1,  63,  63, -25,
  141.   63,-232,-1000,-287,  71,-1000,-1000,-1000,-1000,  30,
  142.   30,  26,  26,  37, 187,  63, 187, 187,  63, 157,
  143.  111,  63,   5,  11,  -7,-1000,  63, 187, 187, 187,
  144. -1000, -33,-287, 103,  13,-1000,  77,-1000,-1000, -33,
  145. -1000,-1000 };
  146. short yypgo[]={
  147.  
  148.    0,  85, 107, 166,  35,  83,  62, 102,  81,  69,
  149.   61 };
  150. short yyr1[]={
  151.  
  152.    0,  10,  10,  10,  10,  10,  10,  10,  10,  10,
  153.   10,  10,  10,   1,   1,   4,   4,   3,   3,   3,
  154.    3,   3,   3,   3,   3,   3,   3,   3,   3,   2,
  155.    2,   2,   2,   2,   2,   2,   2,   2,   2,   2,
  156.    2,   2,   2,   6,   7,   5,   5,   8,   8,   9,
  157.    9,   9,   9,   9,   9,   9,   9,   9,   9,   9,
  158.    9,   9,   9 };
  159. short yyr2[]={
  160.  
  161.    0,   4,   4,   4,   4,   4,   2,   2,   2,   2,
  162.    2,   0,   1,   3,   1,   1,   1,   4,   6,   1,
  163.    2,   5,   3,   2,   2,   1,   1,   2,   2,   3,
  164.    3,   3,   3,   1,   5,   3,   3,   3,   3,   3,
  165.    4,   4,   4,   2,   2,   2,   2,   1,   1,   1,
  166.    1,   1,   1,   1,   1,   1,   1,   1,   1,   1,
  167.    1,   1,   1 };
  168. short yychk[]={
  169.  
  170. -1000, -10, 268, 262, 263, 264, 261, 265, 267, 266,
  171.  269, 270, 256,  -5,  -6,  -7, 288, 289,  -5,  -5,
  172.   -5, 258, 257, 257, 257, 257, 257,  61,  -7,  -6,
  173.  258, 258,  61,  61,  61, 258,  -2,  -3,  -9, 272,
  174.   -5, 273,  -8,  40,  43,  45, 258, 259, 126,  33,
  175.  274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
  176.  284, 285, 286, 287,  42, 257, 257, 257, 258,  43,
  177.   45,  42,  47,  63,  60,  61,  62,  38, 124,  33,
  178.   40,  40,  -3,  47,  -2,  -3,  -3,  -3,  -3,  -2,
  179.   -2,  -2,  -2,  -2,  -2,  61,  -2,  -2,  61,  -2,
  180.   -2,  61,  -2, 257,  -5,  41,  58,  -2,  -2,  -2,
  181.   41,  44,  58,  -2,  -1,  -4,  -2, 257,  -5,  44,
  182.   41,  -4 };
  183. short yydef[]={
  184.  
  185.   11,  -2,   0,   0,   0,   0,   0,   0,   0,   0,
  186.    0,   0,  12,   0,   0,   0,   0,   0,   0,   0,
  187.    0,   0,   6,   7,   8,   9,  10,   0,  45,  46,
  188.   43,  44,   0,   0,   0,   0,   1,  33,   0,   0,
  189.   19,   0,   0,   0,  47,   0,  25,  26,   0,   0,
  190.   49,  50,  51,  52,  53,  54,  55,  56,  57,  58,
  191.   59,  60,  61,  62,  48,   2,   3,   4,   5,   0,
  192.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  193.    0,   0,  20,   0,   0,  23,  24,  27,  28,  29,
  194.   30,  31,  32,   0,  -2,   0,  -2,  -2,   0,  38,
  195.   39,   0,   0,   0,   0,  22,   0,  -2,  -2,  -2,
  196.   17,   0,   0,  34,   0,  14,  15,  16,  21,   0,
  197.   18,  13 };
  198. #ifndef lint
  199. static char yaccpar_sccsid[] = "@(#)yaccpar    4.1    (Berkeley)    2/11/83";
  200. #endif not lint
  201.  
  202. #define YYFLAG -1000
  203. #define YYERROR goto yyerrlab
  204. #define YYACCEPT return(0)
  205. #define YYABORT return(1)
  206.  
  207. /*    parser for yacc output    */
  208.  
  209. #ifdef YYDEBUG
  210. int yydebug = 0; /* 1 for debugging */
  211. #endif
  212. YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
  213. int yychar = -1; /* current input token number */
  214. int yynerrs = 0;  /* number of errors */
  215. short yyerrflag = 0;  /* error recovery flag */
  216.  
  217. yyparse() {
  218.  
  219.     short yys[YYMAXDEPTH];
  220.     short yyj, yym;
  221.     register YYSTYPE *yypvt;
  222.     register short yystate, *yyps, yyn;
  223.     register YYSTYPE *yypv;
  224.     register short *yyxi;
  225.  
  226.     yystate = 0;
  227.     yychar = -1;
  228.     yynerrs = 0;
  229.     yyerrflag = 0;
  230.     yyps= &yys[-1];
  231.     yypv= &yyv[-1];
  232.  
  233.  yystack:    /* put a state and value onto the stack */
  234.  
  235. #ifdef YYDEBUG
  236.     if( yydebug  ) printf( "state %d, char 0%o\n", yystate, yychar );
  237. #endif
  238.         if( ++yyps> &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); }
  239.         *yyps = yystate;
  240.         ++yypv;
  241.         *yypv = yyval;
  242.  
  243.  yynewstate:
  244.  
  245.     yyn = yypact[yystate];
  246.  
  247.     if( yyn<= YYFLAG ) goto yydefault; /* simple state */
  248.  
  249.     if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
  250.     if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
  251.  
  252.     if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
  253.         yychar = -1;
  254.         yyval = yylval;
  255.         yystate = yyn;
  256.         if( yyerrflag > 0 ) --yyerrflag;
  257.         goto yystack;
  258.         }
  259.  
  260.  yydefault:
  261.     /* default state action */
  262.  
  263.     if( (yyn=yydef[yystate]) == -2 ) {
  264.         if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
  265.         /* look through exception table */
  266.  
  267.         for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
  268.  
  269.         while( *(yyxi+=2) >= 0 ){
  270.             if( *yyxi == yychar ) break;
  271.             }
  272.         if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
  273.         }
  274.  
  275.     if( yyn == 0 ){ /* error */
  276.         /* error ... attempt to resume parsing */
  277.  
  278.         switch( yyerrflag ){
  279.  
  280.         case 0:   /* brand new error */
  281.  
  282.             yyerror( "syntax error" );
  283.         yyerrlab:
  284.             ++yynerrs;
  285.  
  286.         case 1:
  287.         case 2: /* incompletely recovered error ... try again */
  288.  
  289.             yyerrflag = 3;
  290.  
  291.             /* find a state where "error" is a legal shift action */
  292.  
  293.             while ( yyps >= yys ) {
  294.                yyn = yypact[*yyps] + YYERRCODE;
  295.                if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
  296.                   yystate = yyact[yyn];  /* simulate a shift of "error" */
  297.                   goto yystack;
  298.                   }
  299.                yyn = yypact[*yyps];
  300.  
  301.                /* the current yyps has no shift onn "error", pop stack */
  302.  
  303. #ifdef YYDEBUG
  304.                if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
  305. #endif
  306.                --yyps;
  307.                --yypv;
  308.                }
  309.  
  310.             /* there is no state on the stack with an error shift ... abort */
  311.  
  312.     yyabort:
  313.             return(1);
  314.  
  315.  
  316.         case 3:  /* no shift yet; clobber input char */
  317.  
  318. #ifdef YYDEBUG
  319.             if( yydebug ) printf( "error recovery discards char %d\n", yychar );
  320. #endif
  321.  
  322.             if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
  323.             yychar = -1;
  324.             goto yynewstate;   /* try again in the same state */
  325.  
  326.             }
  327.  
  328.         }
  329.  
  330.     /* reduction by production yyn */
  331.  
  332. #ifdef YYDEBUG
  333.         if( yydebug ) printf("reduce %d\n",yyn);
  334. #endif
  335.         yyps -= yyr2[yyn];
  336.         yypvt = yypv;
  337.         yypv -= yyr2[yyn];
  338.         yyval = yypv[1];
  339.         yym=yyn;
  340.             /* consult goto table to find next state */
  341.         yyn = yyr1[yyn];
  342.         yyj = yypgo[yyn] + *yyps + 1;
  343.         if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
  344.         switch(yym){
  345.             
  346. case 1:
  347. # line 73 "gram.y"
  348. { let (yypvt[-2].ent, yypvt[-0].enode); } break;
  349. case 2:
  350. # line 75 "gram.y"
  351. { label (yypvt[-2].ent, yypvt[-0].sval, 0); } break;
  352. case 3:
  353. # line 77 "gram.y"
  354. { label (yypvt[-2].ent, yypvt[-0].sval, -1); } break;
  355. case 4:
  356. # line 79 "gram.y"
  357. { label (yypvt[-2].ent, yypvt[-0].sval, 1); } break;
  358. case 5:
  359. # line 81 "gram.y"
  360. { fwidth[yypvt[-2].ival] = yypvt[-1].ival;
  361.                   FullUpdate++;
  362.                   modflg++;
  363.                   precision[yypvt[-2].ival] = yypvt[-0].ival; } break;
  364. case 6:
  365. # line 85 "gram.y"
  366. { readfile (yypvt[-0].sval,1); } break;
  367. case 7:
  368. # line 86 "gram.y"
  369. { readfile (yypvt[-0].sval,0); } break;
  370. case 8:
  371. # line 87 "gram.y"
  372. { writefile (yypvt[-0].sval); } break;
  373. case 9:
  374. # line 88 "gram.y"
  375. { printfile (yypvt[-0].sval); } break;
  376. case 10:
  377. # line 89 "gram.y"
  378. { tblprintfile (yypvt[-0].sval); } break;
  379. case 13:
  380. # line 93 "gram.y"
  381. { yyval.lnode = addlist( yypvt[-2].lnode , yypvt[-0].enode ) ; } break;
  382. case 14:
  383. # line 94 "gram.y"
  384. { yyval.lnode = newlist( yypvt[-0].enode ); } break;
  385. case 15:
  386. # line 97 "gram.y"
  387. { yyval.enode = yypvt[-0].enode; } break;
  388. case 16:
  389. # line 98 "gram.y"
  390. { yyval.enode = new ('s' , yypvt[-0].sval , 0 ); } break;
  391. case 17:
  392. # line 102 "gram.y"
  393. { yyval.enode = new (yypvt[-3].ival, yypvt[-1].enode, 0); } break;
  394. case 18:
  395. # line 103 "gram.y"
  396. { yyval.enode = new('p', yypvt[-3].sval, yypvt[-1].lnode); } break;
  397. case 19:
  398. # line 104 "gram.y"
  399. { yyval.enode = new ('v', yypvt[-0].ent); } break;
  400. case 20:
  401. # line 105 "gram.y"
  402. { yyval.enode = new ('f', 0, yypvt[-0].enode); } break;
  403. case 21:
  404. # line 107 "gram.y"
  405. { yyval.enode = new (O_REDUCE(yypvt[-4].ival), yypvt[-2].ent, yypvt[-0].ent); } break;
  406. case 22:
  407. # line 108 "gram.y"
  408. { yyval.enode = yypvt[-1].enode; } break;
  409. case 23:
  410. # line 109 "gram.y"
  411. { yyval.enode = yypvt[-0].enode; } break;
  412. case 24:
  413. # line 110 "gram.y"
  414. { yyval.enode = new ('m', 0, yypvt[-0].enode); } break;
  415. case 25:
  416. # line 111 "gram.y"
  417. { double h= (double)yypvt[-0].ival; yyval.enode = new ('k', &h, 0); } break;
  418. case 26:
  419. # line 112 "gram.y"
  420. { yyval.enode = new ('k', &yypvt[-0].fval, 0); } break;
  421. case 27:
  422. # line 113 "gram.y"
  423. { yyval.enode = new ('~', 0, yypvt[-0].enode); } break;
  424. case 28:
  425. # line 114 "gram.y"
  426. { yyval.enode = new ('~', 0, yypvt[-0].enode); } break;
  427. case 29:
  428. # line 117 "gram.y"
  429. { yyval.enode = new ('+', yypvt[-2].enode, yypvt[-0].enode); } break;
  430. case 30:
  431. # line 118 "gram.y"
  432. { yyval.enode = new ('-', yypvt[-2].enode, yypvt[-0].enode); } break;
  433. case 31:
  434. # line 119 "gram.y"
  435. { yyval.enode = new ('*', yypvt[-2].enode, yypvt[-0].enode); } break;
  436. case 32:
  437. # line 120 "gram.y"
  438. { yyval.enode = new ('/', yypvt[-2].enode, yypvt[-0].enode); } break;
  439. case 34:
  440. # line 122 "gram.y"
  441. { yyval.enode = new ('?', yypvt[-4].enode, new(':', yypvt[-2].enode, yypvt[-0].enode)); } break;
  442. case 35:
  443. # line 123 "gram.y"
  444. { yyval.enode = new ('<', yypvt[-2].enode, yypvt[-0].enode); } break;
  445. case 36:
  446. # line 124 "gram.y"
  447. { yyval.enode = new ('=', yypvt[-2].enode, yypvt[-0].enode); } break;
  448. case 37:
  449. # line 125 "gram.y"
  450. { yyval.enode = new ('>', yypvt[-2].enode, yypvt[-0].enode); } break;
  451. case 38:
  452. # line 126 "gram.y"
  453. { yyval.enode = new ('&', yypvt[-2].enode, yypvt[-0].enode); } break;
  454. case 39:
  455. # line 127 "gram.y"
  456. { yyval.enode = new ('|', yypvt[-2].enode, yypvt[-0].enode); } break;
  457. case 40:
  458. # line 128 "gram.y"
  459. { yyval.enode = new ('~', 0, new ('>', yypvt[-3].enode, yypvt[-0].enode)); } break;
  460. case 41:
  461. # line 129 "gram.y"
  462. { yyval.enode = new ('~', 0, new ('=', yypvt[-3].enode, yypvt[-0].enode)); } break;
  463. case 42:
  464. # line 130 "gram.y"
  465. { yyval.enode = new ('~', 0, new ('<', yypvt[-3].enode, yypvt[-0].enode)); } break;
  466. case 43:
  467. # line 133 "gram.y"
  468. { yyval.ival = yypvt[-0].ival; } break;
  469. case 44:
  470. # line 134 "gram.y"
  471. { yyval.ival = yypvt[-0].ival; } break;
  472. case 45:
  473. # line 135 "gram.y"
  474. { yyval.ent = lookat(yypvt[-1].ival, yypvt[-0].ival); } break;
  475. case 46:
  476. # line 136 "gram.y"
  477. { yyval.ent = lookat(yypvt[-0].ival, yypvt[-1].ival); } break;
  478. case 47:
  479. # line 138 "gram.y"
  480. { yyval.ival = '+'; } break;
  481. case 48:
  482. # line 139 "gram.y"
  483. { yyval.ival = '*'; } break;
  484. case 49:
  485. # line 143 "gram.y"
  486. { yyval.ival = K_ABS; } break;
  487. case 50:
  488. # line 144 "gram.y"
  489. { yyval.ival = K_ACOS; } break;
  490. case 51:
  491. # line 145 "gram.y"
  492. { yyval.ival = K_ASIN; } break;
  493. case 52:
  494. # line 146 "gram.y"
  495. { yyval.ival = K_ATAN; } break;
  496. case 53:
  497. # line 147 "gram.y"
  498. { yyval.ival = K_CEIL; } break;
  499. case 54:
  500. # line 148 "gram.y"
  501. { yyval.ival = K_COS; } break;
  502. case 55:
  503. # line 149 "gram.y"
  504. { yyval.ival = K_EXP; } break;
  505. case 56:
  506. # line 150 "gram.y"
  507. { yyval.ival = K_FLOOR; } break;
  508. case 57:
  509. # line 151 "gram.y"
  510. { yyval.ival = K_HYPOT; } break;
  511. case 58:
  512. # line 152 "gram.y"
  513. { yyval.ival = K_LN; } break;
  514. case 59:
  515. # line 153 "gram.y"
  516. { yyval.ival = K_LOG; } break;
  517. case 60:
  518. # line 154 "gram.y"
  519. { yyval.ival = K_SIN; } break;
  520. case 61:
  521. # line 155 "gram.y"
  522. { yyval.ival = K_SQRT; } break;
  523. case 62:
  524. # line 156 "gram.y"
  525. { yyval.ival = K_TAN; } break;
  526.         }
  527.         goto yystack;  /* stack new state and value */
  528.  
  529.     }
  530.