home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / f2c-93.04.28-src.tgz / tar.out / fsf / f2c / src / gram.c < prev    next >
C/C++ Source or Header  |  1996-09-28  |  57KB  |  1,830 lines

  1. # define SEOS 1
  2. # define SCOMMENT 2
  3. # define SLABEL 3
  4. # define SUNKNOWN 4
  5. # define SHOLLERITH 5
  6. # define SICON 6
  7. # define SRCON 7
  8. # define SDCON 8
  9. # define SBITCON 9
  10. # define SOCTCON 10
  11. # define SHEXCON 11
  12. # define STRUE 12
  13. # define SFALSE 13
  14. # define SNAME 14
  15. # define SNAMEEQ 15
  16. # define SFIELD 16
  17. # define SSCALE 17
  18. # define SINCLUDE 18
  19. # define SLET 19
  20. # define SASSIGN 20
  21. # define SAUTOMATIC 21
  22. # define SBACKSPACE 22
  23. # define SBLOCK 23
  24. # define SCALL 24
  25. # define SCHARACTER 25
  26. # define SCLOSE 26
  27. # define SCOMMON 27
  28. # define SCOMPLEX 28
  29. # define SCONTINUE 29
  30. # define SDATA 30
  31. # define SDCOMPLEX 31
  32. # define SDIMENSION 32
  33. # define SDO 33
  34. # define SDOUBLE 34
  35. # define SELSE 35
  36. # define SELSEIF 36
  37. # define SEND 37
  38. # define SENDFILE 38
  39. # define SENDIF 39
  40. # define SENTRY 40
  41. # define SEQUIV 41
  42. # define SEXTERNAL 42
  43. # define SFORMAT 43
  44. # define SFUNCTION 44
  45. # define SGOTO 45
  46. # define SASGOTO 46
  47. # define SCOMPGOTO 47
  48. # define SARITHIF 48
  49. # define SLOGIF 49
  50. # define SIMPLICIT 50
  51. # define SINQUIRE 51
  52. # define SINTEGER 52
  53. # define SINTRINSIC 53
  54. # define SLOGICAL 54
  55. # define SNAMELIST 55
  56. # define SOPEN 56
  57. # define SPARAM 57
  58. # define SPAUSE 58
  59. # define SPRINT 59
  60. # define SPROGRAM 60
  61. # define SPUNCH 61
  62. # define SREAD 62
  63. # define SREAL 63
  64. # define SRETURN 64
  65. # define SREWIND 65
  66. # define SSAVE 66
  67. # define SSTATIC 67
  68. # define SSTOP 68
  69. # define SSUBROUTINE 69
  70. # define STHEN 70
  71. # define STO 71
  72. # define SUNDEFINED 72
  73. # define SWRITE 73
  74. # define SLPAR 74
  75. # define SRPAR 75
  76. # define SEQUALS 76
  77. # define SCOLON 77
  78. # define SCOMMA 78
  79. # define SCURRENCY 79
  80. # define SPLUS 80
  81. # define SMINUS 81
  82. # define SSTAR 82
  83. # define SSLASH 83
  84. # define SPOWER 84
  85. # define SCONCAT 85
  86. # define SAND 86
  87. # define SOR 87
  88. # define SNEQV 88
  89. # define SEQV 89
  90. # define SNOT 90
  91. # define SEQ 91
  92. # define SLT 92
  93. # define SGT 93
  94. # define SLE 94
  95. # define SGE 95
  96. # define SNE 96
  97. # define SENDDO 97
  98. # define SWHILE 98
  99. # define SSLASHD 99
  100.  
  101. /* # line 124 "gram.in" */
  102. #include "defs.h"
  103. #include "p1defs.h"
  104.  
  105. static int nstars;            /* Number of labels in an
  106.                        alternate return CALL */
  107. static int datagripe;
  108. static int ndim;
  109. static int vartype;
  110. int new_dcl;
  111. static ftnint varleng;
  112. static struct Dims dims[MAXDIM+1];
  113. extern struct Labelblock **labarray;    /* Labels in an alternate
  114.                            return CALL */
  115. extern int maxlablist;
  116.  
  117. /* The next two variables are used to verify that each statement might be reached
  118.    during runtime.   lastwasbranch   is tested only in the defintion of the
  119.    stat:   nonterminal. */
  120.  
  121. int lastwasbranch = NO;
  122. static int thiswasbranch = NO;
  123. extern ftnint yystno;
  124. extern flag intonly;
  125. static chainp datastack;
  126. extern long laststfcn, thisstno;
  127. extern int can_include;    /* for netlib */
  128.  
  129. ftnint convci();
  130. Addrp nextdata();
  131. expptr mklogcon(), mkaddcon(), mkrealcon(), mkstrcon(), mkbitcon();
  132. expptr mkcxcon();
  133. struct Listblock *mklist();
  134. struct Listblock *mklist();
  135. struct Impldoblock *mkiodo();
  136. Extsym *comblock();
  137. #define ESNULL (Extsym *)0
  138. #define NPNULL (Namep)0
  139. #define LBNULL (struct Listblock *)0
  140. extern void freetemps(), make_param();
  141.  
  142.  static void
  143. pop_datastack() {
  144.     chainp d0 = datastack;
  145.     if (d0->datap)
  146.         curdtp = (chainp)d0->datap;
  147.     datastack = d0->nextp;
  148.     d0->nextp = 0;
  149.     frchain(&d0);
  150.     }
  151.  
  152.  
  153. /* # line 178 "gram.in" */
  154. typedef union     {
  155.     int ival;
  156.     ftnint lval;
  157.     char *charpval;
  158.     chainp chval;
  159.     tagptr tagval;
  160.     expptr expval;
  161.     struct Labelblock *labval;
  162.     struct Nameblock *namval;
  163.     struct Eqvchain *eqvval;
  164.     Extsym *extval;
  165.     } YYSTYPE;
  166. #define yyclearin yychar = -1
  167. #define yyerrok yyerrflag = 0
  168. extern int yychar;
  169. typedef int yytabelem;
  170. extern yytabelem yyerrflag;
  171. #ifndef YYMAXDEPTH
  172. #define YYMAXDEPTH 150
  173. #endif
  174. YYSTYPE yylval, yyval;
  175. # define YYERRCODE 256
  176. yytabelem yyexca[] ={
  177. -1, 1,
  178.     0, -1,
  179.     -2, 0,
  180. -1, 20,
  181.     1, 38,
  182.     -2, 228,
  183. -1, 24,
  184.     1, 42,
  185.     -2, 228,
  186. -1, 122,
  187.     6, 240,
  188.     -2, 228,
  189. -1, 150,
  190.     1, 244,
  191.     -2, 188,
  192. -1, 174,
  193.     1, 265,
  194.     78, 265,
  195.     -2, 188,
  196. -1, 223,
  197.     77, 173,
  198.     -2, 139,
  199. -1, 245,
  200.     74, 228,
  201.     -2, 225,
  202. -1, 271,
  203.     1, 286,
  204.     -2, 143,
  205. -1, 275,
  206.     1, 295,
  207.     78, 295,
  208.     -2, 145,
  209. -1, 328,
  210.     77, 174,
  211.     -2, 141,
  212. -1, 358,
  213.     1, 267,
  214.     14, 267,
  215.     74, 267,
  216.     78, 267,
  217.     -2, 189,
  218. -1, 436,
  219.     91, 0,
  220.     92, 0,
  221.     93, 0,
  222.     94, 0,
  223.     95, 0,
  224.     96, 0,
  225.     -2, 153,
  226. -1, 453,
  227.     1, 289,
  228.     78, 289,
  229.     -2, 143,
  230. -1, 455,
  231.     1, 291,
  232.     78, 291,
  233.     -2, 143,
  234. -1, 457,
  235.     1, 293,
  236.     78, 293,
  237.     -2, 143,
  238. -1, 459,
  239.     1, 296,
  240.     78, 296,
  241.     -2, 144,
  242. -1, 504,
  243.     78, 289,
  244.     -2, 143,
  245.     };
  246. # define YYNPROD 301
  247. # define YYLAST 1346
  248. yytabelem yyact[]={
  249.  
  250.  237, 274, 471, 317, 316, 412, 420, 297, 470, 399,
  251.  413, 397, 386, 357, 398, 266, 128, 356, 273, 252,
  252.  292,   5, 116, 295, 326, 303, 222,  99, 184, 121,
  253.  195, 229,  17, 203, 270, 304, 313, 199, 201, 118,
  254.   94, 202, 396, 104, 210, 183, 236, 101, 106, 234,
  255.  264, 103, 111, 336, 260,  95,  96,  97, 165, 166,
  256.  334, 335, 336, 395, 105, 311, 309, 190, 130, 131,
  257.  132, 133, 120, 135, 119, 114, 157, 129, 157, 475,
  258.  103, 272, 334, 335, 336, 396, 521, 103, 278, 483,
  259.  535, 165, 166, 334, 335, 336, 342, 341, 340, 339,
  260.  338, 137, 343, 345, 344, 347, 346, 348, 450, 258,
  261.  259, 260, 539, 165, 166, 258, 259, 260, 261, 525,
  262.  102, 522, 155, 409, 155, 186, 187, 103, 408, 117,
  263.  165, 166, 258, 259, 260, 318, 100, 527, 484, 188,
  264.  446, 185, 480, 230, 240, 240, 194, 193, 290, 120,
  265.  211, 119, 462, 481, 157, 294, 482, 257, 157, 243,
  266.  468, 214, 463, 469, 461, 464, 460, 239, 241, 220,
  267.  215, 218, 157, 219, 213, 165, 166, 334, 335, 336,
  268.  342, 341, 340, 157, 371, 452, 343, 345, 344, 347,
  269.  346, 348, 443, 428, 377, 294, 102, 102, 102, 102,
  270.  155, 189, 447, 149, 155, 446, 192, 103,  98, 196,
  271.  197, 198, 277, 376, 320, 321, 206, 288, 155, 289,
  272.  300, 375, 299, 324, 315, 328, 275, 275, 330, 155,
  273.  310, 333, 196, 216, 217, 350, 269, 207, 308, 352,
  274.  353, 333, 100, 177, 354, 349, 323, 112, 245, 257,
  275.  247, 110, 157, 417, 286, 287, 418, 362, 157, 157,
  276.  157, 157, 157, 257, 257, 109, 108, 268, 279, 280,
  277.  281, 265, 107, 355,   4, 333, 427, 465, 378, 370,
  278.  170, 172, 176, 257, 165, 166, 258, 259, 260, 261,
  279.  102, 406, 232, 293, 407, 381, 422, 390, 155, 400,
  280.  391, 223, 419, 422, 155, 155, 155, 155, 155, 117,
  281.  221, 314, 392, 319, 387, 359, 372, 196, 360, 373,
  282.  374, 333, 333, 536, 350, 333, 275, 250, 424, 333,
  283.  405, 333, 410, 532, 230, 432, 433, 434, 435, 436,
  284.  437, 438, 439, 440, 441, 403, 331, 156, 401, 332,
  285.  531, 333, 530, 333, 333, 333, 388, 526, 380, 529,
  286.  524, 157, 257, 333, 431, 492, 257, 257, 257, 257,
  287.  257, 382, 383, 235, 426, 384, 358, 494, 296, 333,
  288.  448, 165, 166, 258, 259, 260, 261, 451, 165, 166,
  289.  258, 259, 260, 261, 103, 445, 472, 400, 421, 191,
  290.  402, 196, 103, 150, 307, 174, 285, 155, 474, 246,
  291.  476, 416, 467, 466, 242, 226, 223, 200, 212, 136,
  292.  209, 486, 171, 488, 490, 275, 275, 275, 141, 240,
  293.  496, 429, 329, 333, 333, 333, 333, 333, 333, 333,
  294.  333, 333, 333, 403, 497, 479, 401, 403, 487, 154,
  295.  257, 154, 495, 493, 306, 485, 502, 454, 456, 458,
  296.  500, 491, 268, 499, 505, 506, 507, 103, 451, 271,
  297.  271, 472,  30, 333, 414, 501, 400, 508, 511, 509,
  298.  387, 244, 208, 510, 516, 514, 515, 333, 517, 333,
  299.  513, 333, 520, 293, 518, 225, 240, 333, 402, 523,
  300.   92, 248, 402, 528,   6, 262, 123, 249,  81,  80,
  301.  275, 275, 275,  79, 534, 533, 479,  78, 173, 263,
  302.  314,  77, 403,  76, 537, 401, 351, 154,  75, 333,
  303.  282, 154,  60,  49,  48, 333,  45,  33, 333, 538,
  304.  113, 205, 454, 456, 458, 154, 267, 165, 166, 334,
  305.  335, 336, 342, 540, 503, 411, 154, 204, 394, 393,
  306.  298, 478, 503, 503, 503, 134, 389, 312, 115, 379,
  307.   26,  25,  24,  23, 302,  22, 305, 402,  21, 385,
  308.  284,   9, 503,   8,   7,   2, 519, 301,  20, 319,
  309.  164,  51, 489, 291, 228, 327, 325, 415,  91, 361,
  310.  255,  53, 337,  19,  55, 365, 366, 367, 368, 369,
  311.   37, 224,   3,   1,   0, 351,   0,   0,   0,   0,
  312.    0,   0,   0,   0,   0, 154,   0,   0,   0,   0,
  313.    0, 154, 154, 154, 154, 154,   0,   0,   0, 267,
  314.    0, 512, 267, 267, 165, 166, 334, 335, 336, 342,
  315.  341, 340, 339, 338,   0, 343, 345, 344, 347, 346,
  316.  348, 165, 166, 334, 335, 336, 342, 341, 453, 455,
  317.  457,   0, 343, 345, 344, 347, 346, 348,   0,   0,
  318.  305,   0, 459,   0,   0,   0,   0, 165, 166, 334,
  319.  335, 336, 342, 341, 340, 339, 338, 351, 343, 345,
  320.  344, 347, 346, 348, 444,   0,   0,   0, 449, 165,
  321.  166, 334, 335, 336, 342, 341, 340, 339, 338,   0,
  322.  343, 345, 344, 347, 346, 348, 165, 166, 334, 335,
  323.  336, 342,   0,   0, 154,   0, 498, 343, 345, 344,
  324.  347, 346, 348,   0,   0, 267,   0,   0,   0,   0,
  325.    0, 442,   0, 504, 455, 457, 165, 166, 334, 335,
  326.  336, 342, 341, 340, 339, 338,   0, 343, 345, 344,
  327.  347, 346, 348,   0,   0,   0,   0,   0,   0, 430,
  328.    0, 477,   0, 305, 165, 166, 334, 335, 336, 342,
  329.  341, 340, 339, 338,   0, 343, 345, 344, 347, 346,
  330.  348, 423,   0,   0,   0,   0, 165, 166, 334, 335,
  331.  336, 342, 341, 340, 339, 338,   0, 343, 345, 344,
  332.  347, 346, 348,   0,   0,   0, 267,   0,   0,   0,
  333.    0, 165, 166, 334, 335, 336, 342, 341, 340, 339,
  334.  338,  12, 343, 345, 344, 347, 346, 348,   0,   0,
  335.    0,   0,   0,   0, 305,  10,  56,  46,  73,  85,
  336.   14,  61,  70,  90,  38,  66,  47,  42,  68,  72,
  337.   31,  67,  35,  34,  11,  87,  36,  18,  41,  39,
  338.   28,  16,  57,  58,  59,  50,  54,  43,  88,  64,
  339.   40,  69,  44,  89,  29,  62,  84,  13,   0,  82,
  340.   65,  52,  86,  27,  74,  63,  15,   0,   0,  71,
  341.   83, 160, 161, 162, 163, 169, 168, 167, 158, 159,
  342.  103,   0, 160, 161, 162, 163, 169, 168, 167, 158,
  343.  159, 103,   0,   0,  32, 160, 161, 162, 163, 169,
  344.  168, 167, 158, 159, 103,   0, 160, 161, 162, 163,
  345.  169, 168, 167, 158, 159, 103,   0, 160, 161, 162,
  346.  163, 169, 168, 167, 158, 159, 103,   0, 160, 161,
  347.  162, 163, 169, 168, 167, 158, 159, 103,   0,   0,
  348.  233,   0,   0,   0,   0,   0, 165, 166, 363,   0,
  349.  364, 233, 227,   0,   0,   0, 238, 165, 166, 231,
  350.    0,   0,   0,   0, 233,   0,   0, 238,   0,   0,
  351.  165, 166, 473,   0,   0, 233,   0,   0,   0,   0,
  352.  238, 165, 166, 231,   0,   0, 233,   0,   0,   0,
  353.    0, 238, 165, 166, 425,   0,   0, 233,   0,   0,
  354.    0,   0, 238, 165, 166,   0,   0,   0,   0,   0,
  355.    0,   0,   0, 238, 160, 161, 162, 163, 169, 168,
  356.  167, 158, 159, 103,   0, 160, 161, 162, 163, 169,
  357.  168, 167, 158, 159, 103, 160, 161, 162, 163, 169,
  358.  168, 167, 158, 159, 103,   0,   0,   0, 160, 161,
  359.  162, 163, 169, 168, 167, 158, 159, 103, 256,   0,
  360.   93, 160, 161, 162, 163, 169, 168, 167, 158, 159,
  361.  103,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  362.    0,   0,   0, 276,   0,   0,   0,   0,   0, 165,
  363.  166,   0, 122,   0, 322, 125, 126, 127,   0, 238,
  364.  165, 166,   0,   0,   0,   0,   0, 138, 139,   0,
  365.  238, 140,   0, 142, 143, 144,   0, 251, 145, 146,
  366.  147,   0, 148, 165, 166, 253,   0, 254,   0,   0,
  367.  153,   0,   0,   0,   0,   0, 165, 166, 151,   0,
  368.  152, 178, 179, 180, 181, 182, 160, 161, 162, 163,
  369.  169, 168, 167, 158, 159, 103, 160, 161, 162, 163,
  370.  169, 168, 167, 158, 159, 103, 160, 161, 162, 163,
  371.  169, 168, 167, 158, 159, 103, 160, 161, 162, 163,
  372.  169, 168, 167, 158, 159, 103,   0,   0,   0,   0,
  373.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  374.    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
  375.    0,   0,   0,   0,   0, 251,   0,   0,   0,   0,
  376.    0, 165, 166, 283,   0, 153,   0,   0,   0,   0,
  377.    0, 165, 166, 175,   0, 404,   0,   0,   0,   0,
  378.    0, 165, 166,  56,  46, 251,  85,   0,  61,   0,
  379.   90, 165, 166,  47,  73,   0,   0,   0,  70,   0,
  380.    0,  66,  87,   0,  68,  72,   0,  67,   0,  57,
  381.   58,  59,  50,   0,   0,  88,   0,   0,   0,   0,
  382.   89,   0,  62,  84,   0,  64,  82,  69,  52,  86,
  383.    0,   0,  63,   0, 124,   0,  65,  83,   0,   0,
  384.   74,   0,   0,   0,   0,  71 };
  385. yytabelem yypact[]={
  386.  
  387. -1000,  18, 503, 837,-1000,-1000,-1000,-1000,-1000,-1000,
  388.  495,-1000,-1000,-1000,-1000,-1000,-1000, 164, 453, -35,
  389.  194, 188, 187, 173,  58, 169,  -8,  66,-1000,-1000,
  390. -1000,-1000,-1000,1264,-1000,-1000,-1000,  -5,-1000,-1000,
  391. -1000,-1000,-1000,-1000,-1000, 453,-1000,-1000,-1000,-1000,
  392. -1000, 354,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  393. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  394. -1000,-1000,-1000,-1000,-1000,1096, 348,1191, 348, 165,
  395. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  396. -1000,-1000,-1000,-1000, 453, 453, 453, 453,-1000, 453,
  397. -1000, 325,-1000,-1000, 453,-1000, -11, 453, 453, 453,
  398.  343,-1000,-1000,-1000, 453, 159,-1000,-1000,-1000,-1000,
  399.  468, 346,  58,-1000,-1000, 344,-1000,-1000,-1000,-1000,
  400.   66, 453, 453, 343,-1000,-1000, 234, 342, 489,-1000,
  401.  341, 917, 963, 963, 340, 475, 453, 335, 453,-1000,
  402. -1000,-1000,-1000,1083,-1000,-1000, 308,1211,-1000,-1000,
  403. -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  404. -1000,1083, 193, 158,-1000,-1000,1049,1049,-1000,-1000,
  405. -1000,-1000,1181, 332,-1000,-1000, 325, 325, 453,-1000,
  406. -1000,  73, 304,-1000,  58,-1000, 304,-1000,-1000,-1000,
  407.  453,-1000, 380,-1000, 330,1273, -17,  66, -18, 453,
  408.  475,  37, 963,1060,-1000, 453,-1000,-1000,-1000,-1000,
  409. -1000, 963,-1000, 963, 361,-1000, 963,-1000, 271,-1000,
  410.  751, 475,-1000, 963,-1000,-1000,-1000, 963, 963,-1000,
  411.  751,-1000, 963,-1000,-1000,  58, 475,-1000, 301, 240,
  412. -1000,1211,-1000,-1000,-1000, 906,-1000,1211,1211,1211,
  413. 1211,1211, -30, 204, 106, 388,-1000,-1000, 388, 388,
  414. -1000, 143, 135, 116, 751,-1000,1049,-1000,-1000,-1000,
  415. -1000,-1000, 308,-1000,-1000, 300,-1000,-1000, 325,-1000,
  416. -1000, 222,-1000,-1000,-1000,  -5,-1000, -36,1201, 453,
  417. -1000, 216,-1000,  45,-1000,-1000, 380, 460,-1000, 453,
  418. -1000,-1000, 178,-1000, 226,-1000,-1000,-1000, 324, 220,
  419.  726, 751, 952,-1000, 751, 299, 199, 115, 751, 453,
  420.  704,-1000, 941, 963, 963, 963, 963, 963, 963, 963,
  421.  963, 963, 963,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  422.  676, 114, -31, 646, 629, 321, 127,-1000,-1000,-1000,
  423. 1083,  33, 751,-1000,-1000,  27, -30, -30, -30,  50,
  424. -1000, 388, 106, 107, 106,1049,1049,1049, 607,  88,
  425.   86,  74,-1000,-1000,-1000,  87,-1000, 201,-1000, 304,
  426. -1000, 113,-1000,  85, 930,-1000,1201,-1000,-1000,  -3,
  427. 1070,-1000,-1000,-1000, 963,-1000,-1000, 453,-1000, 380,
  428.   64,  78,-1000,   8,-1000,  60,-1000,-1000, 453, 963,
  429.   58, 963, 963, 391,-1000, 290, 303, 963, 963,-1000,
  430.  475,-1000,   0, -31, -31, -31, 467,  95,  95, 581,
  431.  646, -22,-1000, 963,-1000, 475, 475,  58,-1000, 308,
  432. -1000,-1000, 388,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
  433. 1049,1049,1049,-1000, 466, 465,  -5,-1000,-1000, 930,
  434. -1000,-1000, 564,-1000,-1000,1201,-1000,-1000,-1000,-1000,
  435.  380,-1000, 460, 460, 453,-1000, 751,  37,  11,  43,
  436.  751,-1000,-1000,-1000, 963, 285, 751,  41, 282,  62,
  437. -1000, 963, 284, 227, 282, 277, 275, 258,-1000,-1000,
  438. -1000,-1000, 930,-1000,-1000,   7, 248,-1000,-1000,-1000,
  439. -1000,-1000, 963,-1000,-1000, 475,-1000,-1000, 751,-1000,
  440. -1000,-1000,-1000,-1000, 751,-1000,-1000, 751,  34, 475,
  441. -1000 };
  442. yytabelem yypgo[]={
  443.  
  444.    0, 613, 612,  13, 611,  81,  15,  32, 610, 604,
  445.  603,  10,   0, 602, 601, 600,  16, 598,  35,  25,
  446.  597, 596, 595,   3,   4, 594,  67, 593, 592,  50,
  447.   34,  18,  26, 101,  20, 591,  30, 373,   1, 292,
  448.   24, 347, 327,   2,   9,  14,  31,  49,  46, 590,
  449.  588,  39,  28,  45, 587, 585, 584, 583, 581,1100,
  450.   40, 580, 579,  12, 578, 575, 573, 572, 571, 570,
  451.  568,  29, 567,  27, 566,  23,  41,   7,  44,   6,
  452.   37, 565,  38, 561, 560,  11,  22,  36, 559, 558,
  453.    8,  17,  33, 557, 555, 541,   5, 540, 472, 537,
  454.  536, 534, 533, 532, 528, 203, 523, 521, 518, 517,
  455.  513, 509,  88, 508, 507,  19 };
  456. yytabelem yyr1[]={
  457.  
  458.    0,   1,   1,  55,  55,  55,  55,  55,  55,  55,
  459.    2,  56,  56,  56,  56,  56,  56,  56,  60,  52,
  460.   33,  53,  53,  61,  61,  62,  62,  63,  63,  26,
  461.   26,  26,  27,  27,  34,  34,  17,  57,  57,  57,
  462.   57,  57,  57,  57,  57,  57,  57,  57,  57,  10,
  463.   10,  10,  74,   7,   8,   9,   9,   9,   9,   9,
  464.    9,   9,   9,   9,   9,   9,  16,  16,  16,  50,
  465.   50,  50,  50,  51,  51,  64,  64,  65,  65,  66,
  466.   66,  80,  54,  54,  67,  67,  81,  82,  76,  83,
  467.   84,  77,  77,  85,  85,  45,  45,  45,  70,  70,
  468.   86,  86,  72,  72,  87,  36,  18,  18,  19,  19,
  469.   75,  75,  89,  88,  88,  90,  90,  43,  43,  91,
  470.   91,   3,  68,  68,  92,  92,  95,  93,  94,  94,
  471.   96,  96,  11,  69,  69,  97,  20,  20,  71,  21,
  472.   21,  22,  22,  38,  38,  38,  39,  39,  39,  39,
  473.   39,  39,  39,  39,  39,  39,  39,  39,  39,  39,
  474.   12,  12,  13,  13,  13,  13,  13,  13,  37,  37,
  475.   37,  37,  32,  40,  40,  44,  44,  48,  48,  48,
  476.   48,  48,  48,  48,  47,  49,  49,  49,  41,  41,
  477.   42,  42,  42,  42,  42,  42,  42,  42,  58,  58,
  478.   58,  58,  58,  58,  58,  58,  58,  99,  23,  24,
  479.   24,  98,  98,  98,  98,  98,  98,  98,  98,  98,
  480.   98,  98,   4, 100, 101, 101, 101, 101,  73,  73,
  481.   35,  25,  25,  46,  46,  14,  14,  28,  28,  59,
  482.   78,  79, 102, 103, 103, 103, 103, 103, 103, 103,
  483.  103, 103, 103, 103, 103, 103, 103, 104, 111, 111,
  484.  111, 106, 113, 113, 113, 108, 108, 105, 105, 114,
  485.  114, 115, 115, 115, 115, 115, 115,  15, 107, 109,
  486.  110, 110,  29,  29,   6,   6,  30,  30,  30,  31,
  487.   31,  31,  31,  31,  31,   5,   5,   5,   5,   5,
  488.  112 };
  489. yytabelem yyr2[]={
  490.  
  491.    0,   0,   3,   2,   2,   2,   3,   3,   2,   1,
  492.    1,   3,   4,   3,   4,   4,   5,   3,   0,   1,
  493.    1,   0,   1,   2,   3,   1,   3,   1,   3,   0,
  494.    2,   3,   1,   3,   1,   1,   1,   1,   1,   1,
  495.    1,   1,   1,   1,   1,   1,   2,   1,   5,   7,
  496.    5,   5,   0,   2,   1,   1,   1,   1,   1,   1,
  497.    1,   1,   1,   1,   1,   1,   0,   4,   6,   3,
  498.    4,   5,   3,   1,   3,   3,   3,   3,   3,   3,
  499.    3,   3,   1,   3,   3,   3,   0,   6,   0,   0,
  500.    0,   2,   3,   1,   3,   1,   2,   1,   1,   3,
  501.    1,   1,   1,   3,   3,   2,   1,   5,   1,   3,
  502.    0,   3,   0,   2,   3,   1,   3,   1,   1,   1,
  503.    3,   1,   3,   3,   4,   1,   0,   2,   1,   3,
  504.    1,   3,   1,   1,   2,   4,   1,   3,   0,   0,
  505.    1,   1,   3,   1,   3,   1,   1,   1,   3,   3,
  506.    3,   3,   2,   3,   3,   3,   3,   3,   2,   3,
  507.    1,   1,   1,   1,   1,   1,   1,   1,   1,   2,
  508.    4,   5,   5,   0,   1,   1,   1,   1,   1,   1,
  509.    1,   1,   1,   1,   5,   1,   1,   1,   1,   3,
  510.    1,   1,   3,   3,   3,   3,   2,   3,   1,   7,
  511.    4,   1,   2,   2,   6,   2,   2,   5,   3,   1,
  512.    4,   4,   5,   2,   1,   1,  10,   1,   3,   4,
  513.    3,   3,   1,   1,   3,   3,   7,   7,   0,   1,
  514.    3,   1,   3,   1,   2,   1,   1,   1,   3,   0,
  515.    0,   0,   1,   2,   2,   2,   2,   2,   2,   2,
  516.    3,   4,   4,   2,   3,   1,   3,   3,   1,   1,
  517.    1,   3,   1,   1,   1,   1,   1,   3,   3,   1,
  518.    3,   1,   1,   1,   2,   2,   2,   1,   3,   3,
  519.    4,   4,   1,   3,   1,   5,   1,   1,   1,   3,
  520.    3,   3,   3,   3,   3,   1,   3,   5,   5,   5,
  521.    0 };
  522. yytabelem yychk[]={
  523.  
  524. -1000,  -1, -55,  -2, 256,   3,   1, -56, -57, -58,
  525.   18,  37,   4,  60,  23,  69,  44,  -7,  40, -10,
  526.  -50, -64, -65, -66, -67, -68, -69,  66,  43,  57,
  527.  -98,  33,  97, -99,  36,  35,  39,  -8,  27,  42,
  528.   53,  41,  30,  50,  55,-100,  20,  29,-101,-102,
  529.   48, -35,  64, -14,  49,  -9,  19,  45,  46,  47,
  530. -103,  24,  58,  68,  52,  63,  28,  34,  31,  54,
  531.   25,  72,  32,  21,  67,-104,-106,-107,-109,-110,
  532. -111,-113,  62,  73,  59,  22,  65,  38,  51,  56,
  533.   26, -17,   5, -59, -60, -60, -60, -60,  44, -73,
  534.   78, -52, -33,  14,  78,  99, -73,  78,  78,  78,
  535.   78, -73,  78, -97,  83, -70, -86, -33, -51,  85,
  536.   83, -71, -59, -98,  70, -59, -59, -59, -16,  82,
  537.  -71, -71, -71, -71, -81, -71, -37, -33, -59, -59,
  538.  -59,  74, -59, -59, -59, -59, -59, -59, -59,-105,
  539.  -42,  82,  84,  74, -37, -48, -41, -12,  12,  13,
  540.    5,   6,   7,   8, -49,  80,  81,  11,  10,   9,
  541. -105,  74,-105,-108, -42,  82,-105,  78, -59, -59,
  542.  -59, -59, -59, -53, -52, -53, -52, -52, -60, -33,
  543.  -26,  74, -33, -76, -51, -36, -33, -33, -33, -80,
  544.   74, -82, -76, -92, -93, -95, -33,  78,  14,  74,
  545.  -78, -73,  74, -78, -36, -51, -33, -33, -80, -82,
  546.  -92,  76, -32,  74,  -4,   6,  74,  75, -25, -46,
  547.  -38,  82, -39,  74, -47, -37, -48, -12,  90, -40,
  548.  -38, -40,  74,  -3,   6, -33,  74, -33, -41,-114,
  549.  -42,  74,-115,  82,  84, -15,  15, -12,  82,  83,
  550.   84,  85, -41, -41, -29,  78,  -6, -37,  74,  78,
  551.  -30, -39,  -5, -31, -38, -47,  74, -30,-112,-112,
  552. -112,-112, -41,  82, -61,  74, -26, -26, -52, -71,
  553.   75, -27, -34, -33,  82, -75,  74, -77, -84, -73,
  554.  -75, -54, -37, -19, -18, -37,  74,  74,  -7,  83,
  555.  -86,  83, -72, -87, -33,  -3, -24, -23,  98, -33,
  556.  -38, -38,  74, -36, -38, -21, -40, -22, -38,  71,
  557.  -38,  75,  78, -12,  82,  83,  84, -13,  89,  88,
  558.   87,  86,  85,  91,  93,  92,  95,  94,  96,  -3,
  559.  -38, -39, -38, -38, -38, -73, -91,  -3,  75,  75,
  560.   78, -41, -38,  82,  84, -41, -41, -41, -41, -41,
  561.   75,  78, -29, -29, -29,  78,  78,  78, -38, -39,
  562.   -5, -31,-112,-112,  75, -62, -63,  14, -26, -74,
  563.   75,  78, -16, -88, -89,  99,  78, -85, -45, -44,
  564.  -12, -47, -33, -48,  74, -36,  75,  78,  83,  78,
  565.  -19, -94, -96, -11,  14, -20, -33,  75,  78,  76,
  566.  -79,  74,  76,  75, -79,  82,  75,  77,  78, -33,
  567.   75, -46, -38, -38, -38, -38, -38, -38, -38, -38,
  568.  -38, -38,  75,  78,  75,  74,  78,  75,-115, -41,
  569.   75,  -6,  78, -39,  -5, -39,  -5, -39,  -5,  75,
  570.   78,  78,  78,  75,  78,  76, -75, -34,  75,  78,
  571.  -90, -43, -38,  82, -85,  82, -44, -37, -83, -18,
  572.   78,  75,  78,  81,  78, -87, -38, -73, -38, -28,
  573.  -38,  70,  75, -32,  74, -40, -38,  -3, -39, -91,
  574.   -3, -73, -23, -33, -39, -23, -23, -23, -63,  14,
  575.  -16, -90,  77, -45, -44, -77, -23, -96, -11, -33,
  576.  -24,  75,  78, -79,  75,  78,  75,  75, -38,  75,
  577.   75,  75,  75, -43, -38,  83,  75, -38,  -3,  78,
  578.   -3 };
  579. yytabelem yydef[]={
  580.  
  581.    1,  -2,   0,   0,   9,  10,   2,   3,   4,   5,
  582.    0, 239,   8,  18,  18,  18,  18, 228,   0,  37,
  583.   -2,  39,  40,  41,  -2,  43,  44,  45,  47, 138,
  584.  198, 239, 201,   0, 239, 239, 239,  66, 138, 138,
  585.  138, 138,  86, 138, 133,   0, 239, 239, 214, 215,
  586.  239, 217, 239, 239, 239,  54, 223, 239, 239, 239,
  587.  242, 239, 235, 236,  55,  56,  57,  58,  59,  60,
  588.   61,  62,  63,  64,  65,   0,   0,   0,   0, 255,
  589.  239, 239, 239, 239, 239, 258, 259, 260, 262, 263,
  590.  264,   6,  36,   7,  21,  21,   0,   0,  18,   0,
  591.  229,  29,  19,  20,   0,  88,   0, 229,   0,   0,
  592.    0,  88, 126, 134,   0,  46,  98, 100, 101,  73,
  593.    0,   0,  -2, 202, 203,   0, 205, 206,  53, 240,
  594.    0,   0,   0,   0,  88, 126,   0, 168,   0, 213,
  595.    0,   0, 173, 173,   0,   0,   0,   0,   0, 243,
  596.   -2, 245, 246,   0, 190, 191,   0,   0, 177, 178,
  597.  179, 180, 181, 182, 183, 160, 161, 185, 186, 187,
  598.  247,   0, 248, 249,  -2, 266, 253,   0, 300, 300,
  599.  300, 300,   0,  11,  22,  13,  29,  29,   0, 138,
  600.   17,   0, 110,  90, 228,  72, 110,  76,  78,  80,
  601.    0,  85,   0, 123, 125,   0,   0,   0,   0,   0,
  602.    0,   0,   0,   0,  69,   0,  75,  77,  79,  84,
  603.  122,   0, 169,  -2,   0, 222,   0, 218,   0, 231,
  604.  233,   0, 143,   0, 145, 146, 147,   0,   0, 220,
  605.  174, 221,   0, 224, 121,  -2,   0, 230, 271,   0,
  606.  188,   0, 269, 272, 273,   0, 277,   0,   0,   0,
  607.    0,   0, 196, 271, 250,   0, 282, 284,   0,   0,
  608.  254,  -2, 287, 288,   0,  -2,   0, 256, 257, 261,
  609.  278, 279, 300, 300,  12,   0,  14,  15,  29,  52,
  610.   30,   0,  32,  34,  35,  66, 112,   0,   0,   0,
  611.  105,   0,  82,   0, 108, 106,   0,   0, 127,   0,
  612.   99,  74,   0, 102,   0, 241, 200, 209,   0,   0,
  613.    0, 241,   0,  70, 211,   0,   0, 140,  -2,   0,
  614.    0, 219,   0,   0,   0,   0,   0,   0,   0,   0,
  615.    0,   0,   0, 162, 163, 164, 165, 166, 167, 234,
  616.    0, 143, 152, 158,   0,   0,   0, 119,  -2, 268,
  617.    0,   0, 274, 275, 276, 192, 193, 194, 195, 197,
  618.  267,   0, 252,   0, 251,   0,   0,   0,   0, 143,
  619.    0,   0, 280, 281,  23,   0,  25,  27,  16, 110,
  620.   31,   0,  50,   0,   0,  51,   0,  91,  93,  95,
  621.    0,  97, 175, 176,   0,  71,  81,   0,  89,   0,
  622.    0,   0, 128, 130, 132, 135, 136,  48,   0,   0,
  623.  228,   0,   0,   0,  67,   0, 170, 173,   0, 212,
  624.    0, 232, 148, 149, 150, 151,  -2, 154, 155, 156,
  625.  157, 159, 144,   0, 207,   0,   0, 228, 270, 271,
  626.  189, 283,   0,  -2, 290,  -2, 292,  -2, 294,  -2,
  627.    0,   0,   0,  24,   0,   0,  66,  33, 111,   0,
  628.  113, 115, 118, 117,  92,   0,  96,  83,  90, 109,
  629.    0, 124,   0,   0,   0, 103, 104,   0,   0, 208,
  630.  237, 204, 241, 171, 173,   0, 142,   0, 143,   0,
  631.  120,   0,   0, 168,  -2,   0,   0,   0,  26,  28,
  632.   49, 114,   0,  94,  95,   0,   0, 129, 131, 137,
  633.  199, 210,   0,  68, 172,   0, 184, 226, 227, 285,
  634.  297, 298, 299, 116, 118,  87, 107, 238,   0,   0,
  635.  216 };
  636. # ifdef YYDEBUG
  637. # include "y.debug"
  638. # endif
  639.  
  640. # define YYFLAG -1000
  641. # define YYERROR goto yyerrlab
  642. # define YYACCEPT return(0)
  643. # define YYABORT return(1)
  644.  
  645. /*    parser for yacc output    */
  646.  
  647. #ifdef YYDEBUG
  648. int yydebug = 0; /* 1 for debugging */
  649. #endif
  650. YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
  651. int yychar = -1; /* current input token number */
  652. int yynerrs = 0;  /* number of errors */
  653. yytabelem yyerrflag = 0;  /* error recovery flag */
  654.  
  655. yyparse()
  656. {    yytabelem yys[YYMAXDEPTH];
  657.     int yyj, yym;
  658.     register YYSTYPE *yypvt;
  659.     register int yystate, yyn;
  660.     register yytabelem *yyps;
  661.     register YYSTYPE *yypv;
  662.     register yytabelem *yyxi;
  663.  
  664.     yystate = 0;
  665.     yychar = -1;
  666.     yynerrs = 0;
  667.     yyerrflag = 0;
  668.     yyps= &yys[-1];
  669.     yypv= &yyv[-1];
  670.  
  671. yystack:    /* put a state and value onto the stack */
  672. #ifdef YYDEBUG
  673.     if(yydebug >= 3)
  674.         if(yychar < 0 || yytoknames[yychar] == 0)
  675.             printf("char %d in %s", yychar, yystates[yystate]);
  676.         else
  677.             printf("%s in %s", yytoknames[yychar], yystates[yystate]);
  678. #endif
  679.     if( ++yyps >= &yys[YYMAXDEPTH] ) {
  680.         yyerror( "yacc stack overflow" );
  681.         return(1);
  682.     }
  683.     *yyps = yystate;
  684.     ++yypv;
  685.     *yypv = yyval;
  686. yynewstate:
  687.     yyn = yypact[yystate];
  688.     if(yyn <= YYFLAG) goto yydefault; /* simple state */
  689.     if(yychar<0) {
  690.         yychar = yylex();
  691. #ifdef YYDEBUG
  692.         if(yydebug >= 2) {
  693.             if(yychar <= 0)
  694.                 printf("lex EOF\n");
  695.             else if(yytoknames[yychar])
  696.                 printf("lex %s\n", yytoknames[yychar]);
  697.             else
  698.                 printf("lex (%c)\n", yychar);
  699.         }
  700. #endif
  701.         if(yychar < 0)
  702.             yychar = 0;
  703.     }
  704.     if((yyn += yychar) < 0 || yyn >= YYLAST)
  705.         goto yydefault;
  706.     if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
  707.         yychar = -1;
  708.         yyval = yylval;
  709.         yystate = yyn;
  710.         if( yyerrflag > 0 ) --yyerrflag;
  711.         goto yystack;
  712.     }
  713. yydefault:
  714.     /* default state action */
  715.     if( (yyn=yydef[yystate]) == -2 ) {
  716.         if(yychar < 0) {
  717.             yychar = yylex();
  718. #ifdef YYDEBUG
  719.             if(yydebug >= 2)
  720.                 if(yychar < 0)
  721.                     printf("lex EOF\n");
  722.                 else
  723.                     printf("lex %s\n", yytoknames[yychar]);
  724. #endif
  725.             if(yychar < 0)
  726.                 yychar = 0;
  727.         }
  728.         /* look through exception table */
  729.         for(yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate);
  730.             yyxi += 2 ) ; /* VOID */
  731.         while( *(yyxi+=2) >= 0 ){
  732.             if( *yyxi == yychar ) break;
  733.         }
  734.         if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
  735.     }
  736.     if( yyn == 0 ){ /* error */
  737.         /* error ... attempt to resume parsing */
  738.         switch( yyerrflag ){
  739.         case 0:   /* brand new error */
  740. #ifdef YYDEBUG
  741.             yyerror("syntax error\n%s", yystates[yystate]);
  742.             if(yytoknames[yychar])
  743.                 yyerror("saw %s\n", yytoknames[yychar]);
  744.             else if(yychar >= ' ' && yychar < '\177')
  745.                 yyerror("saw `%c'\n", yychar);
  746.             else if(yychar == 0)
  747.                 yyerror("saw EOF\n");
  748.             else
  749.                 yyerror("saw char 0%o\n", yychar);
  750. #else
  751.             yyerror( "syntax error" );
  752. #endif
  753. yyerrlab:
  754.             ++yynerrs;
  755.         case 1:
  756.         case 2: /* incompletely recovered error ... try again */
  757.             yyerrflag = 3;
  758.             /* find a state where "error" is a legal shift action */
  759.             while ( yyps >= yys ) {
  760.                 yyn = yypact[*yyps] + YYERRCODE;
  761.                 if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
  762.                     yystate = yyact[yyn];  /* simulate a shift of "error" */
  763.                     goto yystack;
  764.                 }
  765.                 yyn = yypact[*yyps];
  766.                 /* the current yyps has no shift onn "error", pop stack */
  767. #ifdef YYDEBUG
  768.                 if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
  769. #endif
  770.                 --yyps;
  771.                 --yypv;
  772.             }
  773.             /* there is no state on the stack with an error shift ... abort */
  774. yyabort:
  775.             return(1);
  776.         case 3:  /* no shift yet; clobber input char */
  777. #ifdef YYDEBUG
  778.             if( yydebug ) {
  779.                 printf("error recovery discards ");
  780.                 if(yytoknames[yychar])
  781.                     printf("%s\n", yytoknames[yychar]);
  782.                 else if(yychar >= ' ' && yychar < '\177')
  783.                     printf("`%c'\n", yychar);
  784.                 else if(yychar == 0)
  785.                     printf("EOF\n");
  786.                 else
  787.                     printf("char 0%o\n", yychar);
  788.             }
  789. #endif
  790.             if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
  791.             yychar = -1;
  792.             goto yynewstate;   /* try again in the same state */
  793.         }
  794.     }
  795.     /* reduction by production yyn */
  796. #ifdef YYDEBUG
  797.     if(yydebug) {    char *s;
  798.         printf("reduce %d in:\n\t", yyn);
  799.         for(s = yystates[yystate]; *s; s++) {
  800.             putchar(*s);
  801.             if(*s == '\n' && *(s+1))
  802.                 putchar('\t');
  803.         }
  804.     }
  805. #endif
  806.     yyps -= yyr2[yyn];
  807.     yypvt = yypv;
  808.     yypv -= yyr2[yyn];
  809.     yyval = yypv[1];
  810.     yym=yyn;
  811.     /* consult goto table to find next state */
  812.     yyn = yyr1[yyn];
  813.     yyj = yypgo[yyn] + *yyps + 1;
  814.     if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
  815.     switch(yym){
  816.  
  817. case 3:
  818. /* # line 226 "gram.in" */
  819. {
  820. /* stat:   is the nonterminal for Fortran statements */
  821.  
  822.           lastwasbranch = NO; } break;
  823. case 5:
  824. /* # line 232 "gram.in" */
  825. { /* forbid further statement function definitions... */
  826.           if (parstate == INDATA && laststfcn != thisstno)
  827.             parstate = INEXEC;
  828.           thisstno++;
  829.           if(yypvt[-1].labval && (yypvt[-1].labval->labelno==dorange))
  830.             enddo(yypvt[-1].labval->labelno);
  831.           if(lastwasbranch && thislabel==NULL)
  832.             warn("statement cannot be reached");
  833.           lastwasbranch = thiswasbranch;
  834.           thiswasbranch = NO;
  835.           if(yypvt[-1].labval)
  836.             {
  837.             if(yypvt[-1].labval->labtype == LABFORMAT)
  838.                 err("label already that of a format");
  839.             else
  840.                 yypvt[-1].labval->labtype = LABEXEC;
  841.             }
  842.           freetemps();
  843.         } break;
  844. case 6:
  845. /* # line 252 "gram.in" */
  846. { if (can_include)
  847.             doinclude( yypvt[-0].charpval );
  848.           else {
  849.             fprintf(diagfile, "Cannot open file %s\n", yypvt[-0].charpval);
  850.             done(1);
  851.             }
  852.         } break;
  853. case 7:
  854. /* # line 260 "gram.in" */
  855. { if (yypvt[-2].labval)
  856.             lastwasbranch = NO;
  857.           endproc(); /* lastwasbranch = NO; -- set in endproc() */
  858.         } break;
  859. case 8:
  860. /* # line 265 "gram.in" */
  861. { extern void unclassifiable();
  862.           unclassifiable();
  863.  
  864. /* flline flushes the current line, ignoring the rest of the text there */
  865.  
  866.           flline(); } break;
  867. case 9:
  868. /* # line 272 "gram.in" */
  869. { flline();  needkwd = NO;  inioctl = NO;
  870.           yyerrok; yyclearin; } break;
  871. case 10:
  872. /* # line 277 "gram.in" */
  873. {
  874.         if(yystno != 0)
  875.             {
  876.             yyval.labval = thislabel =  mklabel(yystno);
  877.             if( ! headerdone ) {
  878.                 if (procclass == CLUNKNOWN)
  879.                     procclass = CLMAIN;
  880.                 puthead(CNULL, procclass);
  881.                 }
  882.             if(thislabel->labdefined)
  883.                 execerr("label %s already defined",
  884.                     convic(thislabel->stateno) );
  885.             else    {
  886.                 if(thislabel->blklevel!=0 && thislabel->blklevel<blklevel
  887.                     && thislabel->labtype!=LABFORMAT)
  888.                     warn1("there is a branch to label %s from outside block",
  889.                           convic( (ftnint) (thislabel->stateno) ) );
  890.                 thislabel->blklevel = blklevel;
  891.                 thislabel->labdefined = YES;
  892.                 if(thislabel->labtype != LABFORMAT)
  893.                     p1_label((long)(thislabel - labeltab));
  894.                 }
  895.             }
  896.         else    yyval.labval = thislabel = NULL;
  897.         } break;
  898. case 11:
  899. /* # line 305 "gram.in" */
  900. {startproc(yypvt[-0].extval, CLMAIN); } break;
  901. case 12:
  902. /* # line 307 "gram.in" */
  903. {    warn("ignoring arguments to main program");
  904.             /* hashclear(); */
  905.             startproc(yypvt[-1].extval, CLMAIN); } break;
  906. case 13:
  907. /* # line 311 "gram.in" */
  908. { if(yypvt[-0].extval) NO66("named BLOCKDATA");
  909.           startproc(yypvt[-0].extval, CLBLOCK); } break;
  910. case 14:
  911. /* # line 314 "gram.in" */
  912. { entrypt(CLPROC, TYSUBR, (ftnint) 0,  yypvt[-1].extval, yypvt[-0].chval); } break;
  913. case 15:
  914. /* # line 316 "gram.in" */
  915. { entrypt(CLPROC, TYUNKNOWN, (ftnint) 0, yypvt[-1].extval, yypvt[-0].chval); } break;
  916. case 16:
  917. /* # line 318 "gram.in" */
  918. { entrypt(CLPROC, yypvt[-4].ival, varleng, yypvt[-1].extval, yypvt[-0].chval); } break;
  919. case 17:
  920. /* # line 320 "gram.in" */
  921. { if(parstate==OUTSIDE || procclass==CLMAIN
  922.             || procclass==CLBLOCK)
  923.                 execerr("misplaced entry statement", CNULL);
  924.           entrypt(CLENTRY, 0, (ftnint) 0, yypvt[-1].extval, yypvt[-0].chval);
  925.         } break;
  926. case 18:
  927. /* # line 328 "gram.in" */
  928. { newproc(); } break;
  929. case 19:
  930. /* # line 332 "gram.in" */
  931. { yyval.extval = newentry(yypvt[-0].namval, 1); } break;
  932. case 20:
  933. /* # line 336 "gram.in" */
  934. { yyval.namval = mkname(token); } break;
  935. case 21:
  936. /* # line 339 "gram.in" */
  937. { yyval.extval = NULL; } break;
  938. case 29:
  939. /* # line 357 "gram.in" */
  940. { yyval.chval = 0; } break;
  941. case 30:
  942. /* # line 359 "gram.in" */
  943. { NO66(" () argument list");
  944.           yyval.chval = 0; } break;
  945. case 31:
  946. /* # line 362 "gram.in" */
  947. {yyval.chval = yypvt[-1].chval; } break;
  948. case 32:
  949. /* # line 366 "gram.in" */
  950. { yyval.chval = (yypvt[-0].namval ? mkchain((char *)yypvt[-0].namval,CHNULL) : CHNULL ); } break;
  951. case 33:
  952. /* # line 368 "gram.in" */
  953. { if(yypvt[-0].namval) yypvt[-2].chval = yyval.chval = mkchain((char *)yypvt[-0].namval, yypvt[-2].chval); } break;
  954. case 34:
  955. /* # line 372 "gram.in" */
  956. { if(yypvt[-0].namval->vstg!=STGUNKNOWN && yypvt[-0].namval->vstg!=STGARG)
  957.             dclerr("name declared as argument after use", yypvt[-0].namval);
  958.           yypvt[-0].namval->vstg = STGARG;
  959.         } break;
  960. case 35:
  961. /* # line 377 "gram.in" */
  962. { NO66("altenate return argument");
  963.  
  964. /* substars   means that '*'ed formal parameters should be replaced.
  965.    This is used to specify alternate return labels; in theory, only
  966.    parameter slots which have '*' should accept the statement labels.
  967.    This compiler chooses to ignore the '*'s in the formal declaration, and
  968.    always return the proper value anyway.
  969.  
  970.    This variable is only referred to in   proc.c   */
  971.  
  972.           yyval.namval = 0;  substars = YES; } break;
  973. case 36:
  974. /* # line 393 "gram.in" */
  975. {
  976.         char *s;
  977.         s = copyn(toklen+1, token);
  978.         s[toklen] = '\0';
  979.         yyval.charpval = s;
  980.         } break;
  981. case 45:
  982. /* # line 409 "gram.in" */
  983. { NO66("SAVE statement");
  984.           saveall = YES; } break;
  985. case 46:
  986. /* # line 412 "gram.in" */
  987. { NO66("SAVE statement"); } break;
  988. case 47:
  989. /* # line 414 "gram.in" */
  990. { fmtstmt(thislabel); setfmt(thislabel); } break;
  991. case 48:
  992. /* # line 416 "gram.in" */
  993. { NO66("PARAMETER statement"); } break;
  994. case 49:
  995. /* # line 420 "gram.in" */
  996. { settype(yypvt[-4].namval, yypvt[-6].ival, yypvt[-0].lval);
  997.           if(ndim>0) setbound(yypvt[-4].namval,ndim,dims);
  998.         } break;
  999. case 50:
  1000. /* # line 424 "gram.in" */
  1001. { settype(yypvt[-2].namval, yypvt[-4].ival, yypvt[-0].lval);
  1002.           if(ndim>0) setbound(yypvt[-2].namval,ndim,dims);
  1003.         } break;
  1004. case 51:
  1005. /* # line 428 "gram.in" */
  1006. { if (new_dcl == 2) {
  1007.             err("attempt to give DATA in type-declaration");
  1008.             new_dcl = 1;
  1009.             }
  1010.         } break;
  1011. case 52:
  1012. /* # line 435 "gram.in" */
  1013. { new_dcl = 2; } break;
  1014. case 53:
  1015. /* # line 438 "gram.in" */
  1016. { varleng = yypvt[-0].lval; } break;
  1017. case 54:
  1018. /* # line 442 "gram.in" */
  1019. { varleng = (yypvt[-0].ival<0 || ONEOF(yypvt[-0].ival,M(TYLOGICAL)|M(TYLONG))
  1020.                 ? 0 : typesize[yypvt[-0].ival]);
  1021.           vartype = yypvt[-0].ival; } break;
  1022. case 55:
  1023. /* # line 447 "gram.in" */
  1024. { yyval.ival = TYLONG; } break;
  1025. case 56:
  1026. /* # line 448 "gram.in" */
  1027. { yyval.ival = tyreal; } break;
  1028. case 57:
  1029. /* # line 449 "gram.in" */
  1030. { ++complex_seen; yyval.ival = tycomplex; } break;
  1031. case 58:
  1032. /* # line 450 "gram.in" */
  1033. { yyval.ival = TYDREAL; } break;
  1034. case 59:
  1035. /* # line 451 "gram.in" */
  1036. { ++dcomplex_seen; NOEXT("DOUBLE COMPLEX statement"); yyval.ival = TYDCOMPLEX; } break;
  1037. case 60:
  1038. /* # line 452 "gram.in" */
  1039. { yyval.ival = TYLOGICAL; } break;
  1040. case 61:
  1041. /* # line 453 "gram.in" */
  1042. { NO66("CHARACTER statement"); yyval.ival = TYCHAR; } break;
  1043. case 62:
  1044. /* # line 454 "gram.in" */
  1045. { yyval.ival = TYUNKNOWN; } break;
  1046. case 63:
  1047. /* # line 455 "gram.in" */
  1048. { yyval.ival = TYUNKNOWN; } break;
  1049. case 64:
  1050. /* # line 456 "gram.in" */
  1051. { NOEXT("AUTOMATIC statement"); yyval.ival = - STGAUTO; } break;
  1052. case 65:
  1053. /* # line 457 "gram.in" */
  1054. { NOEXT("STATIC statement"); yyval.ival = - STGBSS; } break;
  1055. case 66:
  1056. /* # line 461 "gram.in" */
  1057. { yyval.lval = varleng; } break;
  1058. case 67:
  1059. /* # line 463 "gram.in" */
  1060. {
  1061.         expptr p;
  1062.         p = yypvt[-1].expval;
  1063.         NO66("length specification *n");
  1064.         if( ! ISICON(p) || p->constblock.Const.ci <= 0 )
  1065.             {
  1066.             yyval.lval = 0;
  1067.             dclerr("length must be a positive integer constant",
  1068.                 NPNULL);
  1069.             }
  1070.         else {
  1071.             if (vartype == TYCHAR)
  1072.                 yyval.lval = p->constblock.Const.ci;
  1073.             else switch((int)p->constblock.Const.ci) {
  1074.                 case 1:    yyval.lval = 1; break;
  1075.                 case 2: yyval.lval = typesize[TYSHORT];    break;
  1076.                 case 4: yyval.lval = typesize[TYLONG];    break;
  1077.                 case 8: yyval.lval = typesize[TYDREAL];    break;
  1078.                 case 16: yyval.lval = typesize[TYDCOMPLEX]; break;
  1079.                 default:
  1080.                     dclerr("invalid length",NPNULL);
  1081.                     yyval.lval = varleng;
  1082.                 }
  1083.             }
  1084.         } break;
  1085. case 68:
  1086. /* # line 489 "gram.in" */
  1087. { NO66("length specification *(*)"); yyval.lval = -1; } break;
  1088. case 69:
  1089. /* # line 493 "gram.in" */
  1090. { incomm( yyval.extval = comblock("") , yypvt[-0].namval ); } break;
  1091. case 70:
  1092. /* # line 495 "gram.in" */
  1093. { yyval.extval = yypvt[-1].extval;  incomm(yypvt[-1].extval, yypvt[-0].namval); } break;
  1094. case 71:
  1095. /* # line 497 "gram.in" */
  1096. { yyval.extval = yypvt[-2].extval;  incomm(yypvt[-2].extval, yypvt[-0].namval); } break;
  1097. case 72:
  1098. /* # line 499 "gram.in" */
  1099. { incomm(yypvt[-2].extval, yypvt[-0].namval); } break;
  1100. case 73:
  1101. /* # line 503 "gram.in" */
  1102. { yyval.extval = comblock(""); } break;
  1103. case 74:
  1104. /* # line 505 "gram.in" */
  1105. { yyval.extval = comblock(token); } break;
  1106. case 75:
  1107. /* # line 509 "gram.in" */
  1108. { setext(yypvt[-0].namval); } break;
  1109. case 76:
  1110. /* # line 511 "gram.in" */
  1111. { setext(yypvt[-0].namval); } break;
  1112. case 77:
  1113. /* # line 515 "gram.in" */
  1114. { NO66("INTRINSIC statement"); setintr(yypvt[-0].namval); } break;
  1115. case 78:
  1116. /* # line 517 "gram.in" */
  1117. { setintr(yypvt[-0].namval); } break;
  1118. case 81:
  1119. /* # line 525 "gram.in" */
  1120. {
  1121.         struct Equivblock *p;
  1122.         if(nequiv >= maxequiv)
  1123.             many("equivalences", 'q', maxequiv);
  1124.         p  =  & eqvclass[nequiv++];
  1125.         p->eqvinit = NO;
  1126.         p->eqvbottom = 0;
  1127.         p->eqvtop = 0;
  1128.         p->equivs = yypvt[-1].eqvval;
  1129.         } break;
  1130. case 82:
  1131. /* # line 538 "gram.in" */
  1132. { yyval.eqvval=ALLOC(Eqvchain);
  1133.           yyval.eqvval->eqvitem.eqvlhs = (struct Primblock *)yypvt[-0].expval;
  1134.         } break;
  1135. case 83:
  1136. /* # line 542 "gram.in" */
  1137. { yyval.eqvval=ALLOC(Eqvchain);
  1138.           yyval.eqvval->eqvitem.eqvlhs = (struct Primblock *) yypvt[-0].expval;
  1139.           yyval.eqvval->eqvnextp = yypvt[-2].eqvval;
  1140.         } break;
  1141. case 86:
  1142. /* # line 553 "gram.in" */
  1143. { if(parstate == OUTSIDE)
  1144.             {
  1145.             newproc();
  1146.             startproc(ESNULL, CLMAIN);
  1147.             }
  1148.           if(parstate < INDATA)
  1149.             {
  1150.             enddcl();
  1151.             parstate = INDATA;
  1152.             datagripe = 1;
  1153.             }
  1154.         } break;
  1155. case 87:
  1156. /* # line 568 "gram.in" */
  1157. { ftnint junk;
  1158.           if(nextdata(&junk) != NULL)
  1159.             err("too few initializers");
  1160.           frdata(yypvt[-4].chval);
  1161.           frrpl();
  1162.         } break;
  1163. case 88:
  1164. /* # line 576 "gram.in" */
  1165. { frchain(&datastack); curdtp = 0; } break;
  1166. case 89:
  1167. /* # line 578 "gram.in" */
  1168. { pop_datastack(); } break;
  1169. case 90:
  1170. /* # line 580 "gram.in" */
  1171. { toomanyinit = NO; } break;
  1172. case 93:
  1173. /* # line 585 "gram.in" */
  1174. { dataval(ENULL, yypvt[-0].expval); } break;
  1175. case 94:
  1176. /* # line 587 "gram.in" */
  1177. { dataval(yypvt[-2].expval, yypvt[-0].expval); } break;
  1178. case 96:
  1179. /* # line 592 "gram.in" */
  1180. { if( yypvt[-1].ival==OPMINUS && ISCONST(yypvt[-0].expval) )
  1181.             consnegop((Constp)yypvt[-0].expval);
  1182.           yyval.expval = yypvt[-0].expval;
  1183.         } break;
  1184. case 100:
  1185. /* # line 604 "gram.in" */
  1186. { int k;
  1187.           yypvt[-0].namval->vsave = YES;
  1188.           k = yypvt[-0].namval->vstg;
  1189.         if( ! ONEOF(k, M(STGUNKNOWN)|M(STGBSS)|M(STGINIT)) )
  1190.             dclerr("can only save static variables", yypvt[-0].namval);
  1191.         } break;
  1192. case 104:
  1193. /* # line 618 "gram.in" */
  1194. { if(yypvt[-2].namval->vclass == CLUNKNOWN)
  1195.             make_param((struct Paramblock *)yypvt[-2].namval, yypvt[-0].expval);
  1196.           else dclerr("cannot make into parameter", yypvt[-2].namval);
  1197.         } break;
  1198. case 105:
  1199. /* # line 625 "gram.in" */
  1200. { if(ndim>0) setbound(yypvt[-1].namval, ndim, dims); } break;
  1201. case 106:
  1202. /* # line 629 "gram.in" */
  1203. { Namep np;
  1204.           np = ( (struct Primblock *) yypvt[-0].expval) -> namep;
  1205.           vardcl(np);
  1206.           if(np->vstg == STGCOMMON)
  1207.             extsymtab[np->vardesc.varno].extinit = YES;
  1208.           else if(np->vstg==STGEQUIV)
  1209.             eqvclass[np->vardesc.varno].eqvinit = YES;
  1210.           else if(np->vstg!=STGINIT && np->vstg!=STGBSS)
  1211.             dclerr("inconsistent storage classes", np);
  1212.           yyval.chval = mkchain((char *)yypvt[-0].expval, CHNULL);
  1213.         } break;
  1214. case 107:
  1215. /* # line 641 "gram.in" */
  1216. { chainp p; struct Impldoblock *q;
  1217.         pop_datastack();
  1218.         q = ALLOC(Impldoblock);
  1219.         q->tag = TIMPLDO;
  1220.         (q->varnp = (Namep) (yypvt[-1].chval->datap))->vimpldovar = 1;
  1221.         p = yypvt[-1].chval->nextp;
  1222.         if(p)  { q->implb = (expptr)(p->datap); p = p->nextp; }
  1223.         if(p)  { q->impub = (expptr)(p->datap); p = p->nextp; }
  1224.         if(p)  { q->impstep = (expptr)(p->datap); }
  1225.         frchain( & (yypvt[-1].chval) );
  1226.         yyval.chval = mkchain((char *)q, CHNULL);
  1227.         q->datalist = hookup(yypvt[-3].chval, yyval.chval);
  1228.         } break;
  1229. case 108:
  1230. /* # line 657 "gram.in" */
  1231. { if (!datastack)
  1232.             curdtp = 0;
  1233.           datastack = mkchain((char *)curdtp, datastack);
  1234.           curdtp = yypvt[-0].chval; curdtelt = 0;
  1235.           } break;
  1236. case 109:
  1237. /* # line 663 "gram.in" */
  1238. { yyval.chval = hookup(yypvt[-2].chval, yypvt[-0].chval); } break;
  1239. case 110:
  1240. /* # line 667 "gram.in" */
  1241. { ndim = 0; } break;
  1242. case 112:
  1243. /* # line 671 "gram.in" */
  1244. { ndim = 0; } break;
  1245. case 115:
  1246. /* # line 676 "gram.in" */
  1247. {
  1248.           if(ndim == maxdim)
  1249.             err("too many dimensions");
  1250.           else if(ndim < maxdim)
  1251.             { dims[ndim].lb = 0;
  1252.               dims[ndim].ub = yypvt[-0].expval;
  1253.             }
  1254.           ++ndim;
  1255.         } break;
  1256. case 116:
  1257. /* # line 686 "gram.in" */
  1258. {
  1259.           if(ndim == maxdim)
  1260.             err("too many dimensions");
  1261.           else if(ndim < maxdim)
  1262.             { dims[ndim].lb = yypvt[-2].expval;
  1263.               dims[ndim].ub = yypvt[-0].expval;
  1264.             }
  1265.           ++ndim;
  1266.         } break;
  1267. case 117:
  1268. /* # line 698 "gram.in" */
  1269. { yyval.expval = 0; } break;
  1270. case 119:
  1271. /* # line 703 "gram.in" */
  1272. { nstars = 1; labarray[0] = yypvt[-0].labval; } break;
  1273. case 120:
  1274. /* # line 705 "gram.in" */
  1275. { if(nstars < maxlablist)  labarray[nstars++] = yypvt[-0].labval; } break;
  1276. case 121:
  1277. /* # line 709 "gram.in" */
  1278. { yyval.labval = execlab( convci(toklen, token) ); } break;
  1279. case 122:
  1280. /* # line 713 "gram.in" */
  1281. { NO66("IMPLICIT statement"); } break;
  1282. case 125:
  1283. /* # line 719 "gram.in" */
  1284. { if (vartype != TYUNKNOWN)
  1285.             dclerr("-- expected letter range",NPNULL);
  1286.           setimpl(vartype, varleng, 'a', 'z'); } break;
  1287. case 126:
  1288. /* # line 724 "gram.in" */
  1289. { needkwd = 1; } break;
  1290. case 130:
  1291. /* # line 733 "gram.in" */
  1292. { setimpl(vartype, varleng, yypvt[-0].ival, yypvt[-0].ival); } break;
  1293. case 131:
  1294. /* # line 735 "gram.in" */
  1295. { setimpl(vartype, varleng, yypvt[-2].ival, yypvt[-0].ival); } break;
  1296. case 132:
  1297. /* # line 739 "gram.in" */
  1298. { if(toklen!=1 || token[0]<'a' || token[0]>'z')
  1299.             {
  1300.             dclerr("implicit item must be single letter", NPNULL);
  1301.             yyval.ival = 0;
  1302.             }
  1303.           else yyval.ival = token[0];
  1304.         } break;
  1305. case 135:
  1306. /* # line 753 "gram.in" */
  1307. {
  1308.         if(yypvt[-2].namval->vclass == CLUNKNOWN)
  1309.             {
  1310.             yypvt[-2].namval->vclass = CLNAMELIST;
  1311.             yypvt[-2].namval->vtype = TYINT;
  1312.             yypvt[-2].namval->vstg = STGBSS;
  1313.             yypvt[-2].namval->varxptr.namelist = yypvt[-0].chval;
  1314.             yypvt[-2].namval->vardesc.varno = ++lastvarno;
  1315.             }
  1316.         else dclerr("cannot be a namelist name", yypvt[-2].namval);
  1317.         } break;
  1318. case 136:
  1319. /* # line 767 "gram.in" */
  1320. { yyval.chval = mkchain((char *)yypvt[-0].namval, CHNULL); } break;
  1321. case 137:
  1322. /* # line 769 "gram.in" */
  1323. { yyval.chval = hookup(yypvt[-2].chval, mkchain((char *)yypvt[-0].namval, CHNULL)); } break;
  1324. case 138:
  1325. /* # line 773 "gram.in" */
  1326. { switch(parstate)
  1327.             {
  1328.             case OUTSIDE:    newproc();
  1329.                     startproc(ESNULL, CLMAIN);
  1330.             case INSIDE:    parstate = INDCL;
  1331.             case INDCL:    break;
  1332.  
  1333.             case INDATA:
  1334.                 if (datagripe) {
  1335.                     errstr(
  1336.                 "Statement order error: declaration after DATA",
  1337.                         CNULL);
  1338.                     datagripe = 0;
  1339.                     }
  1340.                 break;
  1341.  
  1342.             default:
  1343.                 dclerr("declaration among executables", NPNULL);
  1344.             }
  1345.         } break;
  1346. case 139:
  1347. /* # line 795 "gram.in" */
  1348. { yyval.chval = 0; } break;
  1349. case 140:
  1350. /* # line 797 "gram.in" */
  1351. { yyval.chval = revchain(yypvt[-0].chval); } break;
  1352. case 141:
  1353. /* # line 801 "gram.in" */
  1354. { yyval.chval = mkchain((char *)yypvt[-0].expval, CHNULL); } break;
  1355. case 142:
  1356. /* # line 803 "gram.in" */
  1357. { yyval.chval = mkchain((char *)yypvt[-0].expval, yypvt[-2].chval); } break;
  1358. case 144:
  1359. /* # line 808 "gram.in" */
  1360. { yyval.expval = yypvt[-1].expval; if (yyval.expval->tag == TPRIM)
  1361.                     yyval.expval->primblock.parenused = 1; } break;
  1362. case 148:
  1363. /* # line 816 "gram.in" */
  1364. { yyval.expval = mkexpr(yypvt[-1].ival, yypvt[-2].expval, yypvt[-0].expval); } break;
  1365. case 149:
  1366. /* # line 818 "gram.in" */
  1367. { yyval.expval = mkexpr(OPSTAR, yypvt[-2].expval, yypvt[-0].expval); } break;
  1368. case 150:
  1369. /* # line 820 "gram.in" */
  1370. { yyval.expval = mkexpr(OPSLASH, yypvt[-2].expval, yypvt[-0].expval); } break;
  1371. case 151:
  1372. /* # line 822 "gram.in" */
  1373. { yyval.expval = mkexpr(OPPOWER, yypvt[-2].expval, yypvt[-0].expval); } break;
  1374. case 152:
  1375. /* # line 824 "gram.in" */
  1376. { if(yypvt[-1].ival == OPMINUS)
  1377.             yyval.expval = mkexpr(OPNEG, yypvt[-0].expval, ENULL);
  1378.           else     yyval.expval = yypvt[-0].expval;
  1379.         } break;
  1380. case 153:
  1381. /* # line 829 "gram.in" */
  1382. { yyval.expval = mkexpr(yypvt[-1].ival, yypvt[-2].expval, yypvt[-0].expval); } break;
  1383. case 154:
  1384. /* # line 831 "gram.in" */
  1385. { NO66(".EQV. operator");
  1386.           yyval.expval = mkexpr(OPEQV, yypvt[-2].expval,yypvt[-0].expval); } break;
  1387. case 155:
  1388. /* # line 834 "gram.in" */
  1389. { NO66(".NEQV. operator");
  1390.           yyval.expval = mkexpr(OPNEQV, yypvt[-2].expval, yypvt[-0].expval); } break;
  1391. case 156:
  1392. /* # line 837 "gram.in" */
  1393. { yyval.expval = mkexpr(OPOR, yypvt[-2].expval, yypvt[-0].expval); } break;
  1394. case 157:
  1395. /* # line 839 "gram.in" */
  1396. { yyval.expval = mkexpr(OPAND, yypvt[-2].expval, yypvt[-0].expval); } break;
  1397. case 158:
  1398. /* # line 841 "gram.in" */
  1399. { yyval.expval = mkexpr(OPNOT, yypvt[-0].expval, ENULL); } break;
  1400. case 159:
  1401. /* # line 843 "gram.in" */
  1402. { NO66("concatenation operator //");
  1403.           yyval.expval = mkexpr(OPCONCAT, yypvt[-2].expval, yypvt[-0].expval); } break;
  1404. case 160:
  1405. /* # line 847 "gram.in" */
  1406. { yyval.ival = OPPLUS; } break;
  1407. case 161:
  1408. /* # line 848 "gram.in" */
  1409. { yyval.ival = OPMINUS; } break;
  1410. case 162:
  1411. /* # line 851 "gram.in" */
  1412. { yyval.ival = OPEQ; } break;
  1413. case 163:
  1414. /* # line 852 "gram.in" */
  1415. { yyval.ival = OPGT; } break;
  1416. case 164:
  1417. /* # line 853 "gram.in" */
  1418. { yyval.ival = OPLT; } break;
  1419. case 165:
  1420. /* # line 854 "gram.in" */
  1421. { yyval.ival = OPGE; } break;
  1422. case 166:
  1423. /* # line 855 "gram.in" */
  1424. { yyval.ival = OPLE; } break;
  1425. case 167:
  1426. /* # line 856 "gram.in" */
  1427. { yyval.ival = OPNE; } break;
  1428. case 168:
  1429. /* # line 860 "gram.in" */
  1430. { yyval.expval = mkprim(yypvt[-0].namval, LBNULL, CHNULL); } break;
  1431. case 169:
  1432. /* # line 862 "gram.in" */
  1433. { NO66("substring operator :");
  1434.           yyval.expval = mkprim(yypvt[-1].namval, LBNULL, yypvt[-0].chval); } break;
  1435. case 170:
  1436. /* # line 865 "gram.in" */
  1437. { yyval.expval = mkprim(yypvt[-3].namval, mklist(yypvt[-1].chval), CHNULL); } break;
  1438. case 171:
  1439. /* # line 867 "gram.in" */
  1440. { NO66("substring operator :");
  1441.           yyval.expval = mkprim(yypvt[-4].namval, mklist(yypvt[-2].chval), yypvt[-0].chval); } break;
  1442. case 172:
  1443. /* # line 872 "gram.in" */
  1444. { yyval.chval = mkchain((char *)yypvt[-3].expval, mkchain((char *)yypvt[-1].expval,CHNULL)); } break;
  1445. case 173:
  1446. /* # line 876 "gram.in" */
  1447. { yyval.expval = 0; } break;
  1448. case 175:
  1449. /* # line 881 "gram.in" */
  1450. { if(yypvt[-0].namval->vclass == CLPARAM)
  1451.             yyval.expval = (expptr) cpexpr(
  1452.                 ( (struct Paramblock *) (yypvt[-0].namval) ) -> paramval);
  1453.         } break;
  1454. case 177:
  1455. /* # line 888 "gram.in" */
  1456. { yyval.expval = mklogcon(1); } break;
  1457. case 178:
  1458. /* # line 889 "gram.in" */
  1459. { yyval.expval = mklogcon(0); } break;
  1460. case 179:
  1461. /* # line 890 "gram.in" */
  1462. { yyval.expval = mkstrcon(toklen, token); } break;
  1463. case 180:
  1464. /* # line 891 "gram.in" */
  1465.  { yyval.expval = mkintcon( convci(toklen, token) ); } break;
  1466. case 181:
  1467. /* # line 892 "gram.in" */
  1468.  { yyval.expval = mkrealcon(tyreal, token); } break;
  1469. case 182:
  1470. /* # line 893 "gram.in" */
  1471.  { yyval.expval = mkrealcon(TYDREAL, token); } break;
  1472. case 184:
  1473. /* # line 898 "gram.in" */
  1474. { yyval.expval = mkcxcon(yypvt[-3].expval,yypvt[-1].expval); } break;
  1475. case 185:
  1476. /* # line 902 "gram.in" */
  1477. { NOEXT("hex constant");
  1478.           yyval.expval = mkbitcon(4, toklen, token); } break;
  1479. case 186:
  1480. /* # line 905 "gram.in" */
  1481. { NOEXT("octal constant");
  1482.           yyval.expval = mkbitcon(3, toklen, token); } break;
  1483. case 187:
  1484. /* # line 908 "gram.in" */
  1485. { NOEXT("binary constant");
  1486.           yyval.expval = mkbitcon(1, toklen, token); } break;
  1487. case 189:
  1488. /* # line 914 "gram.in" */
  1489. { yyval.expval = yypvt[-1].expval; } break;
  1490. case 192:
  1491. /* # line 920 "gram.in" */
  1492. { yyval.expval = mkexpr(yypvt[-1].ival, yypvt[-2].expval, yypvt[-0].expval); } break;
  1493. case 193:
  1494. /* # line 922 "gram.in" */
  1495. { yyval.expval = mkexpr(OPSTAR, yypvt[-2].expval, yypvt[-0].expval); } break;
  1496. case 194:
  1497. /* # line 924 "gram.in" */
  1498. { yyval.expval = mkexpr(OPSLASH, yypvt[-2].expval, yypvt[-0].expval); } break;
  1499. case 195:
  1500. /* # line 926 "gram.in" */
  1501. { yyval.expval = mkexpr(OPPOWER, yypvt[-2].expval, yypvt[-0].expval); } break;
  1502. case 196:
  1503. /* # line 928 "gram.in" */
  1504. { if(yypvt[-1].ival == OPMINUS)
  1505.             yyval.expval = mkexpr(OPNEG, yypvt[-0].expval, ENULL);
  1506.           else    yyval.expval = yypvt[-0].expval;
  1507.         } break;
  1508. case 197:
  1509. /* # line 933 "gram.in" */
  1510. { NO66("concatenation operator //");
  1511.           yyval.expval = mkexpr(OPCONCAT, yypvt[-2].expval, yypvt[-0].expval); } break;
  1512. case 199:
  1513. /* # line 938 "gram.in" */
  1514. {
  1515.         if(yypvt[-3].labval->labdefined)
  1516.             execerr("no backward DO loops", CNULL);
  1517.         yypvt[-3].labval->blklevel = blklevel+1;
  1518.         exdo(yypvt[-3].labval->labelno, NPNULL, yypvt[-0].chval);
  1519.         } break;
  1520. case 200:
  1521. /* # line 945 "gram.in" */
  1522. {
  1523.         exdo((int)(ctls - ctlstack - 2), NPNULL, yypvt[-0].chval);
  1524.         NOEXT("DO without label");
  1525.         } break;
  1526. case 201:
  1527. /* # line 950 "gram.in" */
  1528. { exenddo(NPNULL); } break;
  1529. case 202:
  1530. /* # line 952 "gram.in" */
  1531. { exendif();  thiswasbranch = NO; } break;
  1532. case 204:
  1533. /* # line 955 "gram.in" */
  1534. { exelif(yypvt[-2].expval); lastwasbranch = NO; } break;
  1535. case 205:
  1536. /* # line 957 "gram.in" */
  1537. { exelse(); lastwasbranch = NO; } break;
  1538. case 206:
  1539. /* # line 959 "gram.in" */
  1540. { exendif(); lastwasbranch = NO; } break;
  1541. case 207:
  1542. /* # line 963 "gram.in" */
  1543. { exif(yypvt[-1].expval); } break;
  1544. case 208:
  1545. /* # line 967 "gram.in" */
  1546. { yyval.chval = mkchain((char *)yypvt[-2].namval, yypvt[-0].chval); } break;
  1547. case 210:
  1548. /* # line 972 "gram.in" */
  1549. { yyval.chval = mkchain(CNULL, (chainp)yypvt[-1].expval); } break;
  1550. case 211:
  1551. /* # line 976 "gram.in" */
  1552. { exequals((struct Primblock *)yypvt[-2].expval, yypvt[-0].expval); } break;
  1553. case 212:
  1554. /* # line 978 "gram.in" */
  1555. { exassign(yypvt[-0].namval, yypvt[-2].labval); } break;
  1556. case 215:
  1557. /* # line 982 "gram.in" */
  1558. { inioctl = NO; } break;
  1559. case 216:
  1560. /* # line 984 "gram.in" */
  1561. { exarif(yypvt[-6].expval, yypvt[-4].labval, yypvt[-2].labval, yypvt[-0].labval);  thiswasbranch = YES; } break;
  1562. case 217:
  1563. /* # line 986 "gram.in" */
  1564. { excall(yypvt[-0].namval, LBNULL, 0, labarray); } break;
  1565. case 218:
  1566. /* # line 988 "gram.in" */
  1567. { excall(yypvt[-2].namval, LBNULL, 0, labarray); } break;
  1568. case 219:
  1569. /* # line 990 "gram.in" */
  1570. { if(nstars < maxlablist)
  1571.             excall(yypvt[-3].namval, mklist(revchain(yypvt[-1].chval)), nstars, labarray);
  1572.           else
  1573.             many("alternate returns", 'l', maxlablist);
  1574.         } break;
  1575. case 220:
  1576. /* # line 996 "gram.in" */
  1577. { exreturn(yypvt[-0].expval);  thiswasbranch = YES; } break;
  1578. case 221:
  1579. /* # line 998 "gram.in" */
  1580. { exstop(yypvt[-2].ival, yypvt[-0].expval);  thiswasbranch = yypvt[-2].ival; } break;
  1581. case 222:
  1582. /* # line 1002 "gram.in" */
  1583. { yyval.labval = mklabel( convci(toklen, token) ); } break;
  1584. case 223:
  1585. /* # line 1006 "gram.in" */
  1586. { if(parstate == OUTSIDE)
  1587.             {
  1588.             newproc();
  1589.             startproc(ESNULL, CLMAIN);
  1590.             }
  1591.         } break;
  1592. case 224:
  1593. /* # line 1015 "gram.in" */
  1594. { exgoto(yypvt[-0].labval);  thiswasbranch = YES; } break;
  1595. case 225:
  1596. /* # line 1017 "gram.in" */
  1597. { exasgoto(yypvt[-0].namval);  thiswasbranch = YES; } break;
  1598. case 226:
  1599. /* # line 1019 "gram.in" */
  1600. { exasgoto(yypvt[-4].namval);  thiswasbranch = YES; } break;
  1601. case 227:
  1602. /* # line 1021 "gram.in" */
  1603. { if(nstars < maxlablist)
  1604.             putcmgo(putx(fixtype(yypvt[-0].expval)), nstars, labarray);
  1605.           else
  1606.             many("labels in computed GOTO list", 'l', maxlablist);
  1607.         } break;
  1608. case 230:
  1609. /* # line 1033 "gram.in" */
  1610. { nstars = 0; yyval.namval = yypvt[-0].namval; } break;
  1611. case 231:
  1612. /* # line 1037 "gram.in" */
  1613. { yyval.chval = yypvt[-0].expval ? mkchain((char *)yypvt[-0].expval,CHNULL) : CHNULL; } break;
  1614. case 232:
  1615. /* # line 1039 "gram.in" */
  1616. { yyval.chval = yypvt[-0].expval ? mkchain((char *)yypvt[-0].expval, yypvt[-2].chval) : yypvt[-2].chval; } break;
  1617. case 234:
  1618. /* # line 1044 "gram.in" */
  1619. { if(nstars < maxlablist) labarray[nstars++] = yypvt[-0].labval; yyval.expval = 0; } break;
  1620. case 235:
  1621. /* # line 1048 "gram.in" */
  1622. { yyval.ival = 0; } break;
  1623. case 236:
  1624. /* # line 1050 "gram.in" */
  1625. { yyval.ival = 2; } break;
  1626. case 237:
  1627. /* # line 1054 "gram.in" */
  1628. { yyval.chval = mkchain((char *)yypvt[-0].expval, CHNULL); } break;
  1629. case 238:
  1630. /* # line 1056 "gram.in" */
  1631. { yyval.chval = hookup(yypvt[-2].chval, mkchain((char *)yypvt[-0].expval,CHNULL) ); } break;
  1632. case 239:
  1633. /* # line 1060 "gram.in" */
  1634. { if(parstate == OUTSIDE)
  1635.             {
  1636.             newproc();
  1637.             startproc(ESNULL, CLMAIN);
  1638.             }
  1639.  
  1640. /* This next statement depends on the ordering of the state table encoding */
  1641.  
  1642.           if(parstate < INDATA) enddcl();
  1643.         } break;
  1644. case 240:
  1645. /* # line 1073 "gram.in" */
  1646. { intonly = YES; } break;
  1647. case 241:
  1648. /* # line 1077 "gram.in" */
  1649. { intonly = NO; } break;
  1650. case 242:
  1651. /* # line 1082 "gram.in" */
  1652. { endio(); } break;
  1653. case 244:
  1654. /* # line 1087 "gram.in" */
  1655. { ioclause(IOSUNIT, yypvt[-0].expval); endioctl(); } break;
  1656. case 245:
  1657. /* # line 1089 "gram.in" */
  1658. { ioclause(IOSUNIT, ENULL); endioctl(); } break;
  1659. case 246:
  1660. /* # line 1091 "gram.in" */
  1661. { ioclause(IOSUNIT, IOSTDERR); endioctl(); } break;
  1662. case 248:
  1663. /* # line 1094 "gram.in" */
  1664. { doio(CHNULL); } break;
  1665. case 249:
  1666. /* # line 1096 "gram.in" */
  1667. { doio(CHNULL); } break;
  1668. case 250:
  1669. /* # line 1098 "gram.in" */
  1670. { doio(revchain(yypvt[-0].chval)); } break;
  1671. case 251:
  1672. /* # line 1100 "gram.in" */
  1673. { doio(revchain(yypvt[-0].chval)); } break;
  1674. case 252:
  1675. /* # line 1102 "gram.in" */
  1676. { doio(revchain(yypvt[-0].chval)); } break;
  1677. case 253:
  1678. /* # line 1104 "gram.in" */
  1679. { doio(CHNULL); } break;
  1680. case 254:
  1681. /* # line 1106 "gram.in" */
  1682. { doio(revchain(yypvt[-0].chval)); } break;
  1683. case 255:
  1684. /* # line 1108 "gram.in" */
  1685. { doio(CHNULL); } break;
  1686. case 256:
  1687. /* # line 1110 "gram.in" */
  1688. { doio(revchain(yypvt[-0].chval)); } break;
  1689. case 258:
  1690. /* # line 1117 "gram.in" */
  1691. { iostmt = IOBACKSPACE; } break;
  1692. case 259:
  1693. /* # line 1119 "gram.in" */
  1694. { iostmt = IOREWIND; } break;
  1695. case 260:
  1696. /* # line 1121 "gram.in" */
  1697. { iostmt = IOENDFILE; } break;
  1698. case 262:
  1699. /* # line 1128 "gram.in" */
  1700. { iostmt = IOINQUIRE; } break;
  1701. case 263:
  1702. /* # line 1130 "gram.in" */
  1703. { iostmt = IOOPEN; } break;
  1704. case 264:
  1705. /* # line 1132 "gram.in" */
  1706. { iostmt = IOCLOSE; } break;
  1707. case 265:
  1708. /* # line 1136 "gram.in" */
  1709. {
  1710.         ioclause(IOSUNIT, ENULL);
  1711.         ioclause(IOSFMT, yypvt[-0].expval);
  1712.         endioctl();
  1713.         } break;
  1714. case 266:
  1715. /* # line 1142 "gram.in" */
  1716. {
  1717.         ioclause(IOSUNIT, ENULL);
  1718.         ioclause(IOSFMT, ENULL);
  1719.         endioctl();
  1720.         } break;
  1721. case 267:
  1722. /* # line 1150 "gram.in" */
  1723. {
  1724.           ioclause(IOSUNIT, yypvt[-1].expval);
  1725.           endioctl();
  1726.         } break;
  1727. case 268:
  1728. /* # line 1155 "gram.in" */
  1729. { endioctl(); } break;
  1730. case 271:
  1731. /* # line 1163 "gram.in" */
  1732. { ioclause(IOSPOSITIONAL, yypvt[-0].expval); } break;
  1733. case 272:
  1734. /* # line 1165 "gram.in" */
  1735. { ioclause(IOSPOSITIONAL, ENULL); } break;
  1736. case 273:
  1737. /* # line 1167 "gram.in" */
  1738. { ioclause(IOSPOSITIONAL, IOSTDERR); } break;
  1739. case 274:
  1740. /* # line 1169 "gram.in" */
  1741. { ioclause(yypvt[-1].ival, yypvt[-0].expval); } break;
  1742. case 275:
  1743. /* # line 1171 "gram.in" */
  1744. { ioclause(yypvt[-1].ival, ENULL); } break;
  1745. case 276:
  1746. /* # line 1173 "gram.in" */
  1747. { ioclause(yypvt[-1].ival, IOSTDERR); } break;
  1748. case 277:
  1749. /* # line 1177 "gram.in" */
  1750. { yyval.ival = iocname(); } break;
  1751. case 278:
  1752. /* # line 1181 "gram.in" */
  1753. { iostmt = IOREAD; } break;
  1754. case 279:
  1755. /* # line 1185 "gram.in" */
  1756. { iostmt = IOWRITE; } break;
  1757. case 280:
  1758. /* # line 1189 "gram.in" */
  1759. {
  1760.         iostmt = IOWRITE;
  1761.         ioclause(IOSUNIT, ENULL);
  1762.         ioclause(IOSFMT, yypvt[-1].expval);
  1763.         endioctl();
  1764.         } break;
  1765. case 281:
  1766. /* # line 1196 "gram.in" */
  1767. {
  1768.         iostmt = IOWRITE;
  1769.         ioclause(IOSUNIT, ENULL);
  1770.         ioclause(IOSFMT, ENULL);
  1771.         endioctl();
  1772.         } break;
  1773. case 282:
  1774. /* # line 1205 "gram.in" */
  1775. { yyval.chval = mkchain((char *)yypvt[-0].tagval, CHNULL); } break;
  1776. case 283:
  1777. /* # line 1207 "gram.in" */
  1778. { yyval.chval = mkchain((char *)yypvt[-0].tagval, yypvt[-2].chval); } break;
  1779. case 284:
  1780. /* # line 1211 "gram.in" */
  1781. { yyval.tagval = (tagptr) yypvt[-0].expval; } break;
  1782. case 285:
  1783. /* # line 1213 "gram.in" */
  1784. { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval,revchain(yypvt[-3].chval)); } break;
  1785. case 286:
  1786. /* # line 1217 "gram.in" */
  1787. { yyval.chval = mkchain((char *)yypvt[-0].expval, CHNULL); } break;
  1788. case 287:
  1789. /* # line 1219 "gram.in" */
  1790. { yyval.chval = mkchain((char *)yypvt[-0].tagval, CHNULL); } break;
  1791. case 289:
  1792. /* # line 1224 "gram.in" */
  1793. { yyval.chval = mkchain((char *)yypvt[-0].expval, mkchain((char *)yypvt[-2].expval, CHNULL) ); } break;
  1794. case 290:
  1795. /* # line 1226 "gram.in" */
  1796. { yyval.chval = mkchain((char *)yypvt[-0].tagval, mkchain((char *)yypvt[-2].expval, CHNULL) ); } break;
  1797. case 291:
  1798. /* # line 1228 "gram.in" */
  1799. { yyval.chval = mkchain((char *)yypvt[-0].expval, mkchain((char *)yypvt[-2].tagval, CHNULL) ); } break;
  1800. case 292:
  1801. /* # line 1230 "gram.in" */
  1802. { yyval.chval = mkchain((char *)yypvt[-0].tagval, mkchain((char *)yypvt[-2].tagval, CHNULL) ); } break;
  1803. case 293:
  1804. /* # line 1232 "gram.in" */
  1805. { yyval.chval = mkchain((char *)yypvt[-0].expval, yypvt[-2].chval); } break;
  1806. case 294:
  1807. /* # line 1234 "gram.in" */
  1808. { yyval.chval = mkchain((char *)yypvt[-0].tagval, yypvt[-2].chval); } break;
  1809. case 295:
  1810. /* # line 1238 "gram.in" */
  1811. { yyval.tagval = (tagptr) yypvt[-0].expval; } break;
  1812. case 296:
  1813. /* # line 1240 "gram.in" */
  1814. { yyval.tagval = (tagptr) yypvt[-1].expval; } break;
  1815. case 297:
  1816. /* # line 1242 "gram.in" */
  1817. { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval, mkchain((char *)yypvt[-3].expval, CHNULL) ); } break;
  1818. case 298:
  1819. /* # line 1244 "gram.in" */
  1820. { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval, mkchain((char *)yypvt[-3].tagval, CHNULL) ); } break;
  1821. case 299:
  1822. /* # line 1246 "gram.in" */
  1823. { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval, revchain(yypvt[-3].chval)); } break;
  1824. case 300:
  1825. /* # line 1250 "gram.in" */
  1826. { startioctl(); } break;
  1827.     }
  1828.     goto yystack;  /* stack new state and value */
  1829. }
  1830.