# define EOS 1 # define NEWLINE 2 # define LPAR 3 # define RPAR 4 # define LBRACK 5 # define RBRACK 6 # define COMMA 7 # define COLON 8 # define ASGNOP 9 # define REPOP 10 # define OR 11 # define AND 12 # define NOT 13 # define RELOP 14 # define ADDOP 15 # define MULTOP 16 # define POWER 17 # define DOUBLEADDOP 18 # define ARROW 19 # define QUALOP 20 # define NAME 21 # define OPTNAME 22 # define STRUCTNAME 23 # define COMNAME 24 # define CONST 25 # define COMMON 26 # define INTERNAL 27 # define EXTERNAL 28 # define AUTOMATIC 29 # define STATIC 30 # define VALUE 31 # define PROCEDURE 32 # define BLOCKDATA 33 # define OPTION 34 # define INCLUDE 35 # define DEFINE 36 # define END 37 # define INTEGER 38 # define REAL 39 # define COMPLEX 40 # define LOGICAL 41 # define CHARACTER 42 # define STRUCT 43 # define FIELD 44 # define ARRAY 45 # define DIMENSION 46 # define LONG 47 # define SHORT 48 # define INITIAL 49 # define EQUIVALENCE 50 # define IMPLICIT 51 # define DEBUG 52 # define IF 53 # define ELSE 54 # define WHILE 55 # define UNTIL 56 # define REPEAT 57 # define DO 58 # define FOR 59 # define SWITCH 60 # define CASE 61 # define DEFAULT 62 # define GO 63 # define GOTO 64 # define BREAK 65 # define EXIT 66 # define NEXT 67 # define RETURN 68 # define CONTINUE 69 # define CALL 70 # define DOUBLE 71 # define PRECISION 72 # define DOUBLEPRECISION 73 # define SIZEOF 74 # define LENGTHOF 75 # define LETTER 76 # define READ 77 # define WRITE 78 # define READBIN 79 # define WRITEBIN 80 # define TRUE 81 # define FALSE 82 # define ESCAPE 83 # line 85 "gram.in" #include "defs" ptr bgnexec(), addexec(), bgnproc(), mkvar(), mkcomm(), mkstruct(), mkarrow(); ptr mkiost(), mkioitem(), mkiogroup(), mkformat(); ptr funcinv(), extrfield(), typexpr(), strucelt(), mkfield(); ptr esizeof(), elenof(), mkilab(); ptr ifthen(), doloop(); struct varblock *subscript(); # line 95 "gram.in" typedef union { int ival; ptr pval; char *cval; } YYSTYPE; # line 124 "gram.in" extern int prevv; extern YYSTYPE prevl; ptr p; ptr procattrs; int i,n; static int imptype; static int ininit =NO; #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 # line 1009 "gram.in" setyydeb() { #ifdef YYDEBUG yydebug = 1; #endif } short yyexca[] ={ -1, 0, 0, 1, -2, 175, -1, 1, 0, -1, -2, 0, -1, 80, 9, 152, 19, 152, 20, 152, -2, 178, -1, 165, 19, 152, 20, 152, -2, 179, -1, 262, 6, 191, -2, 14, -1, 351, 14, 0, -2, 144, }; # define YYNPROD 284 # define YYLAST 1451 short yyact[]={ 225, 247, 408, 431, 412, 124, 409, 337, 223, 197, 157, 20, 258, 224, 185, 156, 19, 6, 140, 3, 20, 155, 61, 139, 286, 19, 59, 314, 5, 131, 297, 152, 212, 44, 182, 198, 37, 34, 36, 32, 33, 35, 21, 22, 16, 191, 14, 135, 38, 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, 10, 12, 11, 72, 227, 121, 77, 64, 17, 20, 446, 66, 60, 413, 19, 179, 189, 425, 58, 195, 196, 338, 42, 149, 43, 141, 65, 80, 73, 109, 129, 78, 87, 71, 199, 400, 399, 170, 200, 172, 178, 167, 175, 176, 177, 154, 211, 233, 305, 120, 315, 203, 325, 218, 243, 326, 137, 62, 220, 218, 68, 447, 148, 147, 356, 74, 209, 222, 242, 199, 123, 204, 256, 200, 201, 202, 213, 229, 216, 215, 214, 217, 213, 68, 216, 215, 214, 217, 134, 62, 73, 169, 245, 165, 20, 164, 80, 166, 109, 19, 78, 87, 278, 76, 132, 260, 133, 273, 161, 201, 202, 144, 148, 147, 163, 382, 267, 250, 263, 160, 265, 271, 272, 273, 148, 147, 259, 433, 280, 394, 282, 148, 147, 228, 268, 269, 270, 239, 279, 69, 287, 272, 273, 289, 235, 250, 127, 295, 296, 298, 298, 58, 303, 240, 291, 292, 238, 262, 146, 128, 18, 65, 252, 251, 344, 343, 449, 307, 148, 147, 55, 310, 460, 429, 417, 253, 254, 434, 264, 283, 300, 293, 20, 329, 20, 304, 173, 19, 20, 19, 319, 322, 321, 19, 171, 372, 428, 316, 330, 429, 317, 327, 323, 281, 141, 392, 377, 7, 393, 378, 367, 342, 248, 348, 349, 350, 351, 352, 353, 354, 355, 335, 364, 143, 154, 365, 357, 360, 234, 339, 363, 462, 340, 333, 463, 287, 334, 277, 275, 276, 159, 274, 271, 272, 273, 274, 271, 272, 273, 373, 376, 255, 158, 375, 159, 380, 145, 302, 371, 366, 358, 361, 276, 301, 274, 271, 272, 273, 379, 418, 389, 423, 236, 396, 390, 420, 391, 237, 277, 275, 276, 414, 274, 271, 272, 273, 398, 134, 416, 331, 397, 415, 332, 451, 395, 277, 275, 276, 381, 274, 271, 272, 273, 369, 259, 312, 277, 275, 276, 410, 274, 271, 272, 273, 279, 445, 407, 279, 436, 465, 427, 250, 150, 419, 250, 277, 275, 276, 421, 274, 271, 272, 273, 125, 406, 20, 125, 403, 306, 285, 19, 284, 424, 422, 308, 74, 122, 277, 275, 276, 249, 274, 271, 272, 273, 219, 210, 207, 206, 435, 48, 205, 439, 437, 50, 438, 52, 53, 162, 442, 126, 410, 125, 441, 440, 444, 388, 443, 410, 448, 450, 387, 386, 385, 383, 347, 453, 456, 345, 457, 458, 150, 49, 414, 459, 51, 411, 142, 9, 461, 454, 188, 370, 186, 208, 464, 187, 107, 192, 68, 99, 44, 97, 180, 37, 34, 36, 32, 33, 35, 96, 426, 95, 266, 174, 88, 38, 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, 455, 86, 84, 341, 168, 452, 277, 275, 276, 116, 274, 271, 272, 273, 277, 275, 276, 261, 274, 271, 272, 273, 42, 82, 43, 193, 194, 150, 113, 114, 111, 112, 195, 196, 384, 230, 328, 188, 221, 186, 226, 336, 187, 153, 192, 68, 241, 44, 70, 180, 37, 34, 36, 32, 33, 35, 151, 63, 136, 54, 8, 75, 38, 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, 430, 13, 277, 275, 276, 404, 274, 271, 272, 273, 232, 277, 275, 276, 231, 274, 271, 272, 273, 4, 2, 102, 42, 432, 43, 193, 194, 110, 113, 114, 111, 112, 195, 196, 150, 181, 29, 23, 288, 25, 294, 299, 290, 346, 188, 85, 186, 15, 246, 187, 67, 192, 68, 184, 44, 183, 180, 37, 34, 36, 32, 33, 35, 28, 56, 309, 24, 318, 138, 38, 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, 401, 130, 257, 320, 1, 0, 277, 275, 276, 0, 274, 271, 272, 273, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 43, 193, 194, 0, 113, 114, 111, 112, 195, 196, 0, 150, 244, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 186, 0, 0, 187, 0, 192, 68, 190, 44, 0, 180, 37, 34, 36, 32, 33, 35, 0, 0, 0, 0, 0, 0, 38, 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, 374, 0, 0, 0, 0, 0, 277, 275, 276, 0, 274, 271, 272, 273, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 43, 193, 194, 150, 113, 114, 111, 112, 195, 196, 0, 0, 0, 188, 0, 186, 0, 0, 187, 0, 192, 68, 190, 44, 0, 180, 37, 34, 36, 32, 33, 35, 0, 0, 0, 0, 0, 0, 38, 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, 368, 0, 0, 0, 0, 0, 277, 275, 276, 0, 274, 271, 272, 273, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 43, 193, 194, 0, 113, 114, 111, 112, 195, 196, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 186, 0, 0, 187, 0, 192, 68, 190, 44, 0, 180, 37, 34, 36, 32, 33, 35, 0, 0, 0, 0, 0, 0, 38, 39, 40, 41, 362, 45, 27, 30, 31, 46, 47, 313, 0, 277, 275, 276, 311, 274, 271, 272, 273, 0, 277, 275, 276, 0, 274, 271, 272, 273, 0, 0, 0, 42, 0, 43, 193, 194, 0, 113, 114, 111, 112, 195, 196, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 186, 0, 0, 187, 0, 192, 68, 190, 44, 0, 180, 37, 34, 36, 32, 33, 35, 0, 0, 0, 0, 0, 0, 38, 39, 40, 41, 359, 45, 27, 30, 31, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 43, 193, 194, 0, 113, 114, 111, 112, 195, 196, 44, 0, 0, 37, 34, 36, 32, 33, 35, 0, 0, 0, 190, 14, 0, 38, 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, 10, 12, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 57, 0, 0, 0, 0, 0, 42, 0, 43, 0, 0, 0, 79, 0, 0, 91, 62, 0, 44, 92, 0, 37, 34, 36, 32, 33, 35, 21, 22, 0, 0, 0, 0, 38, 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, 0, 0, 90, 104, 0, 106, 190, 105, 116, 115, 108, 94, 93, 101, 100, 118, 119, 117, 98, 103, 81, 0, 42, 0, 43, 0, 0, 113, 114, 111, 112, 0, 62, 89, 44, 0, 0, 37, 34, 36, 32, 33, 35, 0, 0, 0, 0, 0, 0, 38, 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, 10, 12, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 37, 34, 36, 32, 33, 35, 42, 0, 43, 0, 0, 190, 38, 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, 10, 12, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 150, 405, 0, 0, 0, 0, 0, 0, 42, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 37, 34, 36, 32, 33, 35, 0, 0, 0, 0, 0, 324, 38, 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, 0, 0, 0, 150, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 44, 43, 0, 37, 34, 36, 32, 33, 35, 0, 0, 0, 0, 0, 0, 38, 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 42, 44, 43, 0, 37, 34, 36, 32, 33, 35, 0, 0, 0, 0, 0, 0, 38, 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, 0, 0, 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 44, 43, 0, 37, 34, 36, 32, 33, 35, 0, 0, 0, 0, 0, 0, 38, 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 37, 34, 36, 32, 33, 35, 0, 0, 0, 42, 0, 43, 38, 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 43 }; short yypact[]={ 10,-1000, 450, 450, 453, 450, 450,-1000,-1000,1035, 98,-1000, 121, 141,-1000,1034,-1000,-1000,-1000, 402, 402,-1000,-1000,-1000,-1000,-1000, 428, 426,-1000,-1000, -1000,-1000,-1000,-1000,-1000,-1000,-1000, 202,-1000,-1000, -1000,-1000, 17,-1000,-1000, 142,-1000,-1000,-1000,-1000, -1000,-1000,-1000,-1000, 93,-1000,-1000,1095,-1000, 275, -1000, 402,-1000, 308,-1000, 208,-1000, 378,-1000,1377, 304, 292,-1000, 171, 98, 424,-1000,-1000, 164, 98, -1000, 98,-1000,-1000,1034,-1000,-1000,-1000,-1000,-1000, -1000, 245,-1000, 237,-1000,-1000,-1000,-1000, 754,-1000, 107, 109, 417,-1000, 414,-1000, 413,-1000, 412,-1000, 80,-1000,-1000,-1000,-1000, 411, 754,-1000,-1000,-1000, -1000,-1000,-1000,-1000,-1000, 754, 520,-1000,-1000,-1000, -1000,-1000,-1000,-1000,-1000, 69, 280, 194, 330,-1000, -1000, 275,1292, 95, 187, 98,-1000, 106, 90,-1000, 681, 264,-1000, 406,1377,-1000,-1000, 402, 401, 98, 98, 306, 127, 754, 102,-1000, 102,-1000,-1000,-1000, -1000,-1000, 229,-1000, 754,-1000,-1000,-1000, 355, 152, -1000,-1000,1341,-1000,-1000,-1000, 754, 98, 754,-1000, -1000,-1000, -3, 397, 395,-1000,-1000,-1000, 600,-1000, -1000, 754,-1000, 72, 107, 754, 754, 754, 754, 315, 754, 86, 82,-1000,-1000,-1000,-1000,-1000,-1000,-1000, 396, 520, 884, 360,-1000, 875,-1000, 85, 85, 341, 1134,-1000, 975,-1000,-1000, 89,1095,-1000,-1000,-1000, -1000, 754, 378,-1000,-1000, 344, 288,-1000,1377, 4, -1000,-1000,-1000, 102, 102,-1000,-1000, 284,-1000,-1000, 355,-1000,-1000,-1000,-1000,-1000, 216, 355, 446, 443, -1000, 754, 754, 754, 754, 754, 754, 754, 754,-1000, 149, 102, 290, 103, 915, 834,-1000, 355, 754, 355, 277,-1000,-1000, 600, 262, 355, 799, 358, 355,-1000, 247,-1000,-1000, 726,-1000,-1000,-1000,-1000, 754, 261, -1000,-1000,-1000, 520, 353,-1000, 158,-1000, 442,-1000, -1000, 441, 440, 439, 434,-1000,-1000,-1000, 754, 355, -1000,-1000, 754,-1000, 754,-1000, 260,-1000, 173,-1000, 95, 326,-1000,-1000, 754, 41,-1000, 38, 184, 149, 149, 165, 309, 290, 355, 355,-1000, 645,1243, 392, 570,1194, 389, 355,-1000, 72,-1000, 447,-1000,-1000, -1000, 346,-1000, 226,-1000,-1000, 327,-1000, 520,-1000, 355,-1000,-1000,1134, 324,-1000,-1000,-1000,-1000, 355, 355, 355,-1000, 4, 0,-1000,-1000,-1000, 355,-1000, 376,-1000,-1000,-1000,-1000,-1000,-1000,-1000, 251,-1000, 561,-1000, 228, 335,-1000,-1000,-1000,-1000,-1000,-1000, 754,-1000,-1000, 432,-1000,-1000,-1000, 754,-1000, 447, -1000,-1000, 371, 44,-1000, 217, 447, 348,-1000, 500, -1000,-1000, 492,-1000,-1000, 754,-1000,-1000,-1000,-1000, 225,-1000,-1000,-1000,-1000,-1000, 286,-1000,-1000,-1000, -1000,-1000,-1000, 754, 374,-1000 }; short yypgo[]={ 0, 653, 18, 652, 17, 47, 219, 651, 12, 22, 27, 650, 23, 637, 636, 34, 92, 456, 67, 635, 108, 64, 634, 8, 13, 633, 26, 71, 21, 15, 632, 29, 0, 74, 14, 75, 624, 622, 70, 619, 617, 616, 614, 612, 611, 35, 24, 72, 30, 610, 609, 2, 6, 4, 3, 608, 606, 605, 604, 45, 596, 32, 592, 590, 9, 589, 419, 588, 583, 28, 579, 570, 557, 556, 555, 554, 5, 553, 186, 552, 1, 544, 66, 542, 31, 539, 537, 7, 62, 10, 534, 532, 63, 531, 530, 65, 519, 513, 500, 499, 498, 497, 484, 483, 482, 481, 480, 479, 471, 469, 466, 463, 461, 377 }; short yyr1[]={ 0, 1, 1, 1, 1, 1, 1, 1, 66, 3, 3, 3, 3, 5, 70, 5, 67, 67, 67, 67, 72, 71, 71, 6, 6, 7, 7, 8, 65, 73, 74, 74, 74, 75, 75, 75, 69, 68, 76, 13, 13, 13, 12, 12, 2, 2, 2, 2, 2, 2, 14, 14, 14, 77, 77, 83, 82, 79, 79, 84, 84, 85, 86, 86, 87, 87, 81, 81, 88, 16, 16, 17, 17, 18, 18, 20, 20, 90, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 91, 27, 9, 15, 15, 28, 28, 29, 29, 29, 29, 29, 29, 29, 56, 56, 56, 56, 56, 19, 19, 92, 10, 10, 55, 55, 55, 55, 55, 55, 30, 30, 30, 11, 11, 93, 94, 31, 89, 89, 57, 57, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 33, 38, 38, 38, 38, 38, 39, 34, 34, 34, 40, 40, 36, 36, 36, 37, 37, 37, 58, 58, 59, 59, 4, 41, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 102, 102, 98, 99, 100, 100, 100, 100, 103, 100, 104, 104, 42, 42, 42, 42, 105, 106, 107, 43, 43, 101, 101, 101, 101, 101, 101, 101, 45, 44, 44, 46, 46, 64, 64, 64, 64, 109, 109, 109, 109, 109, 60, 60, 60, 61, 61, 61, 61, 61, 61, 108, 108, 108, 108, 47, 47, 47, 47, 47, 47, 110, 111, 111, 49, 112, 112, 48, 48, 96, 97, 35, 63, 63, 63, 63, 50, 50, 51, 51, 52, 52, 52, 52, 52, 52, 52, 113, 53, 54, 54, 54, 54, 62, 78, 80 }; short yyr2[]={ 0, 0, 2, 2, 4, 2, 2, 1, 1, 2, 2, 2, 2, 0, 0, 3, 1, 2, 4, 5, 1, 1, 2, 1, 1, 1, 3, 1, 2, 1, 0, 2, 3, 1, 3, 3, 1, 1, 0, 1, 2, 3, 1, 1, 2, 4, 2, 4, 2, 2, 1, 2, 3, 1, 3, 0, 4, 1, 3, 1, 4, 1, 1, 3, 1, 3, 1, 3, 3, 3, 3, 1, 2, 2, 2, 0, 1, 0, 4, 1, 3, 1, 3, 1, 1, 0, 1, 1, 3, 2, 0, 5, 1, 1, 2, 1, 2, 1, 2, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 5, 5, 0, 0, 1, 1, 1, 1, 1, 2, 1, 1, 4, 2, 1, 1, 0, 0, 6, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 3, 3, 2, 2, 3, 3, 3, 2, 3, 3, 1, 1, 1, 1, 2, 3, 4, 3, 1, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 1, 3, 1, 1, 2, 0, 3, 2, 1, 2, 3, 5, 2, 1, 1, 1, 1, 1, 0, 1, 0, 0, 3, 2, 4, 3, 0, 5, 1, 3, 8, 4, 4, 3, 4, 0, 1, 1, 5, 1, 2, 1, 2, 3, 3, 4, 3, 1, 3, 1, 2, 1, 1, 2, 1, 1, 2, 2, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 1, 4, 3, 6, 5, 8, 7, 2, 2, 4, 2, 2, 4, 0, 1, 2, 0, 6, 1, 1, 1, 1, 1, 0, 1, 3, 1, 3, 2, 1, 2, 4, 3, 0, 4, 1, 4, 6, 3, 3, 0, 0 }; short yychk[]={ -1000, -1, -65, -2, -67, -69, -4, 256, -73, -17, 49, 51, 50, -71, 36, -41, 34, -18, -6, -29, -89, 32, 33, -56, -19, -55, 42, 44, -30, -57, 45, 46, 29, 30, 27, 31, 28, 26, 38, 39, 40, 41, 71, 73, 23, 43, 47, 48, -66, 1, -66, 1, -66, -66, -74, -6, -25, 5, -18, -26, -27, -9, 21, -77, -82, -33, -38, -39, 21, -78, -81, -16, -88, -33, 3, -72, 21, -95, -33, 18, -38, 70, -96, 5,-100, -42,-101, -35,-102, 83, 52, 21, 25, 62, 61,-105,-107,-108, 68,-109, 64, 63, -63, 69, 53, 57, 55,-110, 60, -47, -60, 79, 80, 77, 78, 59, 58, 67, 65, 66, -20, -21, 3, -20, -76, 3, 3, 3, 16, 72, -11, -31, 21, 23, 5, -5, -75, 22, -13, -12, -2, -26, -17, 7, -20, 7, 9, 20, 19, -34, 3, -79, -84, -85, -15, -28, -29, -89, 7, 7, 7, -16, 3, 9, -33, -38, -33, -4, -98, -95, -76, 8, -76, 8,-103, -76, -76, -76, -32, -33, 25, -58, -15, -36, -37, -34, 15, 18, 13, -35, 256, -59, 20, 74, 75, 81, 82, -64, -45, 21, 25, 61, 62, 3, 21, 3, 3, 3,-111, -4, 3, 25, -61, 55, 59, 58, 57, 60, 32, 3, -32, -90, -32, -23, -24, -32, 16, -92, -92, -76, -93, -68, -70, 37, 7, 9, 1, 6, -27, 9, -82, -83, 21, 23, 4, -32, -40, -80, 7, 3, -28, -21, -88, -33, -33, 4, 4, -7, -8, -9, -32, -97, -5, -76, 8, -76,-104, -32, -4, -4, -4, 15, 16, 17, 14, 11, 12, 10, 9, -34, -32, -33, -32, -59, 3, 3, -46, -32, 7, -32, -44, -64, -64, -45, -50, -32, -32, -48, -32, -49, -48, 7, 1, -32, -61, 25, 1, -76, 7, -22, -23, 4, 4, 8, -10, 24, -10, -31, -14, -2, -3, -2, -4, -69, 256, 22, 25, -12, -91, -32, -34, 4, 7, 4, 7, -84, -86, -87, 76, 4, 7, -99, -76, 8, 7, 1, -43, 1, -32, -32, -32, -32, -32, -32, -32, -32, 20, -32, -15, 42, -32, -15, 42, -32, 4, 7, -46, 7, 4, 4, -112, -4, 7, -76, 4, -76, -32, 4, 7, -24, -32, 4, 16, 1, -94, 1, 1, 1, 1, -32, -32, -32, 4, 7, 15, -8, 6, -76, -32, 54, 56, 4, 4, 4, 4, 4, 4, -64, -51, -52, -32, 8, -53, -47, 5, 4, 1, 7, 1, -76, 7, -23, -2, 6, -87, 76,-106, 3, 4, 7, 8, -54, -62, -78, 8, -53,-113, -76, -76, -32, 1, -76, -32, -52, -54, 3, 25, 76, -54, 8, -51, 4, 1, -76, -4, 4, -32, -80, -80, -54, 6, -76, 4, 7, -32, 4 }; short yydef[]={ -2, -2, 0, 0, 0, 0, 0, 7, 30, 85, 0, 282, 0, 16, 36, 188, 29, 71, 21, 75, 75, 23, 24, 97, 38, 99, 0, 0, 102, 103, 128, 129, 104, 105, 106, 107, 108, 0, 114, 115, 116, 117, 0, 119, 120, 0, 130, 131, 2, 8, 3, 13, 5, 6, 28, 22, 44, 0, 72, 86, 87, 75, 92, 46, 53, 0, 152, 153, 158, 0, 48, 49, 66, 0, 0, 17, 20, 174, 0, 0, -2, 0, 175, 190, 188, 183, 184, 185, 186, 187, 38, 158, 38, 0, 196, 38, 38, 38, 209, 211, 0, 0, 0, 189, 0, 206, 0, 175, 0, 242, 225, 260, 261, 262, 263, 0, 0, 230, 231, 232, 73, 76, 77, 74, 98, 0, 0, 111, 111, 118, 38, 122, 123, 124, 125, 14, 31, 33, 0, 39, 42, 43, 85, 0, 89, 0, 55, 0, 0, 154, 0, 283, 57, 59, 61, 93, 95, 0, 0, 0, 0, 0, 0, 0, 177, -2, 0, 258, 13, 182, 257, 38, 193, 38, 0, 175, 175, 175, 210, 132, 133, 134, 0, 136, 137, 138, 0, 0, 0, 150, 151, 170, 0, 0, 0, 172, 173, 212, 0, 221, 222, 0, 224, 0, 0, 265, 0, 255, 255, 0, 0, 226, 227, 233, 234, 235, 236, 237, 238, 249, 38, 0, 0, 0, 81, 83, 84, 112, 112, 0, 0, 4, 175, 37, 32, 0, 40, 45, 88, 90, 54, 0, 155, 157, 159, 0, 0, 47, 0, 0, 94, 96, 67, 70, 69, 68, 18, 0, 25, 27, 176, 180, -2, 192, 38, 195, 0, 198, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 135, 142, 143, 147, 0, 0, 0, 214, 219, 0, 223, 0, 217, 213, 0, 0, 264, 0, 0, 256, 175, 0, 250, 38, 0, 228, 229, 38, 244, 0, 0, 79, 100, 101, 0, 0, 113, 0, 121, 126, 50, 15, 0, 0, 0, 0, 34, 35, 41, 0, 56, 156, 160, 0, 161, 0, 58, 0, 62, 64, 19, 0, 0, 194, 38, 0, 201, 202, 207, 139, 140, 141, -2, 145, 146, 149, 148, 171, 0, 0, 0, 0, 0, 0, 220, 216, 0, 215, 0, 204, 239, 240, 0, 252, 0, 241, 243, 38, 78, 0, 82, 83, 109, 110, 51, 0, 9, 10, 11, 12, 91, 162, 163, 60, 0, 0, 26, 181, 197, 199, 205, 0, 164, 165, 166, 167, 168, 169, 218, 0, 266, 268, 282, 271, 0, 275, 253, 38, 251, 38, 246, 0, 80, 52, 0, 63, 65, 38, 0, 259, 0, 282, 270, 277, 0, 282, 272, 0, 0, 245, 38, 127, 175, 0, 267, 269, 0, 283, 283, 274, 282, 0, 254, 38, 248, 200, 208, 0, 280, 281, 273, 276, 247, 278, 0, 0, 279 }; # # define YYFLAG -1000 # define YYERROR goto yyerrlab # define YYACCEPT return(0) # define YYABORT return(1) /* parser for yacc output */ int yydebug = 0; /* 1 for debugging */ 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]; short yyj, yym; register YYSTYPE *yypvt; register short yystate, *yyps, yyn; 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 */ if( yydebug ) printf( "state %d, char 0%o\n", yystate, yychar ); 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 ) if( (yychar=yylex())<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 ) if( (yychar=yylex())<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 */ yyerror( "syntax error" ); 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 */ if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] ); --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 */ if( yydebug ) printf( "error recovery discards char %d\n", yychar ); if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */ yychar = -1; goto yynewstate; /* try again in the same state */ } } /* reduction by production yyn */ if( yydebug ) printf("reduce %d\n",yyn); 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 1: # line 138 "gram.in" { graal = PARSEOF; } break; case 2: # line 140 "gram.in" { graal = PARSOPT; } break; case 3: # line 142 "gram.in" { graal = PARSDCL; doinits(yypvt[-1].pval); frchain( & yypvt[-1].pval); } break; case 4: # line 144 "gram.in" { endproc(); graal = PARSPROC; } break; case 5: # line 146 "gram.in" { graal = PARSDEF; } break; case 6: # line 148 "gram.in" { graal = PARSERR; } break; case 7: # line 150 "gram.in" { graal = PARSERR; errmess("Syntax error", "", ""); } break; case 8: # line 155 "gram.in" { eofneed = 1; } break; case 9: # line 158 "gram.in" { if(!dclsect) warn("declaration amid executables"); yyval.pval = bgnexec(); TEST fprintf(diagfile,"stat: dcl\n"); doinits(yypvt[-1].pval); frchain( & yypvt[-1].pval); } break; case 10: # line 164 "gram.in" { if(dclsect && yypvt[-1].pval->tag!=TSTFUNCT) dclsect = 0; TEST fprintf(diagfile, "stat: exec\n"); } break; case 11: # line 168 "gram.in" { yyval.pval = bgnexec(); } break; case 12: # line 170 "gram.in" { yyerrok; errmess("Syntax error", "", ""); yyval.pval = bgnexec(); } break; case 13: # line 177 "gram.in" { yyval.pval = bgnexec(); } break; case 14: # line 178 "gram.in" { thisexec->copylab = 1; } break; case 15: # line 179 "gram.in" { yyval.pval = addexec(); thisexec->copylab = 0; } break; case 16: # line 183 "gram.in" { procname = 0; thisargs = 0; if(procclass == 0) procclass = PRMAIN; goto proctype; } break; case 17: # line 188 "gram.in" { thisargs = 0; goto proctype; } break; case 18: # line 190 "gram.in" { thisargs = 0; goto proctype; } break; case 19: # line 192 "gram.in" { thisargs = yypvt[-1].pval; proctype: if(procattrs) if(procname == 0) dclerr("attributes on unnamed procedure", ""); else { attvars(procattrs, mkchain(procname,CHNULL)); procclass = PRFUNCT; } fprintf(diagfile, "Procedure %s:\n", procnm() ); if(verbose) fprintf(diagfile, " Pass 1\n"); } break; case 20: # line 208 "gram.in" { procname = mkvar(yypvt[-0].pval); extname(procname); } break; case 21: # line 214 "gram.in" { procattrs = 0; } break; case 22: # line 216 "gram.in" { procattrs = yypvt[-1].pval; if(procclass == 0) procclass = PRFUNCT; } break; case 23: # line 222 "gram.in" { yyval.pval = bgnproc(); procclass = 0; } break; case 24: # line 224 "gram.in" { yyval.pval = bgnproc(); procclass = PRBLOCK; } break; case 25: # line 228 "gram.in" { yyval.pval = mkchain(yypvt[-0].pval,CHNULL); } break; case 26: # line 230 "gram.in" { hookup(yypvt[-2].pval, mkchain(yypvt[-0].pval,CHNULL) ); } break; case 27: # line 234 "gram.in" { if(yypvt[-0].pval->vclass == CLUNDEFINED) yypvt[-0].pval->vclass = CLARG; else dclerr("argument already used", yypvt[-0].pval->sthead->namep); } break; case 28: # line 240 "gram.in" { optneed = 0; } break; case 29: # line 244 "gram.in" { if(blklevel > 0) { execerr("Option statement inside procedure", ""); execerr("procedure %s terminated prematurely", procnm()); endproc(); } optneed = 1; } break; case 33: # line 260 "gram.in" { setopt(yypvt[-0].pval,CNULL); cfree(yypvt[-0].pval); } break; case 34: # line 262 "gram.in" { setopt(yypvt[-2].pval,yypvt[-0].pval); cfree(yypvt[-2].pval); cfree(yypvt[-0].pval); } break; case 35: # line 264 "gram.in" { setopt(yypvt[-2].pval,yypvt[-0].pval->leftp); cfree(yypvt[-2].pval); cfree(yypvt[-0].pval); } break; case 36: # line 268 "gram.in" { defneed = 1; } break; case 37: # line 272 "gram.in" { if(thisctl->subtype != STPROC) execerr("control stack not empty upon END", ""); exnull(); popctl(); } break; case 38: # line 280 "gram.in" { igeol=1; /* continue past newlines */ } break; case 41: # line 285 "gram.in" { yyval.pval = hookup(yypvt[-2].pval,yypvt[-0].pval); } break; case 44: # line 293 "gram.in" { attvars(yypvt[-1].pval,yypvt[-0].pval); yyval.pval = yypvt[-0].pval; } break; case 45: # line 295 "gram.in" { attvars(yypvt[-3].pval,yypvt[-1].pval); yyval.pval = yypvt[-1].pval; } break; case 46: # line 297 "gram.in" { yyval.pval = 0; } break; case 47: # line 299 "gram.in" { yyval.pval = 0; } break; case 48: # line 301 "gram.in" { yyval.pval = 0; } break; case 49: # line 303 "gram.in" { mkequiv(yypvt[-0].pval); yyval.pval = 0; } break; case 52: # line 309 "gram.in" { yyval.pval = hookup(yypvt[-2].pval,yypvt[-0].pval); } break; case 55: # line 316 "gram.in" {ininit = YES; } break; case 56: # line 317 "gram.in" { ininit = NO; mkinit(yypvt[-3].pval,yypvt[-0].pval); frexpr(yypvt[-3].pval); } break; case 59: # line 325 "gram.in" { setimpl(imptype, 'a', 'z'); } break; case 61: # line 330 "gram.in" { imptype = yypvt[-0].pval->attype; cfree(yypvt[-0].pval); } break; case 64: # line 338 "gram.in" { setimpl(imptype, yypvt[-0].ival, yypvt[-0].ival); } break; case 65: # line 340 "gram.in" { setimpl(imptype, yypvt[-2].ival, yypvt[-0].ival); } break; case 68: # line 348 "gram.in" { mkequiv(yypvt[-1].pval); } break; case 69: # line 352 "gram.in" { yyval.pval = mkchain(yypvt[-2].pval, mkchain(yypvt[-0].pval,CHNULL)); } break; case 70: # line 354 "gram.in" { yyval.pval = hookup(yypvt[-2].pval, mkchain(yypvt[-0].pval,CHNULL)); } break; case 72: # line 358 "gram.in" { attatt(yypvt[-1].pval,yypvt[-0].pval); } break; case 73: # line 361 "gram.in" { yypvt[-1].pval->atdim = yypvt[-0].pval; } break; case 74: # line 362 "gram.in" { yyval.pval = ALLOC(atblock); yyval.pval->atdim = yypvt[-0].pval; } break; case 75: # line 365 "gram.in" { yyval.pval = 0; } break; case 77: # line 369 "gram.in" { inbound = 1; } break; case 78: # line 370 "gram.in" { inbound = 0; yyval.pval = arrays = mkchain(yypvt[-1].pval,arrays); } break; case 80: # line 374 "gram.in" { hookup(yypvt[-2].pval,yypvt[-0].pval); } break; case 81: # line 378 "gram.in" { yyval.pval = ALLOC(dimblock); yyval.pval->lowerb = 0; yyval.pval->upperb = yypvt[-0].pval; } break; case 82: # line 384 "gram.in" { yyval.pval = ALLOC(dimblock); yyval.pval->lowerb = yypvt[-2].pval; yyval.pval->upperb = yypvt[-0].pval; } break; case 84: # line 392 "gram.in" { yyval.pval = 0; } break; case 85: # line 395 "gram.in" { yyval.pval = 0; } break; case 88: # line 400 "gram.in" { hookup(yypvt[-2].pval,yypvt[-0].pval); } break; case 89: # line 404 "gram.in" { if(yypvt[-0].pval!=0) if(yypvt[-1].pval->vdim==0) yypvt[-1].pval->vdim = yypvt[-0].pval; else if(!eqdim(yypvt[-0].pval,yypvt[-1].pval->vdim)) dclerr("multiple dimension", yypvt[-1].pval->namep); yyval.pval = mkchain(yypvt[-1].pval,CHNULL); } break; case 90: # line 412 "gram.in" { ininit = YES; } break; case 91: # line 413 "gram.in" { ininit = NO; if(yypvt[-2].ival!=OPASGN) dclerr("illegal initialization operator", yypvt[-4].pval->sthead->namep); if(yypvt[-3].pval!=0) if(yypvt[-4].pval->vdim==0) yypvt[-4].pval->vdim = yypvt[-3].pval; else if(!eqdim(yypvt[-3].pval,yypvt[-4].pval->vdim)) dclerr("multiple dimension", yypvt[-4].pval->sthead->namep); if(yypvt[-0].pval!=0 && yypvt[-4].pval->vinit!=0) dclerr("multiple initialization", yypvt[-4].pval->sthead->namep); yypvt[-4].pval->vinit = yypvt[-0].pval; yyval.pval = mkchain(yypvt[-4].pval,CHNULL); } break; case 92: # line 430 "gram.in" { yyval.pval = mkvar(yypvt[-0].pval); } break; case 94: # line 435 "gram.in" { attatt(yypvt[-1].pval,yypvt[-0].pval); } break; case 96: # line 440 "gram.in" { yyval.pval = ALLOC(atblock); yyval.pval->atdim = yypvt[-0].pval; } break; case 97: # line 444 "gram.in" { yyval.pval = ALLOC(atblock); if(yypvt[-0].ival == CLEXT) yyval.pval->atext = 1; yyval.pval->atclass = yypvt[-0].ival; } break; case 98: # line 451 "gram.in" { yyval.pval = ALLOC(atblock); yyval.pval->atclass = CLCOMMON; yyval.pval->atcommon = yypvt[-1].pval; } break; case 99: # line 457 "gram.in" { yyval.pval = ALLOC(atblock); yyval.pval->attype = yypvt[-0].ival; } break; case 100: # line 459 "gram.in" { yyval.pval = ALLOC(atblock); yyval.pval->attype = TYCHAR; yyval.pval->attypep = yypvt[-1].pval; } break; case 101: # line 461 "gram.in" { yyval.pval = ALLOC(atblock); yyval.pval->attype = TYFIELD; yyval.pval->attypep = mkfield(yypvt[-1].pval); } break; case 102: # line 464 "gram.in" { yyval.pval = ALLOC(atblock); yyval.pval->attype = TYSTRUCT; yyval.pval->attypep = yypvt[-0].pval; } break; case 103: # line 467 "gram.in" { yyval.pval = ALLOC(atblock); yyval.pval->atprec = yypvt[-0].ival; } break; case 104: # line 470 "gram.in" { yyval.ival = CLAUTO; fprintf(diagfile,"AUTOMATIC not yet implemented\n"); } break; case 105: # line 472 "gram.in" { yyval.ival = CLSTAT; } break; case 106: # line 473 "gram.in" { yyval.ival = CLSTAT; } break; case 107: # line 474 "gram.in" { yyval.ival = CLVALUE; fprintf(diagfile, "VALUE not yet implemented\n"); } break; case 108: # line 476 "gram.in" { yyval.ival = CLEXT; } break; case 109: # line 480 "gram.in" { yyval.pval = yypvt[-1].pval; } break; case 110: # line 482 "gram.in" { yyval.pval = yypvt[-1].pval; } break; case 111: # line 485 "gram.in" { comneed = 1; } break; case 112: # line 488 "gram.in" { yyval.pval = mkcomm(""); } break; case 114: # line 492 "gram.in" { yyval.ival = TYINT; } break; case 115: # line 493 "gram.in" { yyval.ival = TYREAL; } break; case 116: # line 494 "gram.in" { yyval.ival = TYCOMPLEX; } break; case 117: # line 495 "gram.in" { yyval.ival = TYLOG; } break; case 118: # line 497 "gram.in" { yyval.ival = TYLREAL; /* holdover from Fortran */ } break; case 119: # line 499 "gram.in" { yyval.ival = TYLREAL; /* holdover from Fortran */ } break; case 120: # line 503 "gram.in" { yyval.pval = yypvt[-0].pval->varp; } break; case 121: # line 505 "gram.in" { yyval.pval = mkstruct(yypvt[-2].pval,yypvt[-0].pval); } break; case 122: # line 507 "gram.in" { yyval.pval = mkstruct(PNULL,yypvt[-0].pval); } break; case 123: # line 511 "gram.in" { if(yypvt[-0].pval->varp && yypvt[-0].pval->varp->blklevel<blklevel) hide(yypvt[-0].pval); yypvt[-0].pval->tag = TSTRUCT; } break; case 124: # line 516 "gram.in" { if(yypvt[-0].pval->varp) if(yypvt[-0].pval->varp->blklevel<blklevel) hide(yypvt[-0].pval); else dclerr("multiple declaration for type %s", yypvt[-0].pval->namep); } break; case 125: # line 523 "gram.in" { ++instruct; } break; case 126: # line 523 "gram.in" { --instruct; } break; case 127: # line 524 "gram.in" { yyval.pval = yypvt[-3].pval; prevv = -1; } break; case 130: # line 531 "gram.in" { yyval.ival = 1; } break; case 131: # line 532 "gram.in" { yyval.ival = 0; } break; case 132: # line 535 "gram.in" { if(yypvt[-0].pval->tag == TCALL) yypvt[-0].pval = funcinv(yypvt[-0].pval); if(yypvt[-0].pval->vtype==TYUNDEFINED && yypvt[-0].pval->vext==0) impldecl(yypvt[-0].pval); else if(yypvt[-0].pval->tag==TNAME && yypvt[-0].pval->vdcldone==0 && yypvt[-0].pval->vext==0 && !inbound) dclit(yypvt[-0].pval); if(yypvt[-0].pval->vtype==TYFIELD) yyval.pval = extrfield(yypvt[-0].pval); } break; case 134: # line 547 "gram.in" { yyval.pval = mkconst(TYLOG, (yypvt[-0].ival == TRUE ? ".true." : ".false.") ); } break; case 135: # line 549 "gram.in" { yyval.pval = typexpr(yypvt[-1].pval,yypvt[-0].pval); } break; case 138: # line 553 "gram.in" { if( !ininit && yypvt[-0].pval->tag== TLIST) yyval.pval = compconst(yypvt[-0].pval); else yypvt[-0].pval->needpar = 1; } break; case 139: # line 557 "gram.in" { yyval.pval = mknode(TAROP,yypvt[-1].ival,yypvt[-2].pval,yypvt[-0].pval); } break; case 140: # line 559 "gram.in" { yyval.pval = mknode(TAROP,yypvt[-1].ival,yypvt[-2].pval,yypvt[-0].pval); } break; case 141: # line 561 "gram.in" { yyval.pval = mknode(TAROP,yypvt[-1].ival,yypvt[-2].pval,yypvt[-0].pval); } break; case 142: # line 563 "gram.in" { if(yypvt[-1].ival==OPMINUS) yyval.pval = mknode(TNEGOP,OPMINUS, yypvt[-0].pval, PNULL); else yyval.pval = yypvt[-0].pval; } break; case 143: # line 567 "gram.in" { yyval.pval = mknode(TASGNOP,yypvt[-1].ival,yypvt[-0].pval,mkint(1)); } break; case 144: # line 569 "gram.in" { yyval.pval = mknode(TRELOP,yypvt[-1].ival,yypvt[-2].pval,yypvt[-0].pval); } break; case 145: # line 571 "gram.in" { yyval.pval = mknode(TLOGOP,yypvt[-1].ival,yypvt[-2].pval,yypvt[-0].pval); } break; case 146: # line 573 "gram.in" { yyval.pval = mknode(TLOGOP,yypvt[-1].ival,yypvt[-2].pval,yypvt[-0].pval); } break; case 147: # line 575 "gram.in" { yyval.pval = mknode(TNOTOP,yypvt[-1].ival,yypvt[-0].pval,PNULL); } break; case 148: # line 577 "gram.in" { if(yypvt[-2].pval->tag == TCALL) { exprerr("may not assign to a function", CNULL); yyval.pval = errnode(); } else yyval.pval = mknode(TASGNOP,yypvt[-1].ival,yypvt[-2].pval,yypvt[-0].pval); } break; case 149: # line 586 "gram.in" { yyval.pval = mknode(TREPOP,0,yypvt[-2].pval,yypvt[-0].pval); } break; case 151: # line 589 "gram.in" { yyval.pval = errnode(); } break; case 152: # line 593 "gram.in" { if(yypvt[-0].pval->tag==TNAME && yypvt[-0].pval->vdcldone==0 && yypvt[-0].pval->vsubs==0 && yypvt[-0].pval->vext==0 && !inbound) dclit(yypvt[-0].pval); } break; case 154: # line 601 "gram.in" { if(yypvt[-0].pval->tag!=TLIST) yypvt[-0].pval = mknode(TLIST,0, mkchain(yypvt[-0].pval,CHNULL), PNULL); if(yypvt[-1].pval->vdim) { if(yypvt[-1].pval->vdcldone==0 && yypvt[-1].pval->vext==0) dclit(yypvt[-1].pval); yyval.pval = subscript(yypvt[-1].pval,yypvt[-0].pval); } else yyval.pval = mkcall(yypvt[-1].pval,yypvt[-0].pval); } break; case 155: # line 613 "gram.in" { yyval.pval = strucelt(yypvt[-2].pval,yypvt[-0].pval); } break; case 156: # line 615 "gram.in" { if(yypvt[-0].pval->tag != TLIST) yypvt[-0].pval = mknode(TLIST,0, mkchain(yypvt[-0].pval,CHNULL), PNULL); yyval.pval = subscript(strucelt(yypvt[-3].pval,yypvt[-1].pval), yypvt[-0].pval); } break; case 157: # line 620 "gram.in" { yyval.pval = mkarrow(yypvt[-2].pval,yypvt[-0].pval); } break; case 158: # line 624 "gram.in" { if(yypvt[-0].pval->varp == 0) mkvar(yypvt[-0].pval); if(inbound) yypvt[-0].pval->varp->vadjdim = 1; yyval.pval = cpexpr(yypvt[-0].pval->varp); } break; case 159: # line 631 "gram.in" { yyval.pval = mknode(TLIST, 0, PNULL, PNULL); } break; case 160: # line 633 "gram.in" { yyval.pval = yypvt[-1].pval; } break; case 161: # line 635 "gram.in" { yyval.pval = mknode(TLIST,0,yypvt[-1].pval,PNULL); } break; case 162: # line 639 "gram.in" { yyval.pval = mkchain(yypvt[-2].pval, mkchain(yypvt[-0].pval, CHNULL) ); } break; case 163: # line 641 "gram.in" { hookup(yypvt[-2].pval, mkchain(yypvt[-0].pval,CHNULL) ); } break; case 164: # line 645 "gram.in" { yyval.pval = esizeof(yypvt[-1].pval->vtype, yypvt[-1].pval->vtypep, yypvt[-1].pval->vdim); frexpr(yypvt[-1].pval); } break; case 165: # line 648 "gram.in" { if(yypvt[-1].pval->attype==TYREAL && yypvt[-1].pval->atprec) yypvt[-1].pval->attype = TYLREAL; yyval.pval = esizeof(yypvt[-1].pval->attype, yypvt[-1].pval->attypep, yypvt[-1].pval->atdim); cfree(yypvt[-1].pval); } break; case 166: # line 654 "gram.in" { yyval.pval = mkint(tailor.ftnsize[FTNINT]/tailor.ftnchwd); } break; case 167: # line 658 "gram.in" { yyval.pval = elenof(yypvt[-1].pval->vtype, yypvt[-1].pval->vtypep, yypvt[-1].pval->vdim); frexpr(yypvt[-1].pval); } break; case 168: # line 661 "gram.in" { yyval.pval = elenof(yypvt[-1].pval->attype, yypvt[-1].pval->attypep, yypvt[-1].pval->atdim); cfree(yypvt[-1].pval); } break; case 169: # line 665 "gram.in" { yyval.pval = mkint(1); } break; case 171: # line 670 "gram.in" { yyval.ival = yypvt[-1].ival; } break; case 174: # line 677 "gram.in" { TEST fprintf(diagfile, "exec done\n"); } break; case 175: # line 681 "gram.in" { yyval.pval = bgnexec(); if(ncases > 0) ncases = 0; } break; case 176: # line 685 "gram.in" { if(yypvt[-2].pval->tag==TCALL) { dclerr("no statement functions in EFL", yypvt[-2].pval->sthead->namep); frexpr(yypvt[-2].pval); frexpr(yypvt[-0].pval); } else exasgn(yypvt[-2].pval,yypvt[-1].ival,yypvt[-0].pval); } break; case 177: # line 696 "gram.in" { exasgn(yypvt[-0].pval, yypvt[-1].ival, mkint(1) ); } break; case 178: # line 698 "gram.in" { excall(yypvt[-0].pval); } break; case 179: # line 700 "gram.in" { excall(yypvt[-0].pval); } break; case 181: # line 703 "gram.in" { TEST fprintf(diagfile, "exec: { stats }\n"); addexec(); } break; case 182: # line 706 "gram.in" { thisexec->labeled = 1; } break; case 183: # line 708 "gram.in" { thisexec->uniffable = 1; popctl(); } break; case 184: # line 710 "gram.in" { thisexec->brnchend = 1; } break; case 185: # line 712 "gram.in" { exio(yypvt[-0].pval, 0); } break; case 186: # line 714 "gram.in" { exnull(); } break; case 187: # line 716 "gram.in" { exnull(); putsii(ICCOMMENT, yypvt[-0].pval); cfree(yypvt[-0].pval); exnull(); } break; case 188: # line 725 "gram.in" { TEST fprintf(diagfile, "exec:empty\n"); } break; case 189: # line 727 "gram.in" { TEST fprintf(diagfile, "exec: continue\n"); } break; case 190: # line 731 "gram.in" { thisexec->copylab = 1; ++blklevel; dclsect = 1; ndecl[blklevel] = 0; nhid [blklevel] = 0; } break; case 191: # line 741 "gram.in" { if(ndecl[blklevel]) unhide(); --blklevel; dclsect = 0; } break; case 192: # line 749 "gram.in" { mklabel(yypvt[-2].pval,YES); } break; case 193: # line 751 "gram.in" { mklabel(mkilab(yypvt[-1].pval),YES); } break; case 194: # line 753 "gram.in" { mklabel(mkilab(yypvt[-3].pval),YES); } break; case 195: # line 755 "gram.in" { brkcase(); mkcase(PNULL,1); } break; case 196: # line 756 "gram.in" { brkcase(); } break; case 198: # line 760 "gram.in" { mkcase(yypvt[-0].pval,1); } break; case 199: # line 762 "gram.in" { mkcase(yypvt[-0].pval,1); } break; case 200: # line 766 "gram.in" { TEST fprintf(diagfile, "if-then-else\n"); i = yypvt[-5].pval->brnchend & yypvt[-0].pval->brnchend; addexec(); yyval.pval = addexec(); thisexec->brnchend = i; TEST fprintf(diagfile, "exec: if(expr) exec else exec\n"); } break; case 201: # line 773 "gram.in" { TEST fprintf(diagfile, "if-then\n"); pushlex = 1; yyclearin; yyval.pval = ifthen(); TEST fprintf(diagfile, "exec: if(expr) exec\n"); } break; case 202: # line 779 "gram.in" { TEST fprintf(diagfile, "repeat done\n"); } break; case 203: # line 781 "gram.in" { TEST fprintf(diagfile, "exec: control exec\n"); yyval.pval = addexec(); } break; case 204: # line 785 "gram.in" { pushctl(STIF,yypvt[-1].pval); } break; case 205: # line 789 "gram.in" { if(thisctl->breaklab == 0) thisctl->breaklab = nextlab(); /* if(thisexec->prevexec->brnchend == 0) */ exgoto(thisctl->breaklab); exlab( indifs[thisctl->indifn] = nextlab() ); } break; case 206: # line 799 "gram.in" { pushctl(STREPEAT, PNULL); } break; case 207: # line 803 "gram.in" { pushlex = 1; yyclearin; yyval.pval = addexec(); exgoto(thisctl->xlab); TEST fprintf(diagfile, " no until\n"); } break; case 208: # line 809 "gram.in" { yyval.pval = addexec(); exnull(); exlab( indifs[thisctl->indifn] = nextlab() ); exifgo(mknode(TNOTOP,OPNOT,yypvt[-1].pval,PNULL), thisctl->xlab); TEST fprintf(diagfile, "until\n"); } break; case 209: # line 818 "gram.in" { exretn(PNULL); } break; case 210: # line 820 "gram.in" { exretn(yypvt[-0].pval); } break; case 212: # line 823 "gram.in" { exgoto(yypvt[-0].ival); } break; case 213: # line 825 "gram.in" { if( !equals(yypvt[-1].pval->namep, "to") ) execerr("go %s ??\n", yypvt[-1].pval->namep); else exgoto(yypvt[-0].ival); } break; case 214: # line 830 "gram.in" { excompgoto(yypvt[-1].pval, yypvt[-0].pval); } break; case 215: # line 832 "gram.in" { if(!equals(yypvt[-2].pval->namep, "to") ) execerr("go %s ??\n", yypvt[-2].pval->namep); else excompgoto(yypvt[-1].pval, yypvt[-0].pval); } break; case 216: # line 839 "gram.in" { yyval.pval = yypvt[-1].pval; } break; case 217: # line 844 "gram.in" { yyval.pval = mkchain(yypvt[-0].ival,CHNULL); } break; case 218: # line 846 "gram.in" { yyval.pval = hookup(yypvt[-2].pval, mkchain(yypvt[-0].ival,CHNULL) ); } break; case 220: # line 851 "gram.in" { yyval.pval = yypvt[-0].pval; } break; case 221: # line 856 "gram.in" { yyval.ival = mklabel(yypvt[-0].pval,NO); } break; case 222: # line 858 "gram.in" { yyval.ival = mklabel(mkilab(yypvt[-0].pval),NO); } break; case 223: # line 860 "gram.in" { yyval.ival = mkcase(yypvt[-0].pval,0); } break; case 224: # line 862 "gram.in" { yyval.ival = mkcase(PNULL,0); } break; case 225: # line 866 "gram.in" { exbrk(yypvt[-0].ival, PNULL, 0); } break; case 226: # line 868 "gram.in" { exbrk(yypvt[-1].ival, yypvt[-0].pval, 0); } break; case 227: # line 870 "gram.in" { exbrk(yypvt[-1].ival, PNULL, yypvt[-0].ival); } break; case 228: # line 872 "gram.in" { exbrk(yypvt[-2].ival,yypvt[-1].pval,yypvt[-0].ival); } break; case 229: # line 874 "gram.in" { exbrk(yypvt[-2].ival,yypvt[-0].pval,yypvt[-1].ival); } break; case 230: # line 877 "gram.in" { yyval.ival = 1; } break; case 231: # line 878 "gram.in" { yyval.ival = 0; } break; case 232: # line 879 "gram.in" { yyval.ival = 0; } break; case 233: # line 882 "gram.in" { yyval.ival = STWHILE; } break; case 234: # line 883 "gram.in" { yyval.ival = STFOR; } break; case 235: # line 884 "gram.in" { yyval.ival = STDO; } break; case 236: # line 885 "gram.in" { yyval.ival = STREPEAT; } break; case 237: # line 886 "gram.in" { yyval.ival = STSWITCH; } break; case 238: # line 887 "gram.in" { yyval.ival = STPROC; } break; case 239: # line 891 "gram.in" { pushctl(STWHILE, yypvt[-1].pval); TEST fprintf(diagfile, "while(expr)\n"); } break; case 240: # line 894 "gram.in" { exlab(thisctl->xlab); if(yypvt[-1].pval) exifgo(mknode(TNOTOP,OPNOT,yypvt[-1].pval,PNULL), thisctl->breaklab = nextlab() ); else exnull(); TEST fprintf(diagfile, "for (forlist)\n"); } break; case 241: # line 901 "gram.in" { pushctl(STSWITCH, simple(LVAL,yypvt[-1].pval)); TEST fprintf(diagfile, "switch (expr)\n"); } break; case 242: # line 904 "gram.in" { pushctl(STDO, yypvt[-0].pval); TEST fprintf(diagfile, "do loop\n"); } break; case 243: # line 909 "gram.in" { yyval.pval = doloop(yypvt[-2].pval, PNULL, PNULL); } break; case 244: # line 911 "gram.in" { yyval.pval = doloop(yypvt[-1].pval, PNULL, PNULL); } break; case 245: # line 913 "gram.in" { yyval.pval = doloop(yypvt[-4].pval, yypvt[-2].pval, PNULL); } break; case 246: # line 915 "gram.in" { yyval.pval = doloop(yypvt[-3].pval, yypvt[-1].pval, PNULL); } break; case 247: # line 917 "gram.in" { yyval.pval = doloop(yypvt[-6].pval,yypvt[-4].pval,yypvt[-2].pval); } break; case 248: # line 919 "gram.in" { yyval.pval = doloop(yypvt[-5].pval,yypvt[-3].pval,yypvt[-1].pval); } break; case 249: # line 923 "gram.in" { pushctl(STFOR, PNULL); } break; case 250: # line 927 "gram.in" { exgoto(thisctl->xlab); exlab(thisctl->nextlab); addexec(); } break; case 251: # line 932 "gram.in" { exgoto(thisctl->xlab); exlab(thisctl->nextlab); addexec(); } break; case 253: # line 942 "gram.in" { addexec(); } break; case 254: # line 944 "gram.in" { addexec(); } break; case 255: # line 947 "gram.in" { yyval.pval = 0; } break; case 257: # line 952 "gram.in" { if(dbgopt) ++dbglevel; } break; case 258: # line 956 "gram.in" { if(dbgopt) --dbglevel; } break; case 259: # line 960 "gram.in" { yyval.pval = mkiost(yypvt[-5].ival, yypvt[-3].pval, yypvt[-1].pval); } break; case 260: # line 963 "gram.in" { yyval.ival = 0; } break; case 261: # line 964 "gram.in" { yyval.ival = 1; } break; case 262: # line 965 "gram.in" { yyval.ival = 2; } break; case 263: # line 966 "gram.in" { yyval.ival = 3; } break; case 265: # line 970 "gram.in" { yyval.pval = NULL; } break; case 266: # line 973 "gram.in" { yyval.pval = mkchain(yypvt[-0].pval,CHNULL); } break; case 267: # line 974 "gram.in" { hookup(yypvt[-2].pval, mkchain(yypvt[-0].pval,CHNULL)); } break; case 268: # line 977 "gram.in" { yyval.pval = mkioitem(yypvt[-0].pval,CNULL); } break; case 269: # line 978 "gram.in" { yyval.pval = mkioitem(yypvt[-2].pval,yypvt[-0].pval); } break; case 270: # line 979 "gram.in" { yyval.pval = mkioitem(PNULL,yypvt[-0].pval); } break; case 271: # line 980 "gram.in" { yyval.pval = mkiogroup(yypvt[-0].pval, CNULL, PNULL); } break; case 272: # line 981 "gram.in" { yyval.pval = mkiogroup(yypvt[-0].pval, CNULL, yypvt[-1].pval); } break; case 273: # line 982 "gram.in" { yyval.pval = mkiogroup(yypvt[-2].pval,yypvt[-0].pval,yypvt[-3].pval); } break; case 274: # line 983 "gram.in" { yyval.pval = mkiogroup(yypvt[-2].pval,yypvt[-0].pval,PNULL); } break; case 275: # line 986 "gram.in" { ++iobrlevel; } break; case 276: # line 987 "gram.in" { --iobrlevel; yyval.pval = yypvt[-1].pval; } break; case 277: # line 991 "gram.in" { yyval.pval = mkformat(yypvt[-0].ival, PNULL, PNULL); } break; case 278: # line 993 "gram.in" { yyval.pval = mkformat(yypvt[-3].ival, yypvt[-1].pval, PNULL); } break; case 279: # line 995 "gram.in" { yyval.pval = mkformat(yypvt[-5].ival,yypvt[-3].pval,yypvt[-1].pval); } break; case 280: # line 997 "gram.in" { yyval.pval = yypvt[-1].pval->leftp; frexpblock(yypvt[-1].pval); } break; case 281: # line 1000 "gram.in" { yyval.ival = yypvt[-1].ival; } break; case 282: # line 1003 "gram.in" { lettneed = YES;} break; case 283: # line 1006 "gram.in" { lettneed = NO; } break; } goto yystack; /* stack new state and value */ }