home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 342a.lha / Yacc_v1.0a / test / y.tab.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-02-05  |  11.8 KB  |  434 lines

  1. #ifndef lint
  2. char yysccsid[] = "@(#)yaccpar 1.00 (Berkeley) 1989/11/22";
  3. #endif
  4. short yylhs[] = {                                        -1,
  5.     0,    0,    0,    1,    1,    2,    2,    2,    2,    2,
  6.     2,    2,    2,    2,    2,    2,    3,    3,
  7. };
  8. short yylen[] = {                                         2,
  9.     0,    3,    3,    1,    3,    3,    3,    3,    3,    3,
  10.     3,    3,    3,    2,    1,    1,    1,    2,
  11. };
  12. short yydefred[] = {                                      1,
  13.     0,    0,   17,    0,    0,    0,    0,    0,    0,    3,
  14.     0,   15,   14,    0,    2,    0,    0,    0,    0,    0,
  15.     0,    0,   18,    0,    6,    0,    0,    0,    0,    9,
  16.    10,   11,
  17. };
  18. short yydgoto[] = {                                       1,
  19.     7,    8,    9,
  20. };
  21. short yysindex[] = {                                      0,
  22.   -40,   -7,    0,  -55,  -38,  -38,    1,  -29, -247,    0,
  23.   -38,    0,    0,   22,    0,  -38,  -38,  -38,  -38,  -38,
  24.   -38,  -38,    0,  -29,    0,   51,   60,  -20,  -20,    0,
  25.     0,    0,
  26. };
  27. short yyrindex[] = {                                      0,
  28.     0,    0,    0,    2,    0,    0,    0,    9,   -9,    0,
  29.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  30.     0,    0,    0,   10,    0,   -6,   14,    5,   13,    0,
  31.     0,    0,
  32. };
  33. short yygindex[] = {                                      0,
  34.     0,   65,    0,
  35. };
  36. #define    YYTABLESIZE        220
  37. short yytable[] = {                                       6,
  38.    16,    6,   10,   13,    5,   11,    5,   22,   17,   23,
  39.    15,   15,   20,   18,    7,   19,   22,   21,    4,    5,
  40.     0,   20,    8,   12,    0,    0,   21,   16,   16,    0,
  41.     0,   16,   16,   16,   13,   16,    0,   16,   15,   15,
  42.     0,    0,    7,   15,   15,    7,   15,    7,   15,    7,
  43.     8,   12,    0,    8,   12,    8,    0,    8,   22,   17,
  44.     0,    0,   25,   20,   18,    0,   19,    0,   21,   13,
  45.    14,    0,    0,    0,    0,   24,    0,    0,    0,    0,
  46.    26,   27,   28,   29,   30,   31,   32,   22,   17,    0,
  47.     0,    0,   20,   18,   16,   19,   22,   21,    0,    0,
  48.     0,   20,   18,    0,   19,    0,   21,    0,    0,    0,
  49.     0,    0,    0,    0,   16,    0,    0,   13,    0,    0,
  50.     0,    0,    0,    0,    0,   15,    0,    0,    7,    0,
  51.     0,    0,    0,    0,    0,    0,    8,   12,    0,    0,
  52.     0,    0,    0,    0,    0,   16,    0,    0,    0,    0,
  53.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  54.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  55.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  56.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  57.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  58.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  59.     0,    0,    0,    0,    0,    2,    3,    4,    3,   12,
  60. };
  61. short yycheck[] = {                                      40,
  62.    10,   40,   10,   10,   45,   61,   45,   37,   38,  257,
  63.    10,   10,   42,   43,   10,   45,   37,   47,   10,   10,
  64.    -1,   42,   10,   10,   -1,   -1,   47,   37,   38,   -1,
  65.    -1,   41,   42,   43,   41,   45,   -1,   47,   37,   38,
  66.    -1,   -1,   38,   42,   43,   41,   45,   43,   47,   45,
  67.    38,   38,   -1,   41,   41,   43,   -1,   45,   37,   38,
  68.    -1,   -1,   41,   42,   43,   -1,   45,   -1,   47,    5,
  69.     6,   -1,   -1,   -1,   -1,   11,   -1,   -1,   -1,   -1,
  70.    16,   17,   18,   19,   20,   21,   22,   37,   38,   -1,
  71.    -1,   -1,   42,   43,  124,   45,   37,   47,   -1,   -1,
  72.    -1,   42,   43,   -1,   45,   -1,   47,   -1,   -1,   -1,
  73.    -1,   -1,   -1,   -1,  124,   -1,   -1,  124,   -1,   -1,
  74.    -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,  124,   -1,
  75.    -1,   -1,   -1,   -1,   -1,   -1,  124,  124,   -1,   -1,
  76.    -1,   -1,   -1,   -1,   -1,  124,   -1,   -1,   -1,   -1,
  77.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  78.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  79.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  80.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  81.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  82.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  83.    -1,   -1,   -1,   -1,   -1,  256,  257,  258,  257,  258,
  84. };
  85. #define DIGIT 257
  86. #define LETTER 258
  87. #define UMINUS 259
  88. #define YYERRCODE 256
  89. #line 3 "dc.y"
  90. #include <stdio.h>
  91. #include <ctype.h>
  92.  
  93. int regs[26];
  94. int base;
  95.  
  96. #line 96 "y.tab.c"
  97. #define YYFINAL 1
  98. #ifndef YYDEBUG
  99. #define YYDEBUG 0
  100. #endif
  101. #define YYMAXTOKEN 259
  102. #if YYDEBUG
  103. char *yyname[] = {
  104. "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,
  105. 0,0,0,0,0,0,0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,
  106. 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,
  107. 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,
  108. 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,
  109. 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,
  110. 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,
  111. 0,0,0,0,0,0,0,0,0,"DIGIT","LETTER","UMINUS",
  112. };
  113. char *yyrule[] = {
  114. "$accept : list",
  115. "list :",
  116. "list : list stat '\\n'",
  117. "list : list error '\\n'",
  118. "stat : expr",
  119. "stat : LETTER '=' expr",
  120. "expr : '(' expr ')'",
  121. "expr : expr '+' expr",
  122. "expr : expr '-' expr",
  123. "expr : expr '*' expr",
  124. "expr : expr '/' expr",
  125. "expr : expr '%' expr",
  126. "expr : expr '&' expr",
  127. "expr : expr '|' expr",
  128. "expr : '-' expr",
  129. "expr : LETTER",
  130. "expr : number",
  131. "number : DIGIT",
  132. "number : number DIGIT",
  133. };
  134. #endif
  135. #ifndef YYSTYPE
  136. typedef int YYSTYPE;
  137. #endif
  138. #define yyclearin (yychar=(-1))
  139. #define yyerrok (yyerrflag=0)
  140. #ifndef YYSTACKSIZE
  141. #ifdef YYMAXDEPTH
  142. #define YYSTACKSIZE YYMAXDEPTH
  143. #else
  144. #define YYSTACKSIZE 300
  145. #endif
  146. #endif
  147. int yybackup;
  148. int yydebug;
  149. int yynerrs;
  150. int yyerrflag;
  151. int yychar;
  152. short *yyssp;
  153. YYSTYPE *yyvsp;
  154. YYSTYPE yyval;
  155. YYSTYPE yylval;
  156. #define yystacksize YYSTACKSIZE
  157. short yyss[YYSTACKSIZE];
  158. YYSTYPE yyvs[YYSTACKSIZE];
  159. #line 64 "dc.y"
  160.  
  161. yylex()
  162. {
  163.     int c;
  164.     while ((c=getchar()) == ' ');
  165.     if (islower(c)) {
  166.         yylval = c - 'a';
  167.         return (LETTER);
  168.     }
  169.     if (isdigit(c)) {
  170.         yylval = c - '0';
  171.         return(DIGIT);
  172.     }
  173.     return (c);
  174. }
  175.  
  176. #line 176 "y.tab.c"
  177. #define YYACCEPT goto yyaccept
  178. #define YYERROR goto yyerrlab
  179. int
  180. yyparse()
  181. {
  182.     register int yym, yyn, yystate;
  183. #if YYDEBUG
  184.     register char *yys;
  185.     extern char *getenv();
  186.  
  187.     if (yys = getenv("YYDEBUG"))
  188.     {
  189.         yyn = *yys;
  190.         if (yyn == '0')
  191.             yydebug = 0;
  192.         else if (yyn >= '1' && yyn <= '9')
  193.             yydebug = yyn - '0';
  194.     }
  195. #endif
  196.  
  197.     yybackup = 0;
  198.     yynerrs = 0;
  199.     yyerrflag = 0;
  200.     yychar = (-1);
  201.  
  202.     yyssp = yyss;
  203.     yyvsp = yyvs;
  204.     *yyssp = yystate = 0;
  205.  
  206. yyloop:
  207.     if (yyn = yydefred[yystate]) goto yyreduce;
  208.     if (yychar < 0)
  209.     {
  210.         if ((yychar = yylex()) < 0) yychar = 0;
  211. #if YYDEBUG
  212.         if (yydebug)
  213.         {
  214.             yys = 0;
  215.             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  216.             if (!yys) yys = "illegal-symbol";
  217.             printf("yydebug: state %d, reading %d (%s)\n", yystate,
  218.                     yychar, yys);
  219.         }
  220. #endif
  221.     }
  222.     if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
  223.             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
  224.     {
  225. #if YYDEBUG
  226.         if (yydebug)
  227.             printf("yydebug: state %d, shifting to state %d\n",
  228.                     yystate, yytable[yyn]);
  229. #endif
  230.         if (yyssp >= yyss + yystacksize - 1)
  231.         {
  232.             goto yyoverflow;
  233.         }
  234.         *++yyssp = yystate = yytable[yyn];
  235.         *++yyvsp = yylval;
  236.         yychar = (-1);
  237.         if (yyerrflag > 0)  --yyerrflag;
  238.         goto yyloop;
  239.     }
  240.     if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
  241.             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
  242.     {
  243.         yyn = yytable[yyn];
  244.         goto yyreduce;
  245.     }
  246.     if (yyerrflag) goto yyinrecovery;
  247. yynewerror:
  248.     yyerror("syntax error");
  249. yyerrlab:
  250.     ++yynerrs;
  251. yyinrecovery:
  252.     if (yyerrflag < 3)
  253.     {
  254.         yyerrflag = 3;
  255.         for (;;)
  256.         {
  257.             if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
  258.                     yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
  259.             {
  260. #if YYDEBUG
  261.                 if (yydebug)
  262.                     printf("yydebug: state %d, error recovery shifting\
  263.  to state %d\n", *yyssp, yytable[yyn]);
  264. #endif
  265.                 if (yyssp >= yyss + yystacksize - 1)
  266.                 {
  267.                     goto yyoverflow;
  268.                 }
  269.                 *++yyssp = yystate = yytable[yyn];
  270.                 *++yyvsp = yylval;
  271.                 goto yyloop;
  272.             }
  273.             else
  274.             {
  275. #if YYDEBUG
  276.                 if (yydebug)
  277.                     printf("yydebug: error recovery discarding state %d\n",
  278.                             *yyssp);
  279. #endif
  280.                 if (yyssp <= yyss) goto yyabort;
  281.                 --yyssp;
  282.                 --yyvsp;
  283.             }
  284.         }
  285.     }
  286.     else
  287.     {
  288.         if (yychar == 0) goto yyabort;
  289. #if YYDEBUG
  290.         if (yydebug)
  291.         {
  292.             yys = 0;
  293.             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  294.             if (!yys) yys = "illegal-symbol";
  295.             printf("yydebug: state %d, error recovery discards token %d (%s)\n",
  296.                     yystate, yychar, yys);
  297.         }
  298. #endif
  299.         yychar = (-1);
  300.         goto yyloop;
  301.     }
  302. yyreduce:
  303. #if YYDEBUG
  304.     if (yydebug)
  305.         printf("yydebug: state %d, reducing by rule %d (%s)\n",
  306.                 yystate, yyn, yyrule[yyn]);
  307. #endif
  308.     yym = yylen[yyn];
  309.     yyval = yyvsp[1-yym];
  310.     switch (yyn)
  311.     {
  312. case 3:
  313. #line 25 "dc.y"
  314. { yyerrok; }
  315. break;
  316. case 4:
  317. #line 29 "dc.y"
  318. { printf("%d\n",yyvsp[0]); }
  319. break;
  320. case 5:
  321. #line 31 "dc.y"
  322. { regs[yyvsp[-2]] = yyvsp[0]; }
  323. break;
  324. case 6:
  325. #line 35 "dc.y"
  326. { yyval  = yyvsp[-1]; }
  327. break;
  328. case 7:
  329. #line 37 "dc.y"
  330. { yyval  = yyvsp[-2] + yyvsp[0]; }
  331. break;
  332. case 8:
  333. #line 39 "dc.y"
  334. { yyval  = yyvsp[-2] - yyvsp[0]; }
  335. break;
  336. case 9:
  337. #line 41 "dc.y"
  338. { yyval  = yyvsp[-2] * yyvsp[0]; }
  339. break;
  340. case 10:
  341. #line 43 "dc.y"
  342. { yyval  = yyvsp[-2] / yyvsp[0]; }
  343. break;
  344. case 11:
  345. #line 45 "dc.y"
  346. { yyval  = yyvsp[-2] % yyvsp[0]; }
  347. break;
  348. case 12:
  349. #line 47 "dc.y"
  350. { yyval  = yyvsp[-2] & yyvsp[0]; }
  351. break;
  352. case 13:
  353. #line 49 "dc.y"
  354. { yyval  = yyvsp[-2] | yyvsp[0]; }
  355. break;
  356. case 14:
  357. #line 51 "dc.y"
  358. { yyval  = - yyvsp[0]; }
  359. break;
  360. case 15:
  361. #line 53 "dc.y"
  362. { yyval  = regs[yyvsp[0]]; }
  363. break;
  364. case 17:
  365. #line 58 "dc.y"
  366. {  yyval  = yyvsp[0]; base = (yyvsp[0]==0) ? 8 : 10;  }
  367. break;
  368. case 18:
  369. #line 60 "dc.y"
  370. {   yyval  = base * yyvsp[-1] + yyvsp[0]; }
  371. break;
  372. #line 372 "y.tab.c"
  373.     }
  374.     yyssp -= yym;
  375.     yystate = *yyssp;
  376.     yyvsp -= yym;
  377.     if (yybackup)
  378.     {
  379.         yybackup = 0;
  380.         goto yyloop;
  381.     }
  382.     yym = yylhs[yyn];
  383.     if (yystate == 0 && yym == 0)
  384.     {
  385. #ifdef YYDEBUG
  386.         if (yydebug)
  387.             printf("yydebug: after reduction, shifting from state 0 to\
  388.  state %d\n", YYFINAL);
  389. #endif
  390.         yystate = YYFINAL;
  391.         *++yyssp = YYFINAL;
  392.         *++yyvsp = yyval;
  393.         if (yychar < 0)
  394.         {
  395.             if ((yychar = yylex()) < 0) yychar = 0;
  396. #if YYDEBUG
  397.             if (yydebug)
  398.             {
  399.                 yys = 0;
  400.                 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
  401.                 if (!yys) yys = "illegal-symbol";
  402.                 printf("yydebug: state %d, reading %d (%s)\n",
  403.                         YYFINAL, yychar, yys);
  404.             }
  405. #endif
  406.         }
  407.         if (yychar == 0) goto yyaccept;
  408.         goto yyloop;
  409.     }
  410.     if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
  411.             yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
  412.         yystate = yytable[yyn];
  413.     else
  414.         yystate = yydgoto[yym];
  415. #ifdef YYDEBUG
  416.     if (yydebug)
  417.         printf("yydebug: after reduction, shifting from state %d \
  418. to state %d\n", *yyssp, yystate);
  419. #endif
  420.     if (yyssp >= yyss + yystacksize - 1)
  421.     {
  422.         goto yyoverflow;
  423.     }
  424.     *++yyssp = yystate;
  425.     *++yyvsp = yyval;
  426.     goto yyloop;
  427. yyoverflow:
  428.     yyerror("yacc stack overflow");
  429. yyabort:
  430.     return (1);
  431. yyaccept:
  432.     return (0);
  433. }
  434.