# define SEOS 1 # define SCOMMENT 2 # define SLABEL 3 # define SUNKNOWN 4 # define SHOLLERITH 5 # define SICON 6 # define SRCON 7 # define SDCON 8 # define SBITCON 9 # define SOCTCON 10 # define SHEXCON 11 # define STRUE 12 # define SFALSE 13 # define SNAME 14 # define SNAMEEQ 15 # define SFIELD 16 # define SSCALE 17 # define SINCLUDE 18 # define SLET 19 # define SASSIGN 20 # define SAUTOMATIC 21 # define SBACKSPACE 22 # define SBLOCK 23 # define SCALL 24 # define SCHARACTER 25 # define SCLOSE 26 # define SCOMMON 27 # define SCOMPLEX 28 # define SCONTINUE 29 # define SDATA 30 # define SDCOMPLEX 31 # define SDIMENSION 32 # define SDO 33 # define SDOUBLE 34 # define SELSE 35 # define SELSEIF 36 # define SEND 37 # define SENDFILE 38 # define SENDIF 39 # define SENTRY 40 # define SEQUIV 41 # define SEXTERNAL 42 # define SFORMAT 43 # define SFUNCTION 44 # define SGOTO 45 # define SASGOTO 46 # define SCOMPGOTO 47 # define SARITHIF 48 # define SLOGIF 49 # define SIMPLICIT 50 # define SINQUIRE 51 # define SINTEGER 52 # define SINTRINSIC 53 # define SLOGICAL 54 # define SNAMELIST 55 # define SOPEN 56 # define SPARAM 57 # define SPAUSE 58 # define SPRINT 59 # define SPROGRAM 60 # define SPUNCH 61 # define SREAD 62 # define SREAL 63 # define SRETURN 64 # define SREWIND 65 # define SSAVE 66 # define SSTATIC 67 # define SSTOP 68 # define SSUBROUTINE 69 # define STHEN 70 # define STO 71 # define SUNDEFINED 72 # define SWRITE 73 # define SLPAR 74 # define SRPAR 75 # define SEQUALS 76 # define SCOLON 77 # define SCOMMA 78 # define SCURRENCY 79 # define SPLUS 80 # define SMINUS 81 # define SSTAR 82 # define SSLASH 83 # define SPOWER 84 # define SCONCAT 85 # define SAND 86 # define SOR 87 # define SNEQV 88 # define SEQV 89 # define SNOT 90 # define SEQ 91 # define SLT 92 # define SGT 93 # define SLE 94 # define SGE 95 # define SNE 96 # line 98 "gram.in" # include "defs" #ifdef SDB # include <a.out.h> char *stabline(); # ifdef UCBVAXASM char *stabdline(); # endif # ifndef N_SO # include <stab.h> # endif #endif static int nstars; static int ndim; static int vartype; static ftnint varleng; static struct { expptr lb, ub; } dims[MAXDIM+1]; static struct Labelblock *labarray[MAXLABLIST]; static int lastwasbranch = NO; static int thiswasbranch = NO; static int hadcomma; extern ftnint yystno; extern flag intonly; static chainp datastack; extern long laststfcn, thisstno; ftnint convci(); double convcd(); Addrp nextdata(); expptr mklogcon(), mkaddcon(), mkrealcon(), mkstrcon(), mkbitcon(); expptr mkcxcon(); struct Listblock *mklist(); struct Listblock *mklist(); struct Impldoblock *mkiodo(); struct Extsym *comblock(); static void pop_datastack() { chainp d0 = datastack; if (d0->datap && !(bugwarn & 2)) { if (bugwarn) warnb("old f77 incorrectly parsed this data statement"); curdtp = (chainp)d0->datap; } datastack = d0->nextp; d0->nextp = 0; frchain(&d0); } # line 155 "gram.in" typedef union { int ival; char *charpval; chainp chval; tagptr tagval; expptr expval; struct Labelblock *labval; struct Nameblock *namval; struct Eqvchain *eqvval; struct Extsym *extval; } YYSTYPE; #define yyclearin yychar = -1 #define yyerrok yyerrflag = 0 extern int yychar; extern short yyerrflag; #ifndef YYMAXDEPTH #define YYMAXDEPTH 150 #endif YYSTYPE yylval, yyval; # define YYERRCODE 256 short yyexca[] ={ -1, 1, 0, -1, -2, 0, -1, 20, 1, 31, -2, 214, -1, 24, 1, 35, -2, 214, -1, 148, 1, 230, -2, 178, -1, 168, 1, 251, 78, 251, -2, 178, -1, 215, 77, 164, -2, 130, -1, 237, 74, 214, -2, 211, -1, 263, 1, 272, -2, 134, -1, 267, 1, 281, 78, 281, -2, 136, -1, 312, 77, 165, -2, 132, -1, 342, 1, 253, 14, 253, 74, 253, 78, 253, -2, 179, -1, 403, 91, 0, 92, 0, 93, 0, 94, 0, 95, 0, 96, 0, -2, 144, -1, 420, 1, 275, 78, 275, -2, 134, -1, 422, 1, 277, 78, 277, -2, 134, -1, 424, 1, 279, 78, 279, -2, 134, -1, 461, 78, 275, -2, 134, }; # define YYNPROD 286 # define YYLAST 1245 short yyact[]={ 229, 266, 492, 491, 224, 490, 389, 340, 292, 434, 282, 382, 244, 126, 341, 381, 221, 226, 310, 291, 98, 285, 214, 301, 265, 114, 433, 270, 228, 256, 5, 184, 262, 196, 116, 17, 178, 459, 194, 177, 119, 104, 258, 320, 154, 109, 192, 318, 319, 320, 252, 203, 188, 466, 299, 100, 162, 163, 318, 319, 320, 326, 325, 324, 323, 322, 102, 327, 329, 328, 331, 330, 332, 297, 118, 155, 117, 155, 128, 129, 130, 131, 112, 133, 162, 163, 318, 319, 320, 326, 325, 324, 323, 322, 507, 327, 329, 328, 331, 330, 332, 411, 102, 153, 102, 153, 162, 163, 318, 319, 320, 326, 325, 324, 323, 322, 127, 327, 329, 328, 331, 330, 332, 162, 163, 250, 251, 252, 253, 443, 93, 489, 180, 181, 179, 118, 488, 117, 510, 187, 97, 222, 232, 232, 394, 94, 95, 96, 250, 251, 252, 479, 155, 509, 413, 249, 155, 378, 235, 231, 233, 441, 377, 207, 442, 280, 155, 212, 482, 477, 284, 211, 284, 99, 99, 263, 263, 155, 210, 205, 153, 206, 102, 431, 153, 444, 432, 414, 267, 267, 413, 440, 386, 428, 153, 387, 240, 427, 264, 426, 254, 271, 272, 273, 269, 153, 304, 305, 287, 355, 255, 288, 276, 277, 419, 308, 410, 312, 303, 278, 314, 274, 375, 317, 279, 376, 298, 334, 182, 395, 335, 336, 337, 317, 296, 361, 338, 369, 333, 360, 370, 249, 260, 359, 155, 343, 257, 261, 344, 346, 155, 155, 155, 155, 155, 249, 249, 200, 339, 242, 307, 162, 163, 318, 319, 320, 326, 317, 315, 171, 334, 316, 153, 362, 110, 249, 108, 107, 153, 153, 153, 153, 153, 4, 106, 105, 267, 356, 345, 103, 357, 358, 388, 364, 349, 350, 351, 352, 353, 371, 213, 368, 365, 366, 502, 317, 317, 147, 334, 317, 367, 335, 391, 317, 379, 317, 485, 484, 222, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 215, 451, 482, 483, 398, 148, 317, 168, 317, 317, 317, 374, 478, 481, 476, 135, 155, 249, 317, 449, 393, 249, 249, 249, 249, 249, 412, 286, 415, 162, 163, 318, 319, 320, 101, 420, 422, 424, 162, 163, 250, 251, 252, 115, 153, 185, 435, 295, 267, 267, 267, 238, 430, 429, 164, 166, 170, 234, 439, 218, 416, 446, 215, 193, 204, 202, 165, 232, 453, 418, 139, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 447, 445, 454, 452, 313, 455, 450, 249, 448, 102, 456, 102, 102, 383, 201, 227, 236, 217, 457, 91, 30, 461, 422, 424, 435, 458, 317, 6, 101, 101, 101, 101, 241, 183, 267, 267, 267, 317, 186, 439, 189, 190, 191, 232, 317, 471, 475, 199, 470, 465, 480, 80, 418, 121, 462, 463, 464, 363, 487, 493, 134, 79, 78, 189, 208, 209, 486, 77, 469, 294, 167, 317, 260, 76, 505, 473, 494, 75, 317, 237, 493, 239, 503, 74, 59, 506, 508, 497, 48, 47, 152, 44, 152, 335, 32, 111, 317, 494, 493, 198, 512, 511, 514, 380, 197, 317, 373, 372, 497, 468, 467, 438, 497, 195, 513, 494, 132, 101, 300, 113, 283, 158, 159, 160, 161, 26, 497, 25, 156, 157, 102, 158, 159, 160, 161, 115, 24, 302, 156, 157, 102, 23, 189, 22, 158, 159, 160, 161, 421, 423, 425, 156, 157, 102, 21, 158, 159, 160, 161, 501, 500, 499, 156, 157, 102, 9, 8, 152, 7, 2, 289, 152, 162, 163, 318, 319, 320, 326, 325, 324, 20, 152, 259, 327, 329, 328, 331, 330, 332, 495, 225, 50, 152, 504, 281, 220, 162, 163, 347, 311, 348, 309, 384, 90, 247, 52, 230, 321, 19, 290, 54, 293, 36, 225, 219, 421, 423, 425, 216, 162, 163, 223, 189, 3, 498, 1, 0, 0, 0, 230, 162, 163, 385, 409, 0, 0, 0, 0, 162, 163, 318, 319, 320, 326, 325, 324, 323, 322, 396, 327, 329, 328, 331, 330, 332, 0, 0, 0, 0, 152, 0, 0, 0, 0, 0, 152, 152, 152, 152, 152, 0, 0, 0, 259, 397, 0, 259, 259, 0, 162, 163, 318, 319, 320, 326, 325, 324, 323, 322, 0, 327, 329, 328, 331, 330, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 283, 0, 390, 0, 0, 293, 0, 162, 163, 318, 319, 320, 326, 325, 324, 323, 322, 302, 327, 329, 328, 331, 330, 332, 162, 163, 318, 319, 320, 326, 325, 0, 0, 0, 0, 327, 329, 328, 331, 330, 332, 0, 0, 0, 0, 158, 159, 160, 161, 460, 0, 0, 156, 157, 102, 152, 460, 460, 460, 0, 158, 159, 160, 161, 0, 0, 259, 156, 157, 102, 460, 0, 0, 0, 472, 0, 0, 474, 0, 162, 163, 318, 319, 320, 326, 0, 0, 437, 0, 293, 327, 329, 328, 331, 330, 332, 417, 0, 496, 0, 0, 162, 163, 250, 251, 252, 253, 0, 0, 0, 0, 0, 0, 0, 151, 0, 0, 0, 0, 496, 162, 163, 149, 496, 150, 0, 0, 0, 0, 225, 259, 0, 0, 0, 0, 162, 163, 496, 12, 0, 158, 159, 160, 161, 0, 230, 0, 156, 157, 102, 0, 293, 10, 55, 45, 72, 84, 14, 60, 69, 89, 37, 65, 46, 41, 67, 71, 31, 66, 34, 33, 11, 86, 35, 18, 40, 38, 28, 16, 56, 57, 58, 49, 53, 42, 87, 63, 39, 68, 43, 88, 29, 61, 83, 13, 92, 81, 64, 51, 85, 27, 73, 62, 15, 0, 0, 70, 82, 0, 225, 0, 158, 159, 160, 161, 162, 163, 436, 156, 157, 102, 0, 0, 0, 0, 230, 0, 120, 354, 123, 124, 125, 0, 162, 163, 250, 251, 252, 253, 0, 0, 136, 137, 0, 0, 138, 0, 140, 141, 142, 0, 0, 143, 144, 145, 0, 146, 158, 159, 160, 161, 0, 342, 0, 156, 157, 102, 162, 163, 250, 251, 252, 253, 0, 0, 172, 173, 174, 175, 176, 225, 0, 158, 159, 160, 161, 162, 163, 223, 156, 157, 102, 0, 0, 0, 0, 230, 158, 159, 160, 161, 0, 0, 0, 156, 157, 102, 0, 158, 159, 160, 161, 0, 0, 0, 156, 157, 102, 248, 0, 0, 0, 0, 0, 0, 0, 225, 0, 158, 159, 160, 161, 162, 163, 392, 156, 157, 102, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 162, 163, 0, 0, 0, 0, 0, 0, 0, 306, 230, 0, 0, 0, 0, 162, 163, 0, 0, 0, 243, 0, 0, 0, 0, 230, 162, 163, 245, 0, 246, 55, 45, 0, 84, 0, 60, 0, 89, 0, 243, 46, 0, 0, 0, 0, 162, 163, 275, 0, 86, 0, 0, 0, 0, 0, 0, 56, 57, 58, 49, 0, 0, 87, 0, 0, 0, 0, 88, 0, 61, 83, 0, 0, 81, 0, 51, 85, 0, 0, 62, 0, 122, 0, 0, 82, 158, 159, 160, 161, 0, 0, 0, 156, 157, 102, 158, 159, 160, 161, 0, 0, 0, 156, 157, 102, 72, 0, 0, 0, 69, 0, 0, 65, 0, 0, 67, 71, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 0, 68, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 73, 0, 0, 151, 0, 70, 0, 0, 0, 162, 163, 169, 0, 243, 0, 0, 0, 0, 0, 162, 163 }; short yypact[]={ -1000, 27, 436, 849,-1000,-1000,-1000,-1000,-1000,-1000, 424,-1000,-1000,-1000,-1000,-1000,-1000, 96, 407, 211, 207, 206, 199, 198, 95, 196, -1, 52,-1000,-1000, -1000,-1000,1084,-1000,-1000,-1000, 34,-1000,-1000,-1000, -1000,-1000,-1000,-1000, 407,-1000,-1000,-1000,-1000,-1000, 325,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, -1000,-1000,-1000,-1000, 755, 321,1153, 321, 191,-1000, -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000, -1000,-1000,-1000, 407, 407, 407, 407,-1000, 407,-1000, 300,-1000,-1000, 407, -9, 407, 407, 407, 318,-1000, -1000,-1000, 407, 179,-1000,-1000,-1000,-1000, 410, 320, -1000,-1000,-1000, 319,-1000,-1000,-1000,-1000, 52, 407, 407, 318,-1000,-1000, 224, 317, 421,-1000, 314, 549, 770, 770, 312, 420, 407, 306, 407,-1000,-1000,-1000, -1000,1018,-1000,-1000, 43,1163,-1000,-1000,-1000,-1000, -1000,-1000,-1000,-1000,-1000,1018, 168, 169,-1000,-1000, 992, 992,-1000,-1000,-1000,-1000,1038,-1000,-1000,-1000, 300, 300, 407,-1000,-1000, 90, 282, 95,-1000, 282, -1000,-1000,-1000, 407,-1000, 405,-1000, 302,1157, -10, 52, -29, 407, 420, 770,1007,-1000, 407,-1000,-1000, -1000,-1000,-1000, 770,-1000, 770, 343,-1000, 770,-1000, 193,-1000, 4, 420,-1000, 770,-1000,-1000,-1000, 770, 770,-1000, 4,-1000, 770,-1000,-1000, 95, 420,-1000, 902, 170,-1000,1163,-1000,-1000,-1000, 526,-1000,1163, 1163,1163,1163,1163, -34, 868, 131, 408,-1000,-1000, 408, 408,-1000, 165, 161, 157, 4,-1000, 992,-1000, -1000,-1000,-1000,-1000, 43,-1000,-1000,-1000, 300, 282, -1000, 162,-1000,-1000,-1000, 34,-1000, 407,-1000, 147, -1000, 79,-1000,-1000, 405, 409,-1000, 407,-1000,-1000, 117,-1000, 216,-1000, 642, 4, 967,-1000, 4, 274, 67, 151, 4, 407, 609,-1000, 921, 770, 770, 770, 770, 770, 770, 770, 770, 770, 770,-1000,-1000,-1000, -1000,-1000,-1000,-1000, 568, 138, -41, 714, 26, 281, 112,-1000,-1000,-1000,1018, 736, 4,-1000,-1000, 66, -34, -34, -34, 287,-1000, 408, 131, 136, 131, 992, 992, 992, 121, 119, 115,-1000,-1000,-1000, 34,-1000, 88,-1000, 108, 850,-1000,-1000, 407,-1000, 405, 113, 86,-1000, 48,-1000, 107,-1000,-1000, 407, 770, 95, 348,-1000, 273, 256, 770, 770,-1000, 420,-1000, -35, -41, -41, -41, 181, 502, 502, 659, 714, 278,-1000, 770,-1000, 420, 420, 95,-1000, 43,-1000,-1000, 408, -1000,-1000,-1000,-1000,-1000,-1000, 992, 992, 992,-1000, -1000,-1000, 850,-1000,-1000, -24,-1000,-1000,-1000,-1000, 405,-1000, 409, 409, 407,-1000, 4, 407,-1000,-1000, -1000, 770, 268, 4, 91, 266, 76,-1000, 770, 267, 255, 266, 257, 242, 241,-1000, 850, 53, 560, 229, -1000,-1000,-1000,-1000, 92,-1000,-1000, 420,-1000,-1000, 4,-1000, 770,-1000,-1000,-1000,-1000, 4,-1000, 560, -1000,-1000, 12, 536,-1000,-1000,-1000,-1000, 770,-1000, -1000,-1000,-1000, 75, 60, 4,-1000, 560,-1000, 420, 770,-1000,-1000,-1000, 4 }; short yypgo[]={ 0, 635, 633, 14, 628, 198, 42, 13, 35, 622, 620, 618, 11, 0, 617, 615, 614, 613, 8, 19, 612, 611, 609, 37, 605, 31, 604, 603, 29, 32, 24, 22, 344, 10, 601, 52, 425, 1, 4, 18, 44, 259, 9, 2, 3, 16, 17, 28, 599, 590, 34, 36, 39, 580, 579, 578, 576, 575, 910, 130, 564, 553, 551, 546, 537, 535, 529, 40, 528, 20, 21, 51, 6, 46, 526, 38, 523, 521, 520, 519, 5, 25, 23, 517, 516, 26, 7, 33, 514, 513, 509, 15, 505, 430, 504, 501, 499, 498, 494, 493, 307, 487, 483, 480, 477, 472, 471, 27, 461, 442, 12 }; short yyr1[]={ 0, 1, 1, 54, 54, 54, 54, 54, 54, 54, 2, 55, 55, 55, 55, 55, 55, 59, 51, 32, 52, 52, 25, 25, 25, 26, 26, 33, 33, 17, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 11, 11, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 7, 7, 7, 49, 49, 49, 49, 50, 50, 60, 60, 61, 61, 62, 62, 73, 53, 53, 63, 63, 74, 75, 76, 77, 79, 78, 78, 80, 80, 44, 44, 44, 44, 66, 66, 81, 81, 68, 68, 82, 35, 18, 18, 19, 19, 70, 70, 84, 83, 83, 85, 85, 42, 42, 86, 86, 3, 64, 64, 87, 90, 88, 89, 89, 91, 91, 12, 65, 65, 92, 20, 20, 67, 21, 21, 22, 22, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 13, 13, 14, 14, 14, 14, 14, 14, 36, 36, 36, 36, 31, 39, 39, 43, 43, 47, 47, 47, 47, 47, 47, 46, 48, 48, 48, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 57, 57, 57, 57, 57, 57, 57, 94, 23, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 4, 95, 96, 96, 96, 96, 69, 69, 34, 24, 24, 45, 45, 15, 15, 27, 27, 58, 71, 72, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 106, 106, 106, 101, 108, 108, 108, 103, 103, 100, 100, 109, 109, 110, 110, 110, 110, 110, 110, 16, 102, 104, 105, 105, 28, 28, 6, 6, 29, 29, 29, 30, 30, 30, 30, 30, 30, 5, 5, 5, 5, 107 }; short yyr2[]={ 0, 0, 3, 2, 2, 2, 3, 3, 2, 1, 1, 3, 3, 4, 4, 5, 3, 0, 1, 1, 0, 1, 0, 2, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 5, 6, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 4, 6, 3, 4, 5, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 0, 6, 0, 0, 0, 2, 3, 1, 3, 1, 2, 1, 1, 1, 3, 1, 1, 1, 3, 3, 2, 1, 5, 1, 3, 0, 3, 0, 2, 3, 1, 3, 1, 1, 1, 3, 1, 3, 3, 4, 0, 2, 1, 3, 1, 3, 1, 1, 2, 4, 1, 3, 0, 0, 1, 1, 3, 1, 3, 1, 1, 1, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 5, 5, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 1, 1, 1, 3, 1, 1, 3, 3, 3, 3, 2, 3, 1, 7, 2, 2, 6, 2, 2, 5, 3, 4, 5, 2, 1, 1, 10, 1, 3, 4, 3, 3, 1, 1, 3, 3, 7, 7, 0, 1, 3, 1, 3, 1, 2, 1, 1, 1, 3, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 3, 4, 4, 2, 3, 1, 3, 3, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 3, 1, 3, 1, 1, 1, 2, 2, 2, 1, 3, 3, 4, 4, 1, 3, 1, 5, 1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 5, 5, 5, 0 }; short yychk[]={ -1000, -1, -54, -2, 256, 3, 1, -55, -56, -57, 18, 37, 4, 60, 23, 69, 44, -8, 40, -11, -49, -60, -61, -62, -63, -64, -65, 66, 43, 57, -93, 33, -94, 36, 35, 39, -9, 27, 42, 53, 41, 30, 50, 55, -95, 20, 29, -96, -97, 48, -34, 64, -15, 49, -10, 19, 45, 46, 47, -98, 24, 58, 68, 52, 63, 28, 34, 31, 54, 25, 72, 32, 21, 67, -99,-101,-102,-104,-105,-106, -108, 62, 73, 59, 22, 65, 38, 51, 56, 26, -17, 5, -58, -59, -59, -59, -59, 44, -69, 78, -51, -32, 14, 78, -69, 78, 78, 78, 78, -69, 78, -92, 83, -66, -81, -32, -50, 85, 83, -67, -58, -93, 70, -58, -58, -58, -7, 82, -67, -67, -67, -67, -74, -67, -36, -32, -58, -58, -58, 74, -58, -58, -58, -58, -58, -58, -58,-100, -41, 82, 84, 74, -36, -47, -40, -13, 12, 13, 5, 6, 7, 8, 80, 81,-100, 74,-100,-103, -41, 82, -100, 78, -58, -58, -58, -58, -58, -52, -51, -52, -51, -51, -59, -32, -25, 74, -32, -50, -35, -32, -32, -32, -73, 74, -75, -76, -87, -88, -90, -32, 78, 14, 74, -71, 74, -71, -35, -50, -32, -32, -73, -75, -87, 76, -31, 74, -4, 6, 74, 75, -24, -45, -37, 82, -38, 74, -46, -36, -47, -13, 90, -39, -37, -39, 74, -3, 6, -32, 74, -32, -40,-109, -41, 74,-110, 82, 84, -16, 15, -13, 82, 83, 84, 85, -40, -40, -28, 78, -6, -36, 74, 78, -29, -38, -5, -30, -37, -46, 74, -29, -107,-107,-107,-107, -40, 82, -25, -25, -51, -67, 75, -26, -33, -32, 82, -70, 74, -69, -70, -53, -36, -19, -18, -36, 74, 74, -8, 83, -81, 83, -68, -82, -32, -3, -37, -37, 74, -35, -37, -21, -39, -22, -37, 71, -37, 75, 78, -13, 82, 83, 84, -14, 89, 88, 87, 86, 85, 91, 93, 92, 95, 94, 96, -3, -37, -38, -37, -37, -37, -69, -86, -3, 75, 75, 78, -40, -37, 82, 84, -40, -40, -40, -40, -40, 75, 78, -28, -28, -28, 78, 78, 78, -38, -5, -30,-107,-107, -25, -70, 75, 78, -7, -83, -84, -35, 75, 78, 83, 78, -19, -89, -91, -12, 14, -20, -32, 75, 78, 76, -72, 75, -72, 82, 75, 77, 78, -32, 75, -45, -37, -37, -37, -37, -37, -37, -37, -37, -37, -37, 75, 78, 75, 74, 78, 75,-110, -40, 75, -6, 78, -38, -5, -38, -5, -38, -5, 78, 78, 78, -7, -33, 75, 78, -85, -42, -37, 82, -36, -77, -18, 78, 75, 78, 81, 78, -82, -37, -69, 70, 75, -31, 74, -39, -37, -3, -38, -86, -3, -69, -23, -32, -38, -23, -23, -23, -85, 77, -78, -79, -23, -91, -12, -32, -23, -32, -72, 75, 78, 75, 75, -37, 75, 76, 75, 75, 75, -42, -37, 83, 78, -80, -44, -43, -13, -46, -48, -32, -47, 74, 11, 10, 9, 75, -3, -27, -37, -80, 82, -43, 78, 78, -44, -43, -3, -37 }; short yydef[]={ 1, -2, 0, 0, 9, 10, 2, 3, 4, 5, 0, 225, 8, 17, 17, 17, 17, 214, 0, 30, -2, 32, 33, 34, -2, 36, 37, 38, 40, 129, 188, 225, 0, 225, 225, 225, 57, 129, 129, 129, 129, 77, 129, 124, 0, 225, 225, 200, 201, 225, 203, 225, 225, 225, 45, 209, 225, 225, 225, 228, 225, 221, 222, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 0, 0, 0, 0, 241, 225, 225, 225, 225, 225, 244, 245, 246, 248, 249, 250, 6, 29, 7, 20, 20, 0, 0, 17, 0, 215, 22, 18, 19, 0, 0, 215, 0, 0, 0, 79, 117, 125, 0, 39, 90, 92, 93, 64, 0, 0, 226, 190, 191, 0, 193, 194, 44, 226, 0, 0, 0, 0, 79, 117, 0, 159, 0, 199, 0, 0, 164, 164, 0, 0, 0, 0, 0, 229, -2, 231, 232, 0, 180, 181, 0, 0, 168, 169, 170, 171, 172, 173, 151, 152, 233, 0, 234, 235, -2, 252, 239, 0, 285, 285, 285, 285, 0, 11, 21, 12, 22, 22, 0, 129, 16, 0, 102, 214, 63, 102, 67, 69, 71, 0, 76, 0, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 66, 68, 70, 75, 114, 0, 160, -2, 0, 208, 0, 204, 0, 217, 219, 0, 134, 0, 136, 137, 138, 0, 0, 206, 165, 207, 0, 210, 113, -2, 0, 216, 257, 0, 178, 0, 255, 258, 259, 0, 263, 0, 0, 0, 0, 0, 186, 257, 236, 0, 268, 270, 0, 0, 240, -2, 273, 274, 0, -2, 0, 242, 243, 247, 264, 265, 285, 285, 13, 14, 22, 102, 23, 0, 25, 27, 28, 57, 104, 0, 97, 0, 73, 0, 100, 98, 0, 0, 118, 0, 91, 65, 0, 94, 0, 227, 0, 227, 0, 61, 197, 0, 0, 131, -2, 0, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 153, 154, 155, 156, 157, 158, 220, 0, 134, 143, 149, 0, 0, 0, 111, -2, 254, 0, 0, 260, 261, 262, 182, 183, 184, 185, 187, 253, 0, 238, 0, 237, 0, 0, 0, 134, 0, 0, 266, 267, 15, 57, 24, 0, 43, 0, 0, 62, 72, 0, 80, 0, 0, 0, 119, 121, 123, 126, 127, 41, 0, 0, 214, 0, 58, 0, 161, 164, 0, 198, 0, 218, 139, 140, 141, 142, -2, 145, 146, 147, 148, 150, 135, 0, 195, 0, 0, 214, 256, 257, 179, 269, 0, -2, 276, -2, 278, -2, 280, 0, 0, 0, 42, 26, 103, 0, 105, 107, 110, 109, 74, 81, 101, 0, 116, 0, 0, 0, 95, 96, 0, 192, 227, 162, 164, 0, 133, 0, 134, 0, 112, 0, 0, 159, -2, 0, 0, 0, 106, 0, 0, 0, 0, 120, 122, 128, 189, 0, 59, 163, 0, 174, 212, 213, 271, 0, 282, 283, 284, 108, 110, 78, 0, 82, 84, 86, 0, 88, 89, 166, 167, 0, 175, 176, 177, 99, 0, 196, 223, 83, 0, 87, 0, 0, 85, 86, 202, 224 }; # ifdef YYDEBUG # include "y.debug" # endif # define YYFLAG -1000 # define YYERROR goto yyerrlab # define YYACCEPT return(0) # define YYABORT return(1) /* parser for yacc output */ #ifdef YYDEBUG int yydebug = 0; /* 1 for debugging */ #endif YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */ int yychar = -1; /* current input token number */ int yynerrs = 0; /* number of errors */ short yyerrflag = 0; /* error recovery flag */ yyparse() { short yys[YYMAXDEPTH]; int yyj, yym; register YYSTYPE *yypvt; register int yystate, yyn; register short *yyps; register YYSTYPE *yypv; register short *yyxi; yystate = 0; yychar = -1; yynerrs = 0; yyerrflag = 0; yyps= &yys[-1]; yypv= &yyv[-1]; yystack: /* put a state and value onto the stack */ #ifdef YYDEBUG if(yydebug >= 3) if(yychar < 0 || yytoknames[yychar] == 0) printf("char %d in %s", yychar, yystates[yystate]); else printf("%s in %s", yytoknames[yychar], yystates[yystate]); #endif if( ++yyps >= &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); } *yyps = yystate; ++yypv; *yypv = yyval; yynewstate: yyn = yypact[yystate]; if(yyn <= YYFLAG) goto yydefault; /* simple state */ if(yychar<0) { yychar = yylex(); #ifdef YYDEBUG if(yydebug >= 2) { if(yychar <= 0) printf("lex EOF\n"); else if(yytoknames[yychar]) printf("lex %s\n", yytoknames[yychar]); else printf("lex (%c)\n", yychar); } #endif if(yychar < 0) yychar = 0; } if((yyn += yychar) < 0 || yyn >= YYLAST) goto yydefault; if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */ yychar = -1; yyval = yylval; yystate = yyn; if( yyerrflag > 0 ) --yyerrflag; goto yystack; } yydefault: /* default state action */ if( (yyn=yydef[yystate]) == -2 ) { if(yychar < 0) { yychar = yylex(); #ifdef YYDEBUG if(yydebug >= 2) if(yychar < 0) printf("lex EOF\n"); else printf("lex %s\n", yytoknames[yychar]); #endif if(yychar < 0) yychar = 0; } /* look through exception table */ for(yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate); yyxi += 2 ) ; /* VOID */ while( *(yyxi+=2) >= 0 ){ if( *yyxi == yychar ) break; } if( (yyn = yyxi[1]) < 0 ) return(0); /* accept */ } if( yyn == 0 ){ /* error */ /* error ... attempt to resume parsing */ switch( yyerrflag ){ case 0: /* brand new error */ #ifdef YYDEBUG yyerror("syntax error\n%s", yystates[yystate]); if(yytoknames[yychar]) yyerror("saw %s\n", yytoknames[yychar]); else if(yychar >= ' ' && yychar < '\177') yyerror("saw `%c'\n", yychar); else if(yychar == 0) yyerror("saw EOF\n"); else yyerror("saw char 0%o\n", yychar); #else yyerror( "syntax error" ); #endif yyerrlab: ++yynerrs; case 1: case 2: /* incompletely recovered error ... try again */ yyerrflag = 3; /* find a state where "error" is a legal shift action */ while ( yyps >= yys ) { yyn = yypact[*yyps] + YYERRCODE; if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){ yystate = yyact[yyn]; /* simulate a shift of "error" */ goto yystack; } yyn = yypact[*yyps]; /* the current yyps has no shift onn "error", pop stack */ #ifdef YYDEBUG if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] ); #endif --yyps; --yypv; } /* there is no state on the stack with an error shift ... abort */ yyabort: return(1); case 3: /* no shift yet; clobber input char */ #ifdef YYDEBUG if( yydebug ) { printf("error recovery discards "); if(yytoknames[yychar]) printf("%s\n", yytoknames[yychar]); else if(yychar >= ' ' && yychar < '\177') printf("`%c'\n", yychar); else if(yychar == 0) printf("EOF\n"); else printf("char 0%o\n", yychar); } #endif if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */ yychar = -1; goto yynewstate; /* try again in the same state */ } } /* reduction by production yyn */ #ifdef YYDEBUG if(yydebug) { char *s; printf("reduce %d in:\n\t", yyn); for(s = yystates[yystate]; *s; s++) { putchar(*s); if(*s == '\n' && *(s+1)) putchar('\t'); } } #endif yyps -= yyr2[yyn]; yypvt = yypv; yypv -= yyr2[yyn]; yyval = yypv[1]; yym=yyn; /* consult goto table to find next state */ yyn = yyr1[yyn]; yyj = yypgo[yyn] + *yyps + 1; if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]]; switch(yym){ case 3: # line 200 "gram.in" { lastwasbranch = NO; } break; case 5: # line 203 "gram.in" { /* forbid further statement function definitions... */ if (parstate == INDATA && laststfcn != thisstno && !(bugwarn & 2)) parstate = INEXEC; thisstno++; if(yypvt[-1].labval && (yypvt[-1].labval->labelno==dorange)) enddo(yypvt[-1].labval->labelno); if(lastwasbranch && thislabel==NULL) warn("statement cannot be reached"); lastwasbranch = thiswasbranch; thiswasbranch = NO; if(yypvt[-1].labval) { if(yypvt[-1].labval->labtype == LABFORMAT) err("label already that of a format"); else yypvt[-1].labval->labtype = LABEXEC; } } break; case 6: # line 224 "gram.in" { doinclude( yypvt[-0].charpval ); } break; case 7: # line 226 "gram.in" { lastwasbranch = NO; endproc(); } break; case 8: # line 228 "gram.in" { execerr("unclassifiable statement", CNULL); flline(); } break; case 9: # line 230 "gram.in" { flline(); needkwd = NO; inioctl = NO; yyerrok; yyclearin; } break; case 10: # line 235 "gram.in" { #ifdef SDB if( sdbflag && parstate >= INDATA ) { # ifdef UCBVAXASM p2pass( stabdline(N_SLINE, lineno) ); # else char buff[10]; sprintf(buff,"LL%d", ++dbglabel); p2pass( stabline(0, N_SLINE, lineno, buff) ); p2pi("LL%d:\n", dbglabel); # endif } #endif if(yystno != 0) { yyval.labval = thislabel = mklabel(yystno); if( ! headerdone ) puthead(CNULL, procclass); if(thislabel->labdefined) execerr("label %s already defined", convic(thislabel->stateno) ); else { if(thislabel->blklevel!=0 && thislabel->blklevel<blklevel && thislabel->labtype!=LABFORMAT) warn1("there is a branch to label %s from outside block", convic( (ftnint) (thislabel->stateno) ) ); thislabel->blklevel = blklevel; thislabel->labdefined = YES; if(thislabel->labtype != LABFORMAT) putlabel(thislabel->labelno); } } else yyval.labval = thislabel = NULL; } break; case 11: # line 274 "gram.in" {startproc(yypvt[-0].extval, CLMAIN); } break; case 12: # line 276 "gram.in" { if(yypvt[-0].extval) NO66("named BLOCKDATA"); startproc(yypvt[-0].extval, CLBLOCK); } break; case 13: # line 279 "gram.in" { entrypt(CLPROC, TYSUBR, (ftnint) 0, yypvt[-1].extval, yypvt[-0].chval); } break; case 14: # line 281 "gram.in" { entrypt(CLPROC, TYUNKNOWN, (ftnint) 0, yypvt[-1].extval, yypvt[-0].chval); } break; case 15: # line 283 "gram.in" { entrypt(CLPROC, yypvt[-4].ival, varleng, yypvt[-1].extval, yypvt[-0].chval); } break; case 16: # line 285 "gram.in" { if(parstate==OUTSIDE || procclass==CLMAIN || procclass==CLBLOCK) execerr("misplaced entry statement", CNULL); entrypt(CLENTRY, 0, (ftnint) 0, yypvt[-1].extval, yypvt[-0].chval); } break; case 17: # line 293 "gram.in" { newproc(); } break; case 18: # line 297 "gram.in" { yyval.extval = newentry(yypvt[-0].namval); } break; case 19: # line 301 "gram.in" { yyval.namval = mkname(toklen, token); } break; case 20: # line 304 "gram.in" { yyval.extval = NULL; } break; case 22: # line 309 "gram.in" { yyval.chval = 0; } break; case 23: # line 311 "gram.in" { NO66(" () argument list"); yyval.chval = 0; } break; case 24: # line 314 "gram.in" {yyval.chval = yypvt[-1].chval; } break; case 25: # line 318 "gram.in" { yyval.chval = (yypvt[-0].namval ? mkchain(yypvt[-0].namval,CHNULL) : CHNULL ); } break; case 26: # line 320 "gram.in" { if(yypvt[-0].namval) yypvt[-2].chval = yyval.chval = hookup(yypvt[-2].chval, mkchain(yypvt[-0].namval,CHNULL)); } break; case 27: # line 324 "gram.in" { if(yypvt[-0].namval->vstg!=STGUNKNOWN && yypvt[-0].namval->vstg!=STGARG) dclerr("name declared as argument after use", yypvt[-0].namval); yypvt[-0].namval->vstg = STGARG; } break; case 28: # line 329 "gram.in" { NO66("altenate return argument"); yyval.namval = 0; substars = YES; } break; case 29: # line 336 "gram.in" { char *s; s = copyn(toklen+1, token); s[toklen] = '\0'; yyval.charpval = s; } break; case 38: # line 352 "gram.in" { NO66("SAVE statement"); saveall = YES; } break; case 39: # line 355 "gram.in" { NO66("SAVE statement"); } break; case 40: # line 357 "gram.in" { fmtstmt(thislabel); setfmt(thislabel); } break; case 41: # line 359 "gram.in" { NO66("PARAMETER statement"); } break; case 42: # line 363 "gram.in" { settype(yypvt[-3].namval, yypvt[-5].ival, yypvt[-0].ival); if(ndim>0) setbound(yypvt[-3].namval,ndim,dims); } break; case 43: # line 367 "gram.in" { settype(yypvt[-2].namval, yypvt[-4].ival, yypvt[-0].ival); if(ndim>0) setbound(yypvt[-2].namval,ndim,dims); } break; case 44: # line 373 "gram.in" { varleng = yypvt[-0].ival; } break; case 45: # line 377 "gram.in" { varleng = (yypvt[-0].ival<0 || yypvt[-0].ival==TYLONG ? 0 : typesize[yypvt[-0].ival]); } break; case 46: # line 380 "gram.in" { yyval.ival = TYLONG; } break; case 47: # line 381 "gram.in" { yyval.ival = TYREAL; } break; case 48: # line 382 "gram.in" { ++complex_seen; yyval.ival = TYCOMPLEX; } break; case 49: # line 383 "gram.in" { yyval.ival = TYDREAL; } break; case 50: # line 384 "gram.in" { ++dcomplex_seen; NOEXT("DOUBLE COMPLEX statement"); yyval.ival = TYDCOMPLEX; } break; case 51: # line 385 "gram.in" { yyval.ival = TYLOGICAL; } break; case 52: # line 386 "gram.in" { NO66("CHARACTER statement"); yyval.ival = TYCHAR; } break; case 53: # line 387 "gram.in" { yyval.ival = TYUNKNOWN; } break; case 54: # line 388 "gram.in" { yyval.ival = TYUNKNOWN; } break; case 55: # line 389 "gram.in" { NOEXT("AUTOMATIC statement"); yyval.ival = - STGAUTO; } break; case 56: # line 390 "gram.in" { NOEXT("STATIC statement"); yyval.ival = - STGBSS; } break; case 57: # line 394 "gram.in" { yyval.ival = varleng; } break; case 58: # line 396 "gram.in" { expptr p; p = yypvt[-1].expval; NO66("length specification *n"); if( ! ISICON(p) || p->constblock.Const.ci<0 ) { yyval.ival = 0; dclerr("length must be a positive integer constant", PNULL); } else yyval.ival = p->constblock.Const.ci; } break; case 59: # line 409 "gram.in" { NO66("length specification *(*)"); yyval.ival = -1; } break; case 60: # line 413 "gram.in" { incomm( yyval.extval = comblock(0, CNULL) , yypvt[-0].namval ); } break; case 61: # line 415 "gram.in" { yyval.extval = yypvt[-1].extval; incomm(yypvt[-1].extval, yypvt[-0].namval); } break; case 62: # line 417 "gram.in" { yyval.extval = yypvt[-2].extval; incomm(yypvt[-2].extval, yypvt[-0].namval); } break; case 63: # line 419 "gram.in" { incomm(yypvt[-2].extval, yypvt[-0].namval); } break; case 64: # line 423 "gram.in" { yyval.extval = comblock(0, CNULL); } break; case 65: # line 425 "gram.in" { yyval.extval = comblock(toklen, token); } break; case 66: # line 429 "gram.in" { setext(yypvt[-0].namval); } break; case 67: # line 431 "gram.in" { setext(yypvt[-0].namval); } break; case 68: # line 435 "gram.in" { NO66("INTRINSIC statement"); setintr(yypvt[-0].namval); } break; case 69: # line 437 "gram.in" { setintr(yypvt[-0].namval); } break; case 72: # line 445 "gram.in" { struct Equivblock *p; if(nequiv >= maxequiv) many("equivalences", 'q', maxequiv); p = & eqvclass[nequiv++]; p->eqvinit = NO; p->eqvbottom = 0; p->eqvtop = 0; p->equivs = yypvt[-1].eqvval; } break; case 73: # line 458 "gram.in" { yyval.eqvval=ALLOC(Eqvchain); yyval.eqvval->eqvitem.eqvlhs = (struct Primblock *)yypvt[-0].expval; } break; case 74: # line 462 "gram.in" { yyval.eqvval=ALLOC(Eqvchain); yyval.eqvval->eqvitem.eqvlhs = (struct Primblock *) yypvt[-0].expval; yyval.eqvval->eqvnextp = yypvt[-2].eqvval; } break; case 77: # line 473 "gram.in" { if(parstate == OUTSIDE) { newproc(); startproc(PNULL, CLMAIN); } if(parstate < INDATA) { enddcl(); parstate = INDATA; } } break; case 78: # line 487 "gram.in" { ftnint junk; if(nextdata(&junk,&junk) != NULL) err("too few initializers"); frdata(yypvt[-4].chval); frrpl(); } break; case 79: # line 495 "gram.in" { frchain(&datastack); curdtp = 0; } break; case 80: # line 497 "gram.in" { pop_datastack(); } break; case 81: # line 499 "gram.in" { toomanyinit = NO; } break; case 84: # line 504 "gram.in" { dataval(PNULL, yypvt[-0].expval); } break; case 85: # line 506 "gram.in" { dataval(yypvt[-2].expval, yypvt[-0].expval); } break; case 87: # line 511 "gram.in" { if( yypvt[-1].ival==OPMINUS && ISCONST(yypvt[-0].expval) ) consnegop(yypvt[-0].expval); yyval.expval = yypvt[-0].expval; } break; case 92: # line 524 "gram.in" { int k; yypvt[-0].namval->vsave = YES; k = yypvt[-0].namval->vstg; if( ! ONEOF(k, M(STGUNKNOWN)|M(STGBSS)|M(STGINIT)) ) dclerr("can only save static variables", yypvt[-0].namval); } break; case 93: # line 531 "gram.in" { yypvt[-0].extval->extsave = 1; } break; case 96: # line 539 "gram.in" { if(yypvt[-2].namval->vclass == CLUNKNOWN) make_param(yypvt[-2].namval, yypvt[-0].expval); /* was... { $1->vclass = CLPARAM; ( (struct Paramblock *) ($1) )->paramval = $3; } */ else dclerr("cannot make %s parameter", yypvt[-2].namval); } break; case 97: # line 551 "gram.in" { if(ndim>0) setbound(yypvt[-1].namval, ndim, dims); } break; case 98: # line 555 "gram.in" { Namep np; np = ( (struct Primblock *) yypvt[-0].expval) -> namep; vardcl(np); if(np->vstg == STGCOMMON) extsymtab[np->vardesc.varno].extinit = YES; else if(np->vstg==STGEQUIV) eqvclass[np->vardesc.varno].eqvinit = YES; else if(np->vstg!=STGINIT && np->vstg!=STGBSS) dclerr("inconsistent storage classes", np); yyval.chval = mkchain(yypvt[-0].expval, CHNULL); } break; case 99: # line 567 "gram.in" { chainp p; struct Impldoblock *q; pop_datastack(); q = ALLOC(Impldoblock); q->tag = TIMPLDO; (q->varnp = (Namep) (yypvt[-1].chval->datap))->vimpldovar = !(bugwarn & 2); p = yypvt[-1].chval->nextp; if(p) { q->implb = (expptr)(p->datap); p = p->nextp; } if(p) { q->impub = (expptr)(p->datap); p = p->nextp; } if(p) { q->impstep = (expptr)(p->datap); p = p->nextp; } frchain( & (yypvt[-1].chval) ); yyval.chval = mkchain(q, CHNULL); q->datalist = hookup(yypvt[-3].chval, yyval.chval); } break; case 100: # line 583 "gram.in" { if (!datastack) curdtp = 0; datastack = mkchain((tagptr)curdtp, datastack); curdtp = yypvt[-0].chval; curdtelt = 0; } break; case 101: # line 589 "gram.in" { yyval.chval = hookup(yypvt[-2].chval, yypvt[-0].chval); } break; case 102: # line 593 "gram.in" { ndim = 0; } break; case 104: # line 597 "gram.in" { ndim = 0; } break; case 107: # line 602 "gram.in" { if(ndim == maxdim) err("too many dimensions"); else if(ndim < maxdim) { dims[ndim].lb = 0; dims[ndim].ub = yypvt[-0].expval; } ++ndim; } break; case 108: # line 611 "gram.in" { if(ndim == maxdim) err("too many dimensions"); else if(ndim < maxdim) { dims[ndim].lb = yypvt[-2].expval; dims[ndim].ub = yypvt[-0].expval; } ++ndim; } break; case 109: # line 622 "gram.in" { yyval.expval = 0; } break; case 111: # line 627 "gram.in" { nstars = 1; labarray[0] = yypvt[-0].labval; } break; case 112: # line 629 "gram.in" { if(nstars < MAXLABLIST) labarray[nstars++] = yypvt[-0].labval; } break; case 113: # line 633 "gram.in" { yyval.labval = execlab( convci(toklen, token) ); } break; case 114: # line 637 "gram.in" { NO66("IMPLICIT statement"); } break; case 117: # line 644 "gram.in" { needkwd = 1; } break; case 118: # line 645 "gram.in" { vartype = yypvt[-0].ival; } break; case 121: # line 653 "gram.in" { setimpl(vartype, varleng, yypvt[-0].ival, yypvt[-0].ival); } break; case 122: # line 655 "gram.in" { setimpl(vartype, varleng, yypvt[-2].ival, yypvt[-0].ival); } break; case 123: # line 659 "gram.in" { if(toklen!=1 || token[0]<'a' || token[0]>'z') { dclerr("implicit item must be single letter", PNULL); yyval.ival = 0; } else yyval.ival = token[0]; } break; case 126: # line 673 "gram.in" { if(yypvt[-2].namval->vclass == CLUNKNOWN) { yypvt[-2].namval->vclass = CLNAMELIST; yypvt[-2].namval->vtype = TYINT; yypvt[-2].namval->vstg = STGINIT; yypvt[-2].namval->varxptr.namelist = yypvt[-0].chval; yypvt[-2].namval->vardesc.varno = ++lastvarno; } else dclerr("cannot be a namelist name", yypvt[-2].namval); } break; case 127: # line 687 "gram.in" { yyval.chval = mkchain(yypvt[-0].namval, CHNULL); } break; case 128: # line 689 "gram.in" { yyval.chval = hookup(yypvt[-2].chval, mkchain(yypvt[-0].namval, CHNULL)); } break; case 129: # line 693 "gram.in" { switch(parstate) { case OUTSIDE: newproc(); startproc(PNULL, CLMAIN); case INSIDE: parstate = INDCL; case INDCL: break; default: dclerr("declaration among executables", PNULL); } } break; case 130: # line 706 "gram.in" { yyval.chval = 0; } break; case 132: # line 711 "gram.in" { yyval.chval = mkchain(yypvt[-0].expval, CHNULL); } break; case 133: # line 713 "gram.in" { yyval.chval = hookup(yypvt[-2].chval, mkchain(yypvt[-0].expval,CHNULL) ); } break; case 135: # line 718 "gram.in" { yyval.expval = yypvt[-1].expval; } break; case 139: # line 725 "gram.in" { yyval.expval = mkexpr(yypvt[-1].ival, yypvt[-2].expval, yypvt[-0].expval); } break; case 140: # line 727 "gram.in" { yyval.expval = mkexpr(OPSTAR, yypvt[-2].expval, yypvt[-0].expval); } break; case 141: # line 729 "gram.in" { yyval.expval = mkexpr(OPSLASH, yypvt[-2].expval, yypvt[-0].expval); } break; case 142: # line 731 "gram.in" { yyval.expval = mkexpr(OPPOWER, yypvt[-2].expval, yypvt[-0].expval); } break; case 143: # line 733 "gram.in" { if(yypvt[-1].ival == OPMINUS) yyval.expval = mkexpr(OPNEG, yypvt[-0].expval, ENULL); else yyval.expval = yypvt[-0].expval; } break; case 144: # line 738 "gram.in" { yyval.expval = mkexpr(yypvt[-1].ival, yypvt[-2].expval, yypvt[-0].expval); } break; case 145: # line 740 "gram.in" { NO66(".EQV. operator"); yyval.expval = mkexpr(OPEQV, yypvt[-2].expval,yypvt[-0].expval); } break; case 146: # line 743 "gram.in" { NO66(".NEQV. operator"); yyval.expval = mkexpr(OPNEQV, yypvt[-2].expval, yypvt[-0].expval); } break; case 147: # line 746 "gram.in" { yyval.expval = mkexpr(OPOR, yypvt[-2].expval, yypvt[-0].expval); } break; case 148: # line 748 "gram.in" { yyval.expval = mkexpr(OPAND, yypvt[-2].expval, yypvt[-0].expval); } break; case 149: # line 750 "gram.in" { yyval.expval = mkexpr(OPNOT, yypvt[-0].expval, ENULL); } break; case 150: # line 752 "gram.in" { NO66("concatenation operator //"); yyval.expval = mkexpr(OPCONCAT, yypvt[-2].expval, yypvt[-0].expval); } break; case 151: # line 756 "gram.in" { yyval.ival = OPPLUS; } break; case 152: # line 757 "gram.in" { yyval.ival = OPMINUS; } break; case 153: # line 760 "gram.in" { yyval.ival = OPEQ; } break; case 154: # line 761 "gram.in" { yyval.ival = OPGT; } break; case 155: # line 762 "gram.in" { yyval.ival = OPLT; } break; case 156: # line 763 "gram.in" { yyval.ival = OPGE; } break; case 157: # line 764 "gram.in" { yyval.ival = OPLE; } break; case 158: # line 765 "gram.in" { yyval.ival = OPNE; } break; case 159: # line 769 "gram.in" { yyval.expval = mkprim(yypvt[-0].namval, PNULL, CHNULL); } break; case 160: # line 771 "gram.in" { NO66("substring operator :"); yyval.expval = mkprim(yypvt[-1].namval, PNULL, yypvt[-0].chval); } break; case 161: # line 774 "gram.in" { yyval.expval = mkprim(yypvt[-3].namval, mklist(yypvt[-1].chval), CHNULL); } break; case 162: # line 776 "gram.in" { NO66("substring operator :"); yyval.expval = mkprim(yypvt[-4].namval, mklist(yypvt[-2].chval), yypvt[-0].chval); } break; case 163: # line 781 "gram.in" { yyval.chval = mkchain(yypvt[-3].expval, mkchain(yypvt[-1].expval,CHNULL)); } break; case 164: # line 785 "gram.in" { yyval.expval = 0; } break; case 166: # line 790 "gram.in" { if(yypvt[-0].namval->vclass == CLPARAM) yyval.expval = (expptr) cpexpr( ( (struct Paramblock *) (yypvt[-0].namval) ) -> paramval); } break; case 168: # line 797 "gram.in" { yyval.expval = mklogcon(1); } break; case 169: # line 798 "gram.in" { yyval.expval = mklogcon(0); } break; case 170: # line 799 "gram.in" { yyval.expval = mkstrcon(toklen, token); } break; case 171: # line 800 "gram.in" { yyval.expval = mkintcon( convci(toklen, token) ); } break; case 172: # line 801 "gram.in" { yyval.expval = mkrealcon(TYREAL, convcd(toklen, token)); } break; case 173: # line 802 "gram.in" { yyval.expval = mkrealcon(TYDREAL, convcd(toklen, token)); } break; case 174: # line 806 "gram.in" { yyval.expval = mkcxcon(yypvt[-3].expval,yypvt[-1].expval); } break; case 175: # line 810 "gram.in" { NOEXT("hex constant"); yyval.expval = mkbitcon(4, toklen, token); } break; case 176: # line 813 "gram.in" { NOEXT("octal constant"); yyval.expval = mkbitcon(3, toklen, token); } break; case 177: # line 816 "gram.in" { NOEXT("binary constant"); yyval.expval = mkbitcon(1, toklen, token); } break; case 179: # line 822 "gram.in" { yyval.expval = yypvt[-1].expval; } break; case 182: # line 828 "gram.in" { yyval.expval = mkexpr(yypvt[-1].ival, yypvt[-2].expval, yypvt[-0].expval); } break; case 183: # line 830 "gram.in" { yyval.expval = mkexpr(OPSTAR, yypvt[-2].expval, yypvt[-0].expval); } break; case 184: # line 832 "gram.in" { yyval.expval = mkexpr(OPSLASH, yypvt[-2].expval, yypvt[-0].expval); } break; case 185: # line 834 "gram.in" { yyval.expval = mkexpr(OPPOWER, yypvt[-2].expval, yypvt[-0].expval); } break; case 186: # line 836 "gram.in" { if(yypvt[-1].ival == OPMINUS) yyval.expval = mkexpr(OPNEG, yypvt[-0].expval, ENULL); else yyval.expval = yypvt[-0].expval; } break; case 187: # line 841 "gram.in" { NO66("concatenation operator //"); yyval.expval = mkexpr(OPCONCAT, yypvt[-2].expval, yypvt[-0].expval); } break; case 189: # line 846 "gram.in" { if(yypvt[-3].labval->labdefined) execerr("no backward DO loops", CNULL); yypvt[-3].labval->blklevel = blklevel+1; exdo(yypvt[-3].labval->labelno, yypvt[-0].chval); if (hadcomma) { if (bugwarn & 2) err("syntax error"); else if (bugwarn & 1) warnb("old f77 didn't allow comma after DO label"); } } break; case 190: # line 859 "gram.in" { exendif(); thiswasbranch = NO; } break; case 192: # line 862 "gram.in" { exelif(yypvt[-2].expval); lastwasbranch = NO; } break; case 193: # line 864 "gram.in" { exelse(); lastwasbranch = NO; } break; case 194: # line 866 "gram.in" { exendif(); lastwasbranch = NO; } break; case 195: # line 870 "gram.in" { exif(yypvt[-1].expval); } break; case 196: # line 874 "gram.in" { yyval.chval = mkchain(yypvt[-2].namval, yypvt[-0].chval); } break; case 197: # line 878 "gram.in" { exequals(yypvt[-2].expval, yypvt[-0].expval); } break; case 198: # line 880 "gram.in" { exassign(yypvt[-0].namval, yypvt[-2].labval); } break; case 201: # line 884 "gram.in" { inioctl = NO; } break; case 202: # line 886 "gram.in" { exarif(yypvt[-6].expval, yypvt[-4].labval, yypvt[-2].labval, yypvt[-0].labval); thiswasbranch = YES; } break; case 203: # line 888 "gram.in" { excall(yypvt[-0].namval, PNULL, 0, labarray); } break; case 204: # line 890 "gram.in" { excall(yypvt[-2].namval, PNULL, 0, labarray); } break; case 205: # line 892 "gram.in" { if(nstars < MAXLABLIST) excall(yypvt[-3].namval, mklist(yypvt[-1].chval), nstars, labarray); else err("too many alternate returns"); } break; case 206: # line 898 "gram.in" { exreturn(yypvt[-0].expval); thiswasbranch = YES; } break; case 207: # line 900 "gram.in" { exstop(yypvt[-2].ival, yypvt[-0].expval); thiswasbranch = yypvt[-2].ival; } break; case 208: # line 904 "gram.in" { yyval.labval = mklabel( convci(toklen, token) ); } break; case 209: # line 908 "gram.in" { if(parstate == OUTSIDE) { newproc(); startproc(PNULL, CLMAIN); } } break; case 210: # line 917 "gram.in" { exgoto(yypvt[-0].labval); thiswasbranch = YES; } break; case 211: # line 919 "gram.in" { exasgoto(yypvt[-0].namval); thiswasbranch = YES; } break; case 212: # line 921 "gram.in" { exasgoto(yypvt[-4].namval); thiswasbranch = YES; } break; case 213: # line 923 "gram.in" { if(nstars < MAXLABLIST) putcmgo(fixtype(yypvt[-0].expval), nstars, labarray); else err("computed GOTO list too long"); } break; case 214: # line 930 "gram.in" { hadcomma = 0; } break; case 215: # line 931 "gram.in" { hadcomma = 1; } break; case 216: # line 935 "gram.in" { nstars = 0; yyval.namval = yypvt[-0].namval; } break; case 217: # line 939 "gram.in" { yyval.chval = (yypvt[-0].expval ? mkchain(yypvt[-0].expval,CHNULL) : CHNULL); } break; case 218: # line 941 "gram.in" { if(yypvt[-0].expval) if(yypvt[-2].chval) yyval.chval = hookup(yypvt[-2].chval, mkchain(yypvt[-0].expval,CHNULL)); else yyval.chval = mkchain(yypvt[-0].expval,CHNULL); else yyval.chval = yypvt[-2].chval; } break; case 220: # line 951 "gram.in" { if(nstars<MAXLABLIST) labarray[nstars++] = yypvt[-0].labval; yyval.expval = 0; } break; case 221: # line 955 "gram.in" { yyval.ival = 0; } break; case 222: # line 957 "gram.in" { yyval.ival = 1; } break; case 223: # line 961 "gram.in" { yyval.chval = mkchain(yypvt[-0].expval, CHNULL); } break; case 224: # line 963 "gram.in" { yyval.chval = hookup(yypvt[-2].chval, mkchain(yypvt[-0].expval,CHNULL) ); } break; case 225: # line 967 "gram.in" { if(parstate == OUTSIDE) { newproc(); startproc(PNULL, CLMAIN); } if(parstate < INDATA) enddcl(); } break; case 226: # line 977 "gram.in" { intonly = YES; } break; case 227: # line 981 "gram.in" { intonly = NO; } break; case 228: # line 986 "gram.in" { endio(); } break; case 230: # line 991 "gram.in" { ioclause(IOSUNIT, yypvt[-0].expval); endioctl(); } break; case 231: # line 993 "gram.in" { ioclause(IOSUNIT, PNULL); endioctl(); } break; case 232: # line 995 "gram.in" { ioclause(IOSUNIT, IOSTDERR); endioctl(); } break; case 234: # line 998 "gram.in" { doio(PNULL); } break; case 235: # line 1000 "gram.in" { doio(PNULL); } break; case 236: # line 1002 "gram.in" { doio(yypvt[-0].chval); } break; case 237: # line 1004 "gram.in" { doio(yypvt[-0].chval); } break; case 238: # line 1006 "gram.in" { doio(yypvt[-0].chval); } break; case 239: # line 1008 "gram.in" { doio(PNULL); } break; case 240: # line 1010 "gram.in" { doio(yypvt[-0].chval); } break; case 241: # line 1012 "gram.in" { doio(PNULL); } break; case 242: # line 1014 "gram.in" { doio(yypvt[-0].chval); } break; case 244: # line 1021 "gram.in" { iostmt = IOBACKSPACE; } break; case 245: # line 1023 "gram.in" { iostmt = IOREWIND; } break; case 246: # line 1025 "gram.in" { iostmt = IOENDFILE; } break; case 248: # line 1032 "gram.in" { iostmt = IOINQUIRE; } break; case 249: # line 1034 "gram.in" { iostmt = IOOPEN; } break; case 250: # line 1036 "gram.in" { iostmt = IOCLOSE; } break; case 251: # line 1040 "gram.in" { ioclause(IOSUNIT, PNULL); ioclause(IOSFMT, yypvt[-0].expval); endioctl(); } break; case 252: # line 1046 "gram.in" { ioclause(IOSUNIT, PNULL); ioclause(IOSFMT, PNULL); endioctl(); } break; case 253: # line 1054 "gram.in" { ioclause(IOSUNIT, yypvt[-1].expval); endioctl(); } break; case 254: # line 1059 "gram.in" { endioctl(); } break; case 257: # line 1067 "gram.in" { ioclause(IOSPOSITIONAL, yypvt[-0].expval); } break; case 258: # line 1069 "gram.in" { ioclause(IOSPOSITIONAL, PNULL); } break; case 259: # line 1071 "gram.in" { ioclause(IOSPOSITIONAL, IOSTDERR); } break; case 260: # line 1073 "gram.in" { ioclause(yypvt[-1].ival, yypvt[-0].expval); } break; case 261: # line 1075 "gram.in" { ioclause(yypvt[-1].ival, PNULL); } break; case 262: # line 1077 "gram.in" { ioclause(yypvt[-1].ival, IOSTDERR); } break; case 263: # line 1081 "gram.in" { yyval.ival = iocname(); } break; case 264: # line 1085 "gram.in" { iostmt = IOREAD; } break; case 265: # line 1089 "gram.in" { iostmt = IOWRITE; } break; case 266: # line 1093 "gram.in" { iostmt = IOWRITE; ioclause(IOSUNIT, PNULL); ioclause(IOSFMT, yypvt[-1].expval); endioctl(); } break; case 267: # line 1100 "gram.in" { iostmt = IOWRITE; ioclause(IOSUNIT, PNULL); ioclause(IOSFMT, PNULL); endioctl(); } break; case 268: # line 1109 "gram.in" { yyval.chval = mkchain(yypvt[-0].tagval, CHNULL); } break; case 269: # line 1111 "gram.in" { yyval.chval = hookup(yypvt[-2].chval, mkchain(yypvt[-0].tagval, CHNULL)); } break; case 270: # line 1115 "gram.in" { yyval.tagval = (tagptr) yypvt[-0].expval; } break; case 271: # line 1117 "gram.in" { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval,yypvt[-3].chval); } break; case 272: # line 1121 "gram.in" { yyval.chval = mkchain(yypvt[-0].expval, CHNULL); } break; case 273: # line 1123 "gram.in" { yyval.chval = mkchain(yypvt[-0].tagval, CHNULL); } break; case 275: # line 1128 "gram.in" { yyval.chval = mkchain(yypvt[-2].expval, mkchain(yypvt[-0].expval, CHNULL) ); } break; case 276: # line 1130 "gram.in" { yyval.chval = mkchain(yypvt[-2].expval, mkchain(yypvt[-0].tagval, CHNULL) ); } break; case 277: # line 1132 "gram.in" { yyval.chval = mkchain(yypvt[-2].tagval, mkchain(yypvt[-0].expval, CHNULL) ); } break; case 278: # line 1134 "gram.in" { yyval.chval = mkchain(yypvt[-2].tagval, mkchain(yypvt[-0].tagval, CHNULL) ); } break; case 279: # line 1136 "gram.in" { yyval.chval = hookup(yypvt[-2].chval, mkchain(yypvt[-0].expval, CHNULL) ); } break; case 280: # line 1138 "gram.in" { yyval.chval = hookup(yypvt[-2].chval, mkchain(yypvt[-0].tagval, CHNULL) ); } break; case 281: # line 1142 "gram.in" { yyval.tagval = (tagptr) yypvt[-0].expval; } break; case 282: # line 1144 "gram.in" { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval, mkchain(yypvt[-3].expval, CHNULL) ); } break; case 283: # line 1146 "gram.in" { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval, mkchain(yypvt[-3].tagval, CHNULL) ); } break; case 284: # line 1148 "gram.in" { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval, yypvt[-3].chval); } break; case 285: # line 1152 "gram.in" { startioctl(); } break; } goto yystack; /* stack new state and value */ }