|
|
1.1 ! root 1: # define EOS 1 ! 2: # define NEWLINE 2 ! 3: # define LPAR 3 ! 4: # define RPAR 4 ! 5: # define LBRACK 5 ! 6: # define RBRACK 6 ! 7: # define COMMA 7 ! 8: # define COLON 8 ! 9: # define ASGNOP 9 ! 10: # define REPOP 10 ! 11: # define OR 11 ! 12: # define AND 12 ! 13: # define NOT 13 ! 14: # define RELOP 14 ! 15: # define ADDOP 15 ! 16: # define MULTOP 16 ! 17: # define POWER 17 ! 18: # define DOUBLEADDOP 18 ! 19: # define ARROW 19 ! 20: # define QUALOP 20 ! 21: # define NAME 21 ! 22: # define OPTNAME 22 ! 23: # define STRUCTNAME 23 ! 24: # define COMNAME 24 ! 25: # define CONST 25 ! 26: # define COMMON 26 ! 27: # define INTERNAL 27 ! 28: # define EXTERNAL 28 ! 29: # define AUTOMATIC 29 ! 30: # define STATIC 30 ! 31: # define VALUE 31 ! 32: # define PROCEDURE 32 ! 33: # define BLOCKDATA 33 ! 34: # define OPTION 34 ! 35: # define INCLUDE 35 ! 36: # define DEFINE 36 ! 37: # define END 37 ! 38: # define INTEGER 38 ! 39: # define REAL 39 ! 40: # define COMPLEX 40 ! 41: # define LOGICAL 41 ! 42: # define CHARACTER 42 ! 43: # define STRUCT 43 ! 44: # define FIELD 44 ! 45: # define ARRAY 45 ! 46: # define DIMENSION 46 ! 47: # define LONG 47 ! 48: # define SHORT 48 ! 49: # define INITIAL 49 ! 50: # define EQUIVALENCE 50 ! 51: # define IMPLICIT 51 ! 52: # define DEBUG 52 ! 53: # define IF 53 ! 54: # define ELSE 54 ! 55: # define WHILE 55 ! 56: # define UNTIL 56 ! 57: # define REPEAT 57 ! 58: # define DO 58 ! 59: # define FOR 59 ! 60: # define SWITCH 60 ! 61: # define CASE 61 ! 62: # define DEFAULT 62 ! 63: # define GO 63 ! 64: # define GOTO 64 ! 65: # define BREAK 65 ! 66: # define EXIT 66 ! 67: # define NEXT 67 ! 68: # define RETURN 68 ! 69: # define CONTINUE 69 ! 70: # define CALL 70 ! 71: # define DOUBLE 71 ! 72: # define PRECISION 72 ! 73: # define DOUBLEPRECISION 73 ! 74: # define SIZEOF 74 ! 75: # define LENGTHOF 75 ! 76: # define LETTER 76 ! 77: # define READ 77 ! 78: # define WRITE 78 ! 79: # define READBIN 79 ! 80: # define WRITEBIN 80 ! 81: # define TRUE 81 ! 82: # define FALSE 82 ! 83: # define ESCAPE 83 ! 84: ! 85: # line 85 "gram.in" ! 86: #include "defs" ! 87: ptr bgnexec(), addexec(), bgnproc(), mkvar(), mkcomm(), mkstruct(), mkarrow(); ! 88: ptr mkiost(), mkioitem(), mkiogroup(), mkformat(); ! 89: ptr funcinv(), extrfield(), typexpr(), strucelt(), mkfield(); ! 90: ptr esizeof(), elenof(), mkilab(); ! 91: ptr ifthen(), doloop(); ! 92: struct varblock *subscript(); ! 93: ! 94: # line 95 "gram.in" ! 95: typedef union { int ival; ptr pval; char *cval; } YYSTYPE; ! 96: ! 97: # line 124 "gram.in" ! 98: extern int prevv; ! 99: extern YYSTYPE prevl; ! 100: ptr p; ! 101: ptr procattrs; ! 102: int i,n; ! 103: static int imptype; ! 104: static int ininit =NO; ! 105: ! 106: #define yyclearin yychar = -1 ! 107: #define yyerrok yyerrflag = 0 ! 108: extern int yychar; ! 109: extern short yyerrflag; ! 110: #ifndef YYMAXDEPTH ! 111: #define YYMAXDEPTH 150 ! 112: #endif ! 113: YYSTYPE yylval, yyval; ! 114: # define YYERRCODE 256 ! 115: ! 116: # line 1009 "gram.in" ! 117: ! 118: ! 119: setyydeb() ! 120: { ! 121: #ifdef YYDEBUG ! 122: yydebug = 1; ! 123: #endif ! 124: } ! 125: short yyexca[] ={ ! 126: -1, 0, ! 127: 0, 1, ! 128: -2, 175, ! 129: -1, 1, ! 130: 0, -1, ! 131: -2, 0, ! 132: -1, 80, ! 133: 9, 152, ! 134: 19, 152, ! 135: 20, 152, ! 136: -2, 178, ! 137: -1, 165, ! 138: 19, 152, ! 139: 20, 152, ! 140: -2, 179, ! 141: -1, 262, ! 142: 6, 191, ! 143: -2, 14, ! 144: -1, 351, ! 145: 14, 0, ! 146: -2, 144, ! 147: }; ! 148: # define YYNPROD 284 ! 149: # define YYLAST 1451 ! 150: short yyact[]={ ! 151: ! 152: 225, 247, 408, 431, 412, 124, 409, 337, 223, 197, ! 153: 157, 20, 258, 224, 185, 156, 19, 6, 140, 3, ! 154: 20, 155, 61, 139, 286, 19, 59, 314, 5, 131, ! 155: 297, 152, 212, 44, 182, 198, 37, 34, 36, 32, ! 156: 33, 35, 21, 22, 16, 191, 14, 135, 38, 39, ! 157: 40, 41, 26, 45, 27, 30, 31, 46, 47, 10, ! 158: 12, 11, 72, 227, 121, 77, 64, 17, 20, 446, ! 159: 66, 60, 413, 19, 179, 189, 425, 58, 195, 196, ! 160: 338, 42, 149, 43, 141, 65, 80, 73, 109, 129, ! 161: 78, 87, 71, 199, 400, 399, 170, 200, 172, 178, ! 162: 167, 175, 176, 177, 154, 211, 233, 305, 120, 315, ! 163: 203, 325, 218, 243, 326, 137, 62, 220, 218, 68, ! 164: 447, 148, 147, 356, 74, 209, 222, 242, 199, 123, ! 165: 204, 256, 200, 201, 202, 213, 229, 216, 215, 214, ! 166: 217, 213, 68, 216, 215, 214, 217, 134, 62, 73, ! 167: 169, 245, 165, 20, 164, 80, 166, 109, 19, 78, ! 168: 87, 278, 76, 132, 260, 133, 273, 161, 201, 202, ! 169: 144, 148, 147, 163, 382, 267, 250, 263, 160, 265, ! 170: 271, 272, 273, 148, 147, 259, 433, 280, 394, 282, ! 171: 148, 147, 228, 268, 269, 270, 239, 279, 69, 287, ! 172: 272, 273, 289, 235, 250, 127, 295, 296, 298, 298, ! 173: 58, 303, 240, 291, 292, 238, 262, 146, 128, 18, ! 174: 65, 252, 251, 344, 343, 449, 307, 148, 147, 55, ! 175: 310, 460, 429, 417, 253, 254, 434, 264, 283, 300, ! 176: 293, 20, 329, 20, 304, 173, 19, 20, 19, 319, ! 177: 322, 321, 19, 171, 372, 428, 316, 330, 429, 317, ! 178: 327, 323, 281, 141, 392, 377, 7, 393, 378, 367, ! 179: 342, 248, 348, 349, 350, 351, 352, 353, 354, 355, ! 180: 335, 364, 143, 154, 365, 357, 360, 234, 339, 363, ! 181: 462, 340, 333, 463, 287, 334, 277, 275, 276, 159, ! 182: 274, 271, 272, 273, 274, 271, 272, 273, 373, 376, ! 183: 255, 158, 375, 159, 380, 145, 302, 371, 366, 358, ! 184: 361, 276, 301, 274, 271, 272, 273, 379, 418, 389, ! 185: 423, 236, 396, 390, 420, 391, 237, 277, 275, 276, ! 186: 414, 274, 271, 272, 273, 398, 134, 416, 331, 397, ! 187: 415, 332, 451, 395, 277, 275, 276, 381, 274, 271, ! 188: 272, 273, 369, 259, 312, 277, 275, 276, 410, 274, ! 189: 271, 272, 273, 279, 445, 407, 279, 436, 465, 427, ! 190: 250, 150, 419, 250, 277, 275, 276, 421, 274, 271, ! 191: 272, 273, 125, 406, 20, 125, 403, 306, 285, 19, ! 192: 284, 424, 422, 308, 74, 122, 277, 275, 276, 249, ! 193: 274, 271, 272, 273, 219, 210, 207, 206, 435, 48, ! 194: 205, 439, 437, 50, 438, 52, 53, 162, 442, 126, ! 195: 410, 125, 441, 440, 444, 388, 443, 410, 448, 450, ! 196: 387, 386, 385, 383, 347, 453, 456, 345, 457, 458, ! 197: 150, 49, 414, 459, 51, 411, 142, 9, 461, 454, ! 198: 188, 370, 186, 208, 464, 187, 107, 192, 68, 99, ! 199: 44, 97, 180, 37, 34, 36, 32, 33, 35, 96, ! 200: 426, 95, 266, 174, 88, 38, 39, 40, 41, 26, ! 201: 45, 27, 30, 31, 46, 47, 455, 86, 84, 341, ! 202: 168, 452, 277, 275, 276, 116, 274, 271, 272, 273, ! 203: 277, 275, 276, 261, 274, 271, 272, 273, 42, 82, ! 204: 43, 193, 194, 150, 113, 114, 111, 112, 195, 196, ! 205: 384, 230, 328, 188, 221, 186, 226, 336, 187, 153, ! 206: 192, 68, 241, 44, 70, 180, 37, 34, 36, 32, ! 207: 33, 35, 151, 63, 136, 54, 8, 75, 38, 39, ! 208: 40, 41, 26, 45, 27, 30, 31, 46, 47, 430, ! 209: 13, 277, 275, 276, 404, 274, 271, 272, 273, 232, ! 210: 277, 275, 276, 231, 274, 271, 272, 273, 4, 2, ! 211: 102, 42, 432, 43, 193, 194, 110, 113, 114, 111, ! 212: 112, 195, 196, 150, 181, 29, 23, 288, 25, 294, ! 213: 299, 290, 346, 188, 85, 186, 15, 246, 187, 67, ! 214: 192, 68, 184, 44, 183, 180, 37, 34, 36, 32, ! 215: 33, 35, 28, 56, 309, 24, 318, 138, 38, 39, ! 216: 40, 41, 26, 45, 27, 30, 31, 46, 47, 401, ! 217: 130, 257, 320, 1, 0, 277, 275, 276, 0, 274, ! 218: 271, 272, 273, 0, 0, 0, 0, 0, 0, 0, ! 219: 0, 42, 0, 43, 193, 194, 0, 113, 114, 111, ! 220: 112, 195, 196, 0, 150, 244, 0, 0, 0, 0, ! 221: 0, 0, 0, 0, 188, 0, 186, 0, 0, 187, ! 222: 0, 192, 68, 190, 44, 0, 180, 37, 34, 36, ! 223: 32, 33, 35, 0, 0, 0, 0, 0, 0, 38, ! 224: 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, ! 225: 374, 0, 0, 0, 0, 0, 277, 275, 276, 0, ! 226: 274, 271, 272, 273, 0, 0, 0, 0, 0, 0, ! 227: 0, 0, 42, 0, 43, 193, 194, 150, 113, 114, ! 228: 111, 112, 195, 196, 0, 0, 0, 188, 0, 186, ! 229: 0, 0, 187, 0, 192, 68, 190, 44, 0, 180, ! 230: 37, 34, 36, 32, 33, 35, 0, 0, 0, 0, ! 231: 0, 0, 38, 39, 40, 41, 26, 45, 27, 30, ! 232: 31, 46, 47, 368, 0, 0, 0, 0, 0, 277, ! 233: 275, 276, 0, 274, 271, 272, 273, 0, 0, 0, ! 234: 0, 0, 0, 0, 0, 42, 0, 43, 193, 194, ! 235: 0, 113, 114, 111, 112, 195, 196, 150, 0, 0, ! 236: 0, 0, 0, 0, 0, 0, 0, 188, 0, 186, ! 237: 0, 0, 187, 0, 192, 68, 190, 44, 0, 180, ! 238: 37, 34, 36, 32, 33, 35, 0, 0, 0, 0, ! 239: 0, 0, 38, 39, 40, 41, 362, 45, 27, 30, ! 240: 31, 46, 47, 313, 0, 277, 275, 276, 311, 274, ! 241: 271, 272, 273, 0, 277, 275, 276, 0, 274, 271, ! 242: 272, 273, 0, 0, 0, 42, 0, 43, 193, 194, ! 243: 0, 113, 114, 111, 112, 195, 196, 0, 150, 0, ! 244: 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, ! 245: 186, 0, 0, 187, 0, 192, 68, 190, 44, 0, ! 246: 180, 37, 34, 36, 32, 33, 35, 0, 0, 0, ! 247: 0, 0, 0, 38, 39, 40, 41, 359, 45, 27, ! 248: 30, 31, 46, 47, 0, 0, 0, 0, 0, 0, ! 249: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 250: 0, 0, 0, 0, 0, 0, 42, 0, 43, 193, ! 251: 194, 0, 113, 114, 111, 112, 195, 196, 44, 0, ! 252: 0, 37, 34, 36, 32, 33, 35, 0, 0, 0, ! 253: 190, 14, 0, 38, 39, 40, 41, 26, 45, 27, ! 254: 30, 31, 46, 47, 10, 12, 11, 0, 0, 0, ! 255: 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, ! 256: 57, 0, 0, 0, 0, 0, 42, 0, 43, 0, ! 257: 0, 0, 79, 0, 0, 91, 62, 0, 44, 92, ! 258: 0, 37, 34, 36, 32, 33, 35, 21, 22, 0, ! 259: 0, 0, 0, 38, 39, 40, 41, 26, 45, 27, ! 260: 30, 31, 46, 47, 0, 0, 90, 104, 0, 106, ! 261: 190, 105, 116, 115, 108, 94, 93, 101, 100, 118, ! 262: 119, 117, 98, 103, 81, 0, 42, 0, 43, 0, ! 263: 0, 113, 114, 111, 112, 0, 62, 89, 44, 0, ! 264: 0, 37, 34, 36, 32, 33, 35, 0, 0, 0, ! 265: 0, 0, 0, 38, 39, 40, 41, 26, 45, 27, ! 266: 30, 31, 46, 47, 10, 12, 11, 0, 0, 0, ! 267: 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, ! 268: 37, 34, 36, 32, 33, 35, 42, 0, 43, 0, ! 269: 0, 190, 38, 39, 40, 41, 26, 45, 27, 30, ! 270: 31, 46, 47, 10, 12, 11, 0, 0, 0, 0, ! 271: 0, 0, 0, 0, 0, 0, 0, 150, 405, 0, ! 272: 0, 0, 0, 0, 0, 42, 0, 43, 0, 0, ! 273: 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, ! 274: 37, 34, 36, 32, 33, 35, 0, 0, 0, 0, ! 275: 0, 324, 38, 39, 40, 41, 26, 45, 27, 30, ! 276: 31, 46, 47, 0, 0, 0, 150, 402, 0, 0, ! 277: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 278: 0, 0, 0, 0, 0, 42, 44, 43, 0, 37, ! 279: 34, 36, 32, 33, 35, 0, 0, 0, 0, 0, ! 280: 0, 38, 39, 40, 41, 26, 45, 27, 30, 31, ! 281: 46, 47, 0, 0, 0, 0, 0, 57, 0, 0, ! 282: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 283: 0, 0, 0, 62, 42, 44, 43, 0, 37, 34, ! 284: 36, 32, 33, 35, 0, 0, 0, 0, 0, 0, ! 285: 38, 39, 40, 41, 26, 45, 27, 30, 31, 46, ! 286: 47, 0, 0, 0, 150, 0, 0, 0, 0, 0, ! 287: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 288: 0, 0, 0, 42, 44, 43, 0, 37, 34, 36, ! 289: 32, 33, 35, 0, 0, 0, 0, 0, 0, 38, ! 290: 39, 40, 41, 26, 45, 27, 30, 31, 46, 47, ! 291: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 292: 44, 0, 0, 37, 34, 36, 32, 33, 35, 0, ! 293: 0, 0, 42, 0, 43, 38, 39, 40, 41, 26, ! 294: 45, 27, 30, 31, 46, 47, 0, 0, 0, 0, ! 295: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ! 296: 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, ! 297: 43 }; ! 298: short yypact[]={ ! 299: ! 300: 10,-1000, 450, 450, 453, 450, 450,-1000,-1000,1035, ! 301: 98,-1000, 121, 141,-1000,1034,-1000,-1000,-1000, 402, ! 302: 402,-1000,-1000,-1000,-1000,-1000, 428, 426,-1000,-1000, ! 303: -1000,-1000,-1000,-1000,-1000,-1000,-1000, 202,-1000,-1000, ! 304: -1000,-1000, 17,-1000,-1000, 142,-1000,-1000,-1000,-1000, ! 305: -1000,-1000,-1000,-1000, 93,-1000,-1000,1095,-1000, 275, ! 306: -1000, 402,-1000, 308,-1000, 208,-1000, 378,-1000,1377, ! 307: 304, 292,-1000, 171, 98, 424,-1000,-1000, 164, 98, ! 308: -1000, 98,-1000,-1000,1034,-1000,-1000,-1000,-1000,-1000, ! 309: -1000, 245,-1000, 237,-1000,-1000,-1000,-1000, 754,-1000, ! 310: 107, 109, 417,-1000, 414,-1000, 413,-1000, 412,-1000, ! 311: 80,-1000,-1000,-1000,-1000, 411, 754,-1000,-1000,-1000, ! 312: -1000,-1000,-1000,-1000,-1000, 754, 520,-1000,-1000,-1000, ! 313: -1000,-1000,-1000,-1000,-1000, 69, 280, 194, 330,-1000, ! 314: -1000, 275,1292, 95, 187, 98,-1000, 106, 90,-1000, ! 315: 681, 264,-1000, 406,1377,-1000,-1000, 402, 401, 98, ! 316: 98, 306, 127, 754, 102,-1000, 102,-1000,-1000,-1000, ! 317: -1000,-1000, 229,-1000, 754,-1000,-1000,-1000, 355, 152, ! 318: -1000,-1000,1341,-1000,-1000,-1000, 754, 98, 754,-1000, ! 319: -1000,-1000, -3, 397, 395,-1000,-1000,-1000, 600,-1000, ! 320: -1000, 754,-1000, 72, 107, 754, 754, 754, 754, 315, ! 321: 754, 86, 82,-1000,-1000,-1000,-1000,-1000,-1000,-1000, ! 322: 396, 520, 884, 360,-1000, 875,-1000, 85, 85, 341, ! 323: 1134,-1000, 975,-1000,-1000, 89,1095,-1000,-1000,-1000, ! 324: -1000, 754, 378,-1000,-1000, 344, 288,-1000,1377, 4, ! 325: -1000,-1000,-1000, 102, 102,-1000,-1000, 284,-1000,-1000, ! 326: 355,-1000,-1000,-1000,-1000,-1000, 216, 355, 446, 443, ! 327: -1000, 754, 754, 754, 754, 754, 754, 754, 754,-1000, ! 328: 149, 102, 290, 103, 915, 834,-1000, 355, 754, 355, ! 329: 277,-1000,-1000, 600, 262, 355, 799, 358, 355,-1000, ! 330: 247,-1000,-1000, 726,-1000,-1000,-1000,-1000, 754, 261, ! 331: -1000,-1000,-1000, 520, 353,-1000, 158,-1000, 442,-1000, ! 332: -1000, 441, 440, 439, 434,-1000,-1000,-1000, 754, 355, ! 333: -1000,-1000, 754,-1000, 754,-1000, 260,-1000, 173,-1000, ! 334: 95, 326,-1000,-1000, 754, 41,-1000, 38, 184, 149, ! 335: 149, 165, 309, 290, 355, 355,-1000, 645,1243, 392, ! 336: 570,1194, 389, 355,-1000, 72,-1000, 447,-1000,-1000, ! 337: -1000, 346,-1000, 226,-1000,-1000, 327,-1000, 520,-1000, ! 338: 355,-1000,-1000,1134, 324,-1000,-1000,-1000,-1000, 355, ! 339: 355, 355,-1000, 4, 0,-1000,-1000,-1000, 355,-1000, ! 340: 376,-1000,-1000,-1000,-1000,-1000,-1000,-1000, 251,-1000, ! 341: 561,-1000, 228, 335,-1000,-1000,-1000,-1000,-1000,-1000, ! 342: 754,-1000,-1000, 432,-1000,-1000,-1000, 754,-1000, 447, ! 343: -1000,-1000, 371, 44,-1000, 217, 447, 348,-1000, 500, ! 344: -1000,-1000, 492,-1000,-1000, 754,-1000,-1000,-1000,-1000, ! 345: 225,-1000,-1000,-1000,-1000,-1000, 286,-1000,-1000,-1000, ! 346: -1000,-1000,-1000, 754, 374,-1000 }; ! 347: short yypgo[]={ ! 348: ! 349: 0, 653, 18, 652, 17, 47, 219, 651, 12, 22, ! 350: 27, 650, 23, 637, 636, 34, 92, 456, 67, 635, ! 351: 108, 64, 634, 8, 13, 633, 26, 71, 21, 15, ! 352: 632, 29, 0, 74, 14, 75, 624, 622, 70, 619, ! 353: 617, 616, 614, 612, 611, 35, 24, 72, 30, 610, ! 354: 609, 2, 6, 4, 3, 608, 606, 605, 604, 45, ! 355: 596, 32, 592, 590, 9, 589, 419, 588, 583, 28, ! 356: 579, 570, 557, 556, 555, 554, 5, 553, 186, 552, ! 357: 1, 544, 66, 542, 31, 539, 537, 7, 62, 10, ! 358: 534, 532, 63, 531, 530, 65, 519, 513, 500, 499, ! 359: 498, 497, 484, 483, 482, 481, 480, 479, 471, 469, ! 360: 466, 463, 461, 377 }; ! 361: short yyr1[]={ ! 362: ! 363: 0, 1, 1, 1, 1, 1, 1, 1, 66, 3, ! 364: 3, 3, 3, 5, 70, 5, 67, 67, 67, 67, ! 365: 72, 71, 71, 6, 6, 7, 7, 8, 65, 73, ! 366: 74, 74, 74, 75, 75, 75, 69, 68, 76, 13, ! 367: 13, 13, 12, 12, 2, 2, 2, 2, 2, 2, ! 368: 14, 14, 14, 77, 77, 83, 82, 79, 79, 84, ! 369: 84, 85, 86, 86, 87, 87, 81, 81, 88, 16, ! 370: 16, 17, 17, 18, 18, 20, 20, 90, 21, 22, ! 371: 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, ! 372: 91, 27, 9, 15, 15, 28, 28, 29, 29, 29, ! 373: 29, 29, 29, 29, 56, 56, 56, 56, 56, 19, ! 374: 19, 92, 10, 10, 55, 55, 55, 55, 55, 55, ! 375: 30, 30, 30, 11, 11, 93, 94, 31, 89, 89, ! 376: 57, 57, 32, 32, 32, 32, 32, 32, 32, 32, ! 377: 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, ! 378: 32, 32, 33, 38, 38, 38, 38, 38, 39, 34, ! 379: 34, 34, 40, 40, 36, 36, 36, 37, 37, 37, ! 380: 58, 58, 59, 59, 4, 41, 95, 95, 95, 95, ! 381: 95, 95, 95, 95, 95, 95, 95, 95, 102, 102, ! 382: 98, 99, 100, 100, 100, 100, 103, 100, 104, 104, ! 383: 42, 42, 42, 42, 105, 106, 107, 43, 43, 101, ! 384: 101, 101, 101, 101, 101, 101, 45, 44, 44, 46, ! 385: 46, 64, 64, 64, 64, 109, 109, 109, 109, 109, ! 386: 60, 60, 60, 61, 61, 61, 61, 61, 61, 108, ! 387: 108, 108, 108, 47, 47, 47, 47, 47, 47, 110, ! 388: 111, 111, 49, 112, 112, 48, 48, 96, 97, 35, ! 389: 63, 63, 63, 63, 50, 50, 51, 51, 52, 52, ! 390: 52, 52, 52, 52, 52, 113, 53, 54, 54, 54, ! 391: 54, 62, 78, 80 }; ! 392: short yyr2[]={ ! 393: ! 394: 0, 0, 2, 2, 4, 2, 2, 1, 1, 2, ! 395: 2, 2, 2, 0, 0, 3, 1, 2, 4, 5, ! 396: 1, 1, 2, 1, 1, 1, 3, 1, 2, 1, ! 397: 0, 2, 3, 1, 3, 3, 1, 1, 0, 1, ! 398: 2, 3, 1, 1, 2, 4, 2, 4, 2, 2, ! 399: 1, 2, 3, 1, 3, 0, 4, 1, 3, 1, ! 400: 4, 1, 1, 3, 1, 3, 1, 3, 3, 3, ! 401: 3, 1, 2, 2, 2, 0, 1, 0, 4, 1, ! 402: 3, 1, 3, 1, 1, 0, 1, 1, 3, 2, ! 403: 0, 5, 1, 1, 2, 1, 2, 1, 2, 1, ! 404: 4, 4, 1, 1, 1, 1, 1, 1, 1, 5, ! 405: 5, 0, 0, 1, 1, 1, 1, 1, 2, 1, ! 406: 1, 4, 2, 1, 1, 0, 0, 6, 1, 1, ! 407: 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, ! 408: 3, 3, 2, 2, 3, 3, 3, 2, 3, 3, ! 409: 1, 1, 1, 1, 2, 3, 4, 3, 1, 2, ! 410: 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, ! 411: 1, 3, 1, 1, 2, 0, 3, 2, 1, 2, ! 412: 3, 5, 2, 1, 1, 1, 1, 1, 0, 1, ! 413: 0, 0, 3, 2, 4, 3, 0, 5, 1, 3, ! 414: 8, 4, 4, 3, 4, 0, 1, 1, 5, 1, ! 415: 2, 1, 2, 3, 3, 4, 3, 1, 3, 1, ! 416: 2, 1, 1, 2, 1, 1, 2, 2, 3, 3, ! 417: 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, ! 418: 4, 4, 1, 4, 3, 6, 5, 8, 7, 2, ! 419: 2, 4, 2, 2, 4, 0, 1, 2, 0, 6, ! 420: 1, 1, 1, 1, 1, 0, 1, 3, 1, 3, ! 421: 2, 1, 2, 4, 3, 0, 4, 1, 4, 6, ! 422: 3, 3, 0, 0 }; ! 423: short yychk[]={ ! 424: ! 425: -1000, -1, -65, -2, -67, -69, -4, 256, -73, -17, ! 426: 49, 51, 50, -71, 36, -41, 34, -18, -6, -29, ! 427: -89, 32, 33, -56, -19, -55, 42, 44, -30, -57, ! 428: 45, 46, 29, 30, 27, 31, 28, 26, 38, 39, ! 429: 40, 41, 71, 73, 23, 43, 47, 48, -66, 1, ! 430: -66, 1, -66, -66, -74, -6, -25, 5, -18, -26, ! 431: -27, -9, 21, -77, -82, -33, -38, -39, 21, -78, ! 432: -81, -16, -88, -33, 3, -72, 21, -95, -33, 18, ! 433: -38, 70, -96, 5,-100, -42,-101, -35,-102, 83, ! 434: 52, 21, 25, 62, 61,-105,-107,-108, 68,-109, ! 435: 64, 63, -63, 69, 53, 57, 55,-110, 60, -47, ! 436: -60, 79, 80, 77, 78, 59, 58, 67, 65, 66, ! 437: -20, -21, 3, -20, -76, 3, 3, 3, 16, 72, ! 438: -11, -31, 21, 23, 5, -5, -75, 22, -13, -12, ! 439: -2, -26, -17, 7, -20, 7, 9, 20, 19, -34, ! 440: 3, -79, -84, -85, -15, -28, -29, -89, 7, 7, ! 441: 7, -16, 3, 9, -33, -38, -33, -4, -98, -95, ! 442: -76, 8, -76, 8,-103, -76, -76, -76, -32, -33, ! 443: 25, -58, -15, -36, -37, -34, 15, 18, 13, -35, ! 444: 256, -59, 20, 74, 75, 81, 82, -64, -45, 21, ! 445: 25, 61, 62, 3, 21, 3, 3, 3,-111, -4, ! 446: 3, 25, -61, 55, 59, 58, 57, 60, 32, 3, ! 447: -32, -90, -32, -23, -24, -32, 16, -92, -92, -76, ! 448: -93, -68, -70, 37, 7, 9, 1, 6, -27, 9, ! 449: -82, -83, 21, 23, 4, -32, -40, -80, 7, 3, ! 450: -28, -21, -88, -33, -33, 4, 4, -7, -8, -9, ! 451: -32, -97, -5, -76, 8, -76,-104, -32, -4, -4, ! 452: -4, 15, 16, 17, 14, 11, 12, 10, 9, -34, ! 453: -32, -33, -32, -59, 3, 3, -46, -32, 7, -32, ! 454: -44, -64, -64, -45, -50, -32, -32, -48, -32, -49, ! 455: -48, 7, 1, -32, -61, 25, 1, -76, 7, -22, ! 456: -23, 4, 4, 8, -10, 24, -10, -31, -14, -2, ! 457: -3, -2, -4, -69, 256, 22, 25, -12, -91, -32, ! 458: -34, 4, 7, 4, 7, -84, -86, -87, 76, 4, ! 459: 7, -99, -76, 8, 7, 1, -43, 1, -32, -32, ! 460: -32, -32, -32, -32, -32, -32, 20, -32, -15, 42, ! 461: -32, -15, 42, -32, 4, 7, -46, 7, 4, 4, ! 462: -112, -4, 7, -76, 4, -76, -32, 4, 7, -24, ! 463: -32, 4, 16, 1, -94, 1, 1, 1, 1, -32, ! 464: -32, -32, 4, 7, 15, -8, 6, -76, -32, 54, ! 465: 56, 4, 4, 4, 4, 4, 4, -64, -51, -52, ! 466: -32, 8, -53, -47, 5, 4, 1, 7, 1, -76, ! 467: 7, -23, -2, 6, -87, 76,-106, 3, 4, 7, ! 468: 8, -54, -62, -78, 8, -53,-113, -76, -76, -32, ! 469: 1, -76, -32, -52, -54, 3, 25, 76, -54, 8, ! 470: -51, 4, 1, -76, -4, 4, -32, -80, -80, -54, ! 471: 6, -76, 4, 7, -32, 4 }; ! 472: short yydef[]={ ! 473: ! 474: -2, -2, 0, 0, 0, 0, 0, 7, 30, 85, ! 475: 0, 282, 0, 16, 36, 188, 29, 71, 21, 75, ! 476: 75, 23, 24, 97, 38, 99, 0, 0, 102, 103, ! 477: 128, 129, 104, 105, 106, 107, 108, 0, 114, 115, ! 478: 116, 117, 0, 119, 120, 0, 130, 131, 2, 8, ! 479: 3, 13, 5, 6, 28, 22, 44, 0, 72, 86, ! 480: 87, 75, 92, 46, 53, 0, 152, 153, 158, 0, ! 481: 48, 49, 66, 0, 0, 17, 20, 174, 0, 0, ! 482: -2, 0, 175, 190, 188, 183, 184, 185, 186, 187, ! 483: 38, 158, 38, 0, 196, 38, 38, 38, 209, 211, ! 484: 0, 0, 0, 189, 0, 206, 0, 175, 0, 242, ! 485: 225, 260, 261, 262, 263, 0, 0, 230, 231, 232, ! 486: 73, 76, 77, 74, 98, 0, 0, 111, 111, 118, ! 487: 38, 122, 123, 124, 125, 14, 31, 33, 0, 39, ! 488: 42, 43, 85, 0, 89, 0, 55, 0, 0, 154, ! 489: 0, 283, 57, 59, 61, 93, 95, 0, 0, 0, ! 490: 0, 0, 0, 0, 177, -2, 0, 258, 13, 182, ! 491: 257, 38, 193, 38, 0, 175, 175, 175, 210, 132, ! 492: 133, 134, 0, 136, 137, 138, 0, 0, 0, 150, ! 493: 151, 170, 0, 0, 0, 172, 173, 212, 0, 221, ! 494: 222, 0, 224, 0, 0, 265, 0, 255, 255, 0, ! 495: 0, 226, 227, 233, 234, 235, 236, 237, 238, 249, ! 496: 38, 0, 0, 0, 81, 83, 84, 112, 112, 0, ! 497: 0, 4, 175, 37, 32, 0, 40, 45, 88, 90, ! 498: 54, 0, 155, 157, 159, 0, 0, 47, 0, 0, ! 499: 94, 96, 67, 70, 69, 68, 18, 0, 25, 27, ! 500: 176, 180, -2, 192, 38, 195, 0, 198, 0, 0, ! 501: 203, 0, 0, 0, 0, 0, 0, 0, 0, 135, ! 502: 142, 143, 147, 0, 0, 0, 214, 219, 0, 223, ! 503: 0, 217, 213, 0, 0, 264, 0, 0, 256, 175, ! 504: 0, 250, 38, 0, 228, 229, 38, 244, 0, 0, ! 505: 79, 100, 101, 0, 0, 113, 0, 121, 126, 50, ! 506: 15, 0, 0, 0, 0, 34, 35, 41, 0, 56, ! 507: 156, 160, 0, 161, 0, 58, 0, 62, 64, 19, ! 508: 0, 0, 194, 38, 0, 201, 202, 207, 139, 140, ! 509: 141, -2, 145, 146, 149, 148, 171, 0, 0, 0, ! 510: 0, 0, 0, 220, 216, 0, 215, 0, 204, 239, ! 511: 240, 0, 252, 0, 241, 243, 38, 78, 0, 82, ! 512: 83, 109, 110, 51, 0, 9, 10, 11, 12, 91, ! 513: 162, 163, 60, 0, 0, 26, 181, 197, 199, 205, ! 514: 0, 164, 165, 166, 167, 168, 169, 218, 0, 266, ! 515: 268, 282, 271, 0, 275, 253, 38, 251, 38, 246, ! 516: 0, 80, 52, 0, 63, 65, 38, 0, 259, 0, ! 517: 282, 270, 277, 0, 282, 272, 0, 0, 245, 38, ! 518: 127, 175, 0, 267, 269, 0, 283, 283, 274, 282, ! 519: 0, 254, 38, 248, 200, 208, 0, 280, 281, 273, ! 520: 276, 247, 278, 0, 0, 279 }; ! 521: # ! 522: # define YYFLAG -1000 ! 523: # define YYERROR goto yyerrlab ! 524: # define YYACCEPT return(0) ! 525: # define YYABORT return(1) ! 526: ! 527: /* parser for yacc output */ ! 528: ! 529: int yydebug = 0; /* 1 for debugging */ ! 530: YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */ ! 531: int yychar = -1; /* current input token number */ ! 532: int yynerrs = 0; /* number of errors */ ! 533: short yyerrflag = 0; /* error recovery flag */ ! 534: ! 535: yyparse() { ! 536: ! 537: short yys[YYMAXDEPTH]; ! 538: short yyj, yym; ! 539: register YYSTYPE *yypvt; ! 540: register short yystate, *yyps, yyn; ! 541: register YYSTYPE *yypv; ! 542: register short *yyxi; ! 543: ! 544: yystate = 0; ! 545: yychar = -1; ! 546: yynerrs = 0; ! 547: yyerrflag = 0; ! 548: yyps= &yys[-1]; ! 549: yypv= &yyv[-1]; ! 550: ! 551: yystack: /* put a state and value onto the stack */ ! 552: ! 553: if( yydebug ) printf( "state %d, char 0%o\n", yystate, yychar ); ! 554: if( ++yyps> &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); } ! 555: *yyps = yystate; ! 556: ++yypv; ! 557: *yypv = yyval; ! 558: ! 559: yynewstate: ! 560: ! 561: yyn = yypact[yystate]; ! 562: ! 563: if( yyn<= YYFLAG ) goto yydefault; /* simple state */ ! 564: ! 565: if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0; ! 566: if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault; ! 567: ! 568: if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */ ! 569: yychar = -1; ! 570: yyval = yylval; ! 571: yystate = yyn; ! 572: if( yyerrflag > 0 ) --yyerrflag; ! 573: goto yystack; ! 574: } ! 575: ! 576: yydefault: ! 577: /* default state action */ ! 578: ! 579: if( (yyn=yydef[yystate]) == -2 ) { ! 580: if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0; ! 581: /* look through exception table */ ! 582: ! 583: for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */ ! 584: ! 585: while( *(yyxi+=2) >= 0 ){ ! 586: if( *yyxi == yychar ) break; ! 587: } ! 588: if( (yyn = yyxi[1]) < 0 ) return(0); /* accept */ ! 589: } ! 590: ! 591: if( yyn == 0 ){ /* error */ ! 592: /* error ... attempt to resume parsing */ ! 593: ! 594: switch( yyerrflag ){ ! 595: ! 596: case 0: /* brand new error */ ! 597: ! 598: yyerror( "syntax error" ); ! 599: yyerrlab: ! 600: ++yynerrs; ! 601: ! 602: case 1: ! 603: case 2: /* incompletely recovered error ... try again */ ! 604: ! 605: yyerrflag = 3; ! 606: ! 607: /* find a state where "error" is a legal shift action */ ! 608: ! 609: while ( yyps >= yys ) { ! 610: yyn = yypact[*yyps] + YYERRCODE; ! 611: if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){ ! 612: yystate = yyact[yyn]; /* simulate a shift of "error" */ ! 613: goto yystack; ! 614: } ! 615: yyn = yypact[*yyps]; ! 616: ! 617: /* the current yyps has no shift onn "error", pop stack */ ! 618: ! 619: if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] ); ! 620: --yyps; ! 621: --yypv; ! 622: } ! 623: ! 624: /* there is no state on the stack with an error shift ... abort */ ! 625: ! 626: yyabort: ! 627: return(1); ! 628: ! 629: ! 630: case 3: /* no shift yet; clobber input char */ ! 631: ! 632: if( yydebug ) printf( "error recovery discards char %d\n", yychar ); ! 633: ! 634: if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */ ! 635: yychar = -1; ! 636: goto yynewstate; /* try again in the same state */ ! 637: ! 638: } ! 639: ! 640: } ! 641: ! 642: /* reduction by production yyn */ ! 643: ! 644: if( yydebug ) printf("reduce %d\n",yyn); ! 645: yyps -= yyr2[yyn]; ! 646: yypvt = yypv; ! 647: yypv -= yyr2[yyn]; ! 648: yyval = yypv[1]; ! 649: yym=yyn; ! 650: /* consult goto table to find next state */ ! 651: yyn = yyr1[yyn]; ! 652: yyj = yypgo[yyn] + *yyps + 1; ! 653: if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]]; ! 654: switch(yym){ ! 655: ! 656: case 1: ! 657: # line 138 "gram.in" ! 658: { graal = PARSEOF; } break; ! 659: case 2: ! 660: # line 140 "gram.in" ! 661: { graal = PARSOPT; } break; ! 662: case 3: ! 663: # line 142 "gram.in" ! 664: { graal = PARSDCL; doinits(yypvt[-1].pval); frchain( & yypvt[-1].pval); } break; ! 665: case 4: ! 666: # line 144 "gram.in" ! 667: { endproc(); graal = PARSPROC; } break; ! 668: case 5: ! 669: # line 146 "gram.in" ! 670: { graal = PARSDEF; } break; ! 671: case 6: ! 672: # line 148 "gram.in" ! 673: { graal = PARSERR; } break; ! 674: case 7: ! 675: # line 150 "gram.in" ! 676: { graal = PARSERR; ! 677: errmess("Syntax error", "", ""); ! 678: } break; ! 679: case 8: ! 680: # line 155 "gram.in" ! 681: { eofneed = 1; } break; ! 682: case 9: ! 683: # line 158 "gram.in" ! 684: { if(!dclsect) ! 685: warn("declaration amid executables"); ! 686: yyval.pval = bgnexec(); ! 687: TEST fprintf(diagfile,"stat: dcl\n"); ! 688: doinits(yypvt[-1].pval); frchain( & yypvt[-1].pval); } break; ! 689: case 10: ! 690: # line 164 "gram.in" ! 691: { if(dclsect && yypvt[-1].pval->tag!=TSTFUNCT) ! 692: dclsect = 0; ! 693: TEST fprintf(diagfile, "stat: exec\n"); } break; ! 694: case 11: ! 695: # line 168 "gram.in" ! 696: { yyval.pval = bgnexec(); } break; ! 697: case 12: ! 698: # line 170 "gram.in" ! 699: { yyerrok; ! 700: errmess("Syntax error", "", ""); ! 701: yyval.pval = bgnexec(); ! 702: } break; ! 703: case 13: ! 704: # line 177 "gram.in" ! 705: { yyval.pval = bgnexec(); } break; ! 706: case 14: ! 707: # line 178 "gram.in" ! 708: { thisexec->copylab = 1; } break; ! 709: case 15: ! 710: # line 179 "gram.in" ! 711: { yyval.pval = addexec(); thisexec->copylab = 0; } break; ! 712: case 16: ! 713: # line 183 "gram.in" ! 714: { procname = 0; thisargs = 0; ! 715: if(procclass == 0) procclass = PRMAIN; ! 716: goto proctype; ! 717: } break; ! 718: case 17: ! 719: # line 188 "gram.in" ! 720: { thisargs = 0; goto proctype; } break; ! 721: case 18: ! 722: # line 190 "gram.in" ! 723: { thisargs = 0; goto proctype; } break; ! 724: case 19: ! 725: # line 192 "gram.in" ! 726: { thisargs = yypvt[-1].pval; ! 727: proctype: ! 728: if(procattrs) ! 729: if(procname == 0) ! 730: dclerr("attributes on unnamed procedure", ""); ! 731: else { ! 732: attvars(procattrs, mkchain(procname,CHNULL)); ! 733: procclass = PRFUNCT; ! 734: } ! 735: fprintf(diagfile, "Procedure %s:\n", procnm() ); ! 736: if(verbose) ! 737: fprintf(diagfile, " Pass 1\n"); ! 738: } break; ! 739: case 20: ! 740: # line 208 "gram.in" ! 741: { procname = mkvar(yypvt[-0].pval); ! 742: extname(procname); ! 743: } break; ! 744: case 21: ! 745: # line 214 "gram.in" ! 746: { procattrs = 0; } break; ! 747: case 22: ! 748: # line 216 "gram.in" ! 749: { procattrs = yypvt[-1].pval; ! 750: if(procclass == 0) procclass = PRFUNCT; ! 751: } break; ! 752: case 23: ! 753: # line 222 "gram.in" ! 754: { yyval.pval = bgnproc(); procclass = 0; } break; ! 755: case 24: ! 756: # line 224 "gram.in" ! 757: { yyval.pval = bgnproc(); procclass = PRBLOCK; } break; ! 758: case 25: ! 759: # line 228 "gram.in" ! 760: { yyval.pval = mkchain(yypvt[-0].pval,CHNULL); } break; ! 761: case 26: ! 762: # line 230 "gram.in" ! 763: { hookup(yypvt[-2].pval, mkchain(yypvt[-0].pval,CHNULL) ); } break; ! 764: case 27: ! 765: # line 234 "gram.in" ! 766: { if(yypvt[-0].pval->vclass == CLUNDEFINED) ! 767: yypvt[-0].pval->vclass = CLARG; ! 768: else dclerr("argument already used", yypvt[-0].pval->sthead->namep); ! 769: } break; ! 770: case 28: ! 771: # line 240 "gram.in" ! 772: { optneed = 0; } break; ! 773: case 29: ! 774: # line 244 "gram.in" ! 775: { if(blklevel > 0) ! 776: { ! 777: execerr("Option statement inside procedure", ""); ! 778: execerr("procedure %s terminated prematurely", procnm()); ! 779: endproc(); ! 780: } ! 781: optneed = 1; ! 782: } break; ! 783: case 33: ! 784: # line 260 "gram.in" ! 785: { setopt(yypvt[-0].pval,CNULL); cfree(yypvt[-0].pval); } break; ! 786: case 34: ! 787: # line 262 "gram.in" ! 788: { setopt(yypvt[-2].pval,yypvt[-0].pval); cfree(yypvt[-2].pval); cfree(yypvt[-0].pval); } break; ! 789: case 35: ! 790: # line 264 "gram.in" ! 791: { setopt(yypvt[-2].pval,yypvt[-0].pval->leftp); cfree(yypvt[-2].pval); cfree(yypvt[-0].pval); } break; ! 792: case 36: ! 793: # line 268 "gram.in" ! 794: { defneed = 1; } break; ! 795: case 37: ! 796: # line 272 "gram.in" ! 797: { if(thisctl->subtype != STPROC) ! 798: execerr("control stack not empty upon END", ""); ! 799: exnull(); ! 800: popctl(); ! 801: } break; ! 802: case 38: ! 803: # line 280 "gram.in" ! 804: { igeol=1; /* continue past newlines */ } break; ! 805: case 41: ! 806: # line 285 "gram.in" ! 807: { yyval.pval = hookup(yypvt[-2].pval,yypvt[-0].pval); } break; ! 808: case 44: ! 809: # line 293 "gram.in" ! 810: { attvars(yypvt[-1].pval,yypvt[-0].pval); yyval.pval = yypvt[-0].pval; } break; ! 811: case 45: ! 812: # line 295 "gram.in" ! 813: { attvars(yypvt[-3].pval,yypvt[-1].pval); yyval.pval = yypvt[-1].pval; } break; ! 814: case 46: ! 815: # line 297 "gram.in" ! 816: { yyval.pval = 0; } break; ! 817: case 47: ! 818: # line 299 "gram.in" ! 819: { yyval.pval = 0; } break; ! 820: case 48: ! 821: # line 301 "gram.in" ! 822: { yyval.pval = 0; } break; ! 823: case 49: ! 824: # line 303 "gram.in" ! 825: { mkequiv(yypvt[-0].pval); yyval.pval = 0; } break; ! 826: case 52: ! 827: # line 309 "gram.in" ! 828: { yyval.pval = hookup(yypvt[-2].pval,yypvt[-0].pval); } break; ! 829: case 55: ! 830: # line 316 "gram.in" ! 831: {ininit = YES; } break; ! 832: case 56: ! 833: # line 317 "gram.in" ! 834: { ininit = NO; mkinit(yypvt[-3].pval,yypvt[-0].pval); frexpr(yypvt[-3].pval); } break; ! 835: case 59: ! 836: # line 325 "gram.in" ! 837: { setimpl(imptype, 'a', 'z'); } break; ! 838: case 61: ! 839: # line 330 "gram.in" ! 840: { imptype = yypvt[-0].pval->attype; cfree(yypvt[-0].pval); } break; ! 841: case 64: ! 842: # line 338 "gram.in" ! 843: { setimpl(imptype, yypvt[-0].ival, yypvt[-0].ival); } break; ! 844: case 65: ! 845: # line 340 "gram.in" ! 846: { setimpl(imptype, yypvt[-2].ival, yypvt[-0].ival); } break; ! 847: case 68: ! 848: # line 348 "gram.in" ! 849: { mkequiv(yypvt[-1].pval); } break; ! 850: case 69: ! 851: # line 352 "gram.in" ! 852: { yyval.pval = mkchain(yypvt[-2].pval, mkchain(yypvt[-0].pval,CHNULL)); } break; ! 853: case 70: ! 854: # line 354 "gram.in" ! 855: { yyval.pval = hookup(yypvt[-2].pval, mkchain(yypvt[-0].pval,CHNULL)); } break; ! 856: case 72: ! 857: # line 358 "gram.in" ! 858: { attatt(yypvt[-1].pval,yypvt[-0].pval); } break; ! 859: case 73: ! 860: # line 361 "gram.in" ! 861: { yypvt[-1].pval->atdim = yypvt[-0].pval; } break; ! 862: case 74: ! 863: # line 362 "gram.in" ! 864: { yyval.pval = ALLOC(atblock); yyval.pval->atdim = yypvt[-0].pval; } break; ! 865: case 75: ! 866: # line 365 "gram.in" ! 867: { yyval.pval = 0; } break; ! 868: case 77: ! 869: # line 369 "gram.in" ! 870: { inbound = 1; } break; ! 871: case 78: ! 872: # line 370 "gram.in" ! 873: { inbound = 0; yyval.pval = arrays = mkchain(yypvt[-1].pval,arrays); } break; ! 874: case 80: ! 875: # line 374 "gram.in" ! 876: { hookup(yypvt[-2].pval,yypvt[-0].pval); } break; ! 877: case 81: ! 878: # line 378 "gram.in" ! 879: { ! 880: yyval.pval = ALLOC(dimblock); ! 881: yyval.pval->lowerb = 0; ! 882: yyval.pval->upperb = yypvt[-0].pval; ! 883: } break; ! 884: case 82: ! 885: # line 384 "gram.in" ! 886: { ! 887: yyval.pval = ALLOC(dimblock); ! 888: yyval.pval->lowerb = yypvt[-2].pval; ! 889: yyval.pval->upperb = yypvt[-0].pval; ! 890: } break; ! 891: case 84: ! 892: # line 392 "gram.in" ! 893: { yyval.pval = 0; } break; ! 894: case 85: ! 895: # line 395 "gram.in" ! 896: { yyval.pval = 0; } break; ! 897: case 88: ! 898: # line 400 "gram.in" ! 899: { hookup(yypvt[-2].pval,yypvt[-0].pval); } break; ! 900: case 89: ! 901: # line 404 "gram.in" ! 902: { ! 903: if(yypvt[-0].pval!=0) ! 904: if(yypvt[-1].pval->vdim==0) ! 905: yypvt[-1].pval->vdim = yypvt[-0].pval; ! 906: else if(!eqdim(yypvt[-0].pval,yypvt[-1].pval->vdim)) ! 907: dclerr("multiple dimension", yypvt[-1].pval->namep); ! 908: yyval.pval = mkchain(yypvt[-1].pval,CHNULL); ! 909: } break; ! 910: case 90: ! 911: # line 412 "gram.in" ! 912: { ininit = YES; } break; ! 913: case 91: ! 914: # line 413 "gram.in" ! 915: { ! 916: ininit = NO; ! 917: if(yypvt[-2].ival!=OPASGN) ! 918: dclerr("illegal initialization operator", yypvt[-4].pval->sthead->namep); ! 919: if(yypvt[-3].pval!=0) ! 920: if(yypvt[-4].pval->vdim==0) ! 921: yypvt[-4].pval->vdim = yypvt[-3].pval; ! 922: else if(!eqdim(yypvt[-3].pval,yypvt[-4].pval->vdim)) ! 923: dclerr("multiple dimension", yypvt[-4].pval->sthead->namep); ! 924: if(yypvt[-0].pval!=0 && yypvt[-4].pval->vinit!=0) ! 925: dclerr("multiple initialization", yypvt[-4].pval->sthead->namep); ! 926: yypvt[-4].pval->vinit = yypvt[-0].pval; ! 927: yyval.pval = mkchain(yypvt[-4].pval,CHNULL); ! 928: } break; ! 929: case 92: ! 930: # line 430 "gram.in" ! 931: { yyval.pval = mkvar(yypvt[-0].pval); } break; ! 932: case 94: ! 933: # line 435 "gram.in" ! 934: { attatt(yypvt[-1].pval,yypvt[-0].pval); } break; ! 935: case 96: ! 936: # line 440 "gram.in" ! 937: { yyval.pval = ALLOC(atblock); yyval.pval->atdim = yypvt[-0].pval; } break; ! 938: case 97: ! 939: # line 444 "gram.in" ! 940: { ! 941: yyval.pval = ALLOC(atblock); ! 942: if(yypvt[-0].ival == CLEXT) ! 943: yyval.pval->atext = 1; ! 944: yyval.pval->atclass = yypvt[-0].ival; ! 945: } break; ! 946: case 98: ! 947: # line 451 "gram.in" ! 948: { ! 949: yyval.pval = ALLOC(atblock); ! 950: yyval.pval->atclass = CLCOMMON; ! 951: yyval.pval->atcommon = yypvt[-1].pval; ! 952: } break; ! 953: case 99: ! 954: # line 457 "gram.in" ! 955: { yyval.pval = ALLOC(atblock); yyval.pval->attype = yypvt[-0].ival; } break; ! 956: case 100: ! 957: # line 459 "gram.in" ! 958: { yyval.pval = ALLOC(atblock); yyval.pval->attype = TYCHAR; yyval.pval->attypep = yypvt[-1].pval; } break; ! 959: case 101: ! 960: # line 461 "gram.in" ! 961: { yyval.pval = ALLOC(atblock); yyval.pval->attype = TYFIELD; ! 962: yyval.pval->attypep = mkfield(yypvt[-1].pval); } break; ! 963: case 102: ! 964: # line 464 "gram.in" ! 965: { yyval.pval = ALLOC(atblock); yyval.pval->attype = TYSTRUCT; ! 966: yyval.pval->attypep = yypvt[-0].pval; } break; ! 967: case 103: ! 968: # line 467 "gram.in" ! 969: { yyval.pval = ALLOC(atblock); yyval.pval->atprec = yypvt[-0].ival; } break; ! 970: case 104: ! 971: # line 470 "gram.in" ! 972: { yyval.ival = CLAUTO; ! 973: fprintf(diagfile,"AUTOMATIC not yet implemented\n"); } break; ! 974: case 105: ! 975: # line 472 "gram.in" ! 976: { yyval.ival = CLSTAT; } break; ! 977: case 106: ! 978: # line 473 "gram.in" ! 979: { yyval.ival = CLSTAT; } break; ! 980: case 107: ! 981: # line 474 "gram.in" ! 982: { yyval.ival = CLVALUE; ! 983: fprintf(diagfile, "VALUE not yet implemented\n"); } break; ! 984: case 108: ! 985: # line 476 "gram.in" ! 986: { yyval.ival = CLEXT; } break; ! 987: case 109: ! 988: # line 480 "gram.in" ! 989: { yyval.pval = yypvt[-1].pval; } break; ! 990: case 110: ! 991: # line 482 "gram.in" ! 992: { yyval.pval = yypvt[-1].pval; } break; ! 993: case 111: ! 994: # line 485 "gram.in" ! 995: { comneed = 1; } break; ! 996: case 112: ! 997: # line 488 "gram.in" ! 998: { yyval.pval = mkcomm(""); } break; ! 999: case 114: ! 1000: # line 492 "gram.in" ! 1001: { yyval.ival = TYINT; } break; ! 1002: case 115: ! 1003: # line 493 "gram.in" ! 1004: { yyval.ival = TYREAL; } break; ! 1005: case 116: ! 1006: # line 494 "gram.in" ! 1007: { yyval.ival = TYCOMPLEX; } break; ! 1008: case 117: ! 1009: # line 495 "gram.in" ! 1010: { yyval.ival = TYLOG; } break; ! 1011: case 118: ! 1012: # line 497 "gram.in" ! 1013: { yyval.ival = TYLREAL; /* holdover from Fortran */ } break; ! 1014: case 119: ! 1015: # line 499 "gram.in" ! 1016: { yyval.ival = TYLREAL; /* holdover from Fortran */ } break; ! 1017: case 120: ! 1018: # line 503 "gram.in" ! 1019: { yyval.pval = yypvt[-0].pval->varp; } break; ! 1020: case 121: ! 1021: # line 505 "gram.in" ! 1022: { yyval.pval = mkstruct(yypvt[-2].pval,yypvt[-0].pval); } break; ! 1023: case 122: ! 1024: # line 507 "gram.in" ! 1025: { yyval.pval = mkstruct(PNULL,yypvt[-0].pval); } break; ! 1026: case 123: ! 1027: # line 511 "gram.in" ! 1028: { if(yypvt[-0].pval->varp && yypvt[-0].pval->varp->blklevel<blklevel) ! 1029: hide(yypvt[-0].pval); ! 1030: yypvt[-0].pval->tag = TSTRUCT; ! 1031: } break; ! 1032: case 124: ! 1033: # line 516 "gram.in" ! 1034: { if(yypvt[-0].pval->varp) ! 1035: if(yypvt[-0].pval->varp->blklevel<blklevel) ! 1036: hide(yypvt[-0].pval); ! 1037: else dclerr("multiple declaration for type %s", yypvt[-0].pval->namep); ! 1038: } break; ! 1039: case 125: ! 1040: # line 523 "gram.in" ! 1041: { ++instruct; } break; ! 1042: case 126: ! 1043: # line 523 "gram.in" ! 1044: { --instruct; } break; ! 1045: case 127: ! 1046: # line 524 "gram.in" ! 1047: { yyval.pval = yypvt[-3].pval; prevv = -1; } break; ! 1048: case 130: ! 1049: # line 531 "gram.in" ! 1050: { yyval.ival = 1; } break; ! 1051: case 131: ! 1052: # line 532 "gram.in" ! 1053: { yyval.ival = 0; } break; ! 1054: case 132: ! 1055: # line 535 "gram.in" ! 1056: { if(yypvt[-0].pval->tag == TCALL) ! 1057: yypvt[-0].pval = funcinv(yypvt[-0].pval); ! 1058: if(yypvt[-0].pval->vtype==TYUNDEFINED && yypvt[-0].pval->vext==0) ! 1059: impldecl(yypvt[-0].pval); ! 1060: else if(yypvt[-0].pval->tag==TNAME && yypvt[-0].pval->vdcldone==0 ! 1061: && yypvt[-0].pval->vext==0 && !inbound) ! 1062: dclit(yypvt[-0].pval); ! 1063: if(yypvt[-0].pval->vtype==TYFIELD) ! 1064: yyval.pval = extrfield(yypvt[-0].pval); ! 1065: } break; ! 1066: case 134: ! 1067: # line 547 "gram.in" ! 1068: { yyval.pval = mkconst(TYLOG, (yypvt[-0].ival == TRUE ? ".true." : ".false.") ); } break; ! 1069: case 135: ! 1070: # line 549 "gram.in" ! 1071: { yyval.pval = typexpr(yypvt[-1].pval,yypvt[-0].pval); } break; ! 1072: case 138: ! 1073: # line 553 "gram.in" ! 1074: { if( !ininit && yypvt[-0].pval->tag== TLIST) ! 1075: yyval.pval = compconst(yypvt[-0].pval); ! 1076: else yypvt[-0].pval->needpar = 1; } break; ! 1077: case 139: ! 1078: # line 557 "gram.in" ! 1079: { yyval.pval = mknode(TAROP,yypvt[-1].ival,yypvt[-2].pval,yypvt[-0].pval); } break; ! 1080: case 140: ! 1081: # line 559 "gram.in" ! 1082: { yyval.pval = mknode(TAROP,yypvt[-1].ival,yypvt[-2].pval,yypvt[-0].pval); } break; ! 1083: case 141: ! 1084: # line 561 "gram.in" ! 1085: { yyval.pval = mknode(TAROP,yypvt[-1].ival,yypvt[-2].pval,yypvt[-0].pval); } break; ! 1086: case 142: ! 1087: # line 563 "gram.in" ! 1088: { if(yypvt[-1].ival==OPMINUS) ! 1089: yyval.pval = mknode(TNEGOP,OPMINUS, yypvt[-0].pval, PNULL); ! 1090: else yyval.pval = yypvt[-0].pval; } break; ! 1091: case 143: ! 1092: # line 567 "gram.in" ! 1093: { yyval.pval = mknode(TASGNOP,yypvt[-1].ival,yypvt[-0].pval,mkint(1)); } break; ! 1094: case 144: ! 1095: # line 569 "gram.in" ! 1096: { yyval.pval = mknode(TRELOP,yypvt[-1].ival,yypvt[-2].pval,yypvt[-0].pval); } break; ! 1097: case 145: ! 1098: # line 571 "gram.in" ! 1099: { yyval.pval = mknode(TLOGOP,yypvt[-1].ival,yypvt[-2].pval,yypvt[-0].pval); } break; ! 1100: case 146: ! 1101: # line 573 "gram.in" ! 1102: { yyval.pval = mknode(TLOGOP,yypvt[-1].ival,yypvt[-2].pval,yypvt[-0].pval); } break; ! 1103: case 147: ! 1104: # line 575 "gram.in" ! 1105: { yyval.pval = mknode(TNOTOP,yypvt[-1].ival,yypvt[-0].pval,PNULL); } break; ! 1106: case 148: ! 1107: # line 577 "gram.in" ! 1108: { if(yypvt[-2].pval->tag == TCALL) ! 1109: { ! 1110: exprerr("may not assign to a function", CNULL); ! 1111: yyval.pval = errnode(); ! 1112: } ! 1113: else ! 1114: yyval.pval = mknode(TASGNOP,yypvt[-1].ival,yypvt[-2].pval,yypvt[-0].pval); ! 1115: } break; ! 1116: case 149: ! 1117: # line 586 "gram.in" ! 1118: { yyval.pval = mknode(TREPOP,0,yypvt[-2].pval,yypvt[-0].pval); } break; ! 1119: case 151: ! 1120: # line 589 "gram.in" ! 1121: { yyval.pval = errnode(); } break; ! 1122: case 152: ! 1123: # line 593 "gram.in" ! 1124: { if(yypvt[-0].pval->tag==TNAME && yypvt[-0].pval->vdcldone==0 && ! 1125: yypvt[-0].pval->vsubs==0 && yypvt[-0].pval->vext==0 && !inbound) ! 1126: dclit(yypvt[-0].pval); ! 1127: } break; ! 1128: case 154: ! 1129: # line 601 "gram.in" ! 1130: { ! 1131: if(yypvt[-0].pval->tag!=TLIST) ! 1132: yypvt[-0].pval = mknode(TLIST,0, mkchain(yypvt[-0].pval,CHNULL), PNULL); ! 1133: if(yypvt[-1].pval->vdim) ! 1134: { ! 1135: if(yypvt[-1].pval->vdcldone==0 && yypvt[-1].pval->vext==0) ! 1136: dclit(yypvt[-1].pval); ! 1137: yyval.pval = subscript(yypvt[-1].pval,yypvt[-0].pval); ! 1138: } ! 1139: else yyval.pval = mkcall(yypvt[-1].pval,yypvt[-0].pval); ! 1140: } break; ! 1141: case 155: ! 1142: # line 613 "gram.in" ! 1143: { yyval.pval = strucelt(yypvt[-2].pval,yypvt[-0].pval); } break; ! 1144: case 156: ! 1145: # line 615 "gram.in" ! 1146: { if(yypvt[-0].pval->tag != TLIST) ! 1147: yypvt[-0].pval = mknode(TLIST,0, mkchain(yypvt[-0].pval,CHNULL), PNULL); ! 1148: yyval.pval = subscript(strucelt(yypvt[-3].pval,yypvt[-1].pval), yypvt[-0].pval); ! 1149: } break; ! 1150: case 157: ! 1151: # line 620 "gram.in" ! 1152: { yyval.pval = mkarrow(yypvt[-2].pval,yypvt[-0].pval); } break; ! 1153: case 158: ! 1154: # line 624 "gram.in" ! 1155: { if(yypvt[-0].pval->varp == 0) mkvar(yypvt[-0].pval); ! 1156: if(inbound) ! 1157: yypvt[-0].pval->varp->vadjdim = 1; ! 1158: yyval.pval = cpexpr(yypvt[-0].pval->varp); } break; ! 1159: case 159: ! 1160: # line 631 "gram.in" ! 1161: { yyval.pval = mknode(TLIST, 0, PNULL, PNULL); } break; ! 1162: case 160: ! 1163: # line 633 "gram.in" ! 1164: { yyval.pval = yypvt[-1].pval; } break; ! 1165: case 161: ! 1166: # line 635 "gram.in" ! 1167: { yyval.pval = mknode(TLIST,0,yypvt[-1].pval,PNULL); } break; ! 1168: case 162: ! 1169: # line 639 "gram.in" ! 1170: { yyval.pval = mkchain(yypvt[-2].pval, mkchain(yypvt[-0].pval, CHNULL) ); } break; ! 1171: case 163: ! 1172: # line 641 "gram.in" ! 1173: { hookup(yypvt[-2].pval, mkchain(yypvt[-0].pval,CHNULL) ); } break; ! 1174: case 164: ! 1175: # line 645 "gram.in" ! 1176: { yyval.pval = esizeof(yypvt[-1].pval->vtype, yypvt[-1].pval->vtypep, yypvt[-1].pval->vdim); ! 1177: frexpr(yypvt[-1].pval); } break; ! 1178: case 165: ! 1179: # line 648 "gram.in" ! 1180: { if(yypvt[-1].pval->attype==TYREAL && yypvt[-1].pval->atprec) ! 1181: yypvt[-1].pval->attype = TYLREAL; ! 1182: yyval.pval = esizeof(yypvt[-1].pval->attype, yypvt[-1].pval->attypep, yypvt[-1].pval->atdim); ! 1183: cfree(yypvt[-1].pval); ! 1184: } break; ! 1185: case 166: ! 1186: # line 654 "gram.in" ! 1187: { yyval.pval = mkint(tailor.ftnsize[FTNINT]/tailor.ftnchwd); } break; ! 1188: case 167: ! 1189: # line 658 "gram.in" ! 1190: { yyval.pval = elenof(yypvt[-1].pval->vtype, yypvt[-1].pval->vtypep, yypvt[-1].pval->vdim); ! 1191: frexpr(yypvt[-1].pval); } break; ! 1192: case 168: ! 1193: # line 661 "gram.in" ! 1194: { yyval.pval = elenof(yypvt[-1].pval->attype, yypvt[-1].pval->attypep, yypvt[-1].pval->atdim); ! 1195: cfree(yypvt[-1].pval); ! 1196: } break; ! 1197: case 169: ! 1198: # line 665 "gram.in" ! 1199: { yyval.pval = mkint(1); } break; ! 1200: case 171: ! 1201: # line 670 "gram.in" ! 1202: { yyval.ival = yypvt[-1].ival; } break; ! 1203: case 174: ! 1204: # line 677 "gram.in" ! 1205: { TEST fprintf(diagfile, "exec done\n"); } break; ! 1206: case 175: ! 1207: # line 681 "gram.in" ! 1208: { yyval.pval = bgnexec(); if(ncases > 0) ncases = 0; } break; ! 1209: case 176: ! 1210: # line 685 "gram.in" ! 1211: { ! 1212: if(yypvt[-2].pval->tag==TCALL) ! 1213: { ! 1214: dclerr("no statement functions in EFL", ! 1215: yypvt[-2].pval->sthead->namep); ! 1216: frexpr(yypvt[-2].pval); ! 1217: frexpr(yypvt[-0].pval); ! 1218: } ! 1219: else exasgn(yypvt[-2].pval,yypvt[-1].ival,yypvt[-0].pval); ! 1220: } break; ! 1221: case 177: ! 1222: # line 696 "gram.in" ! 1223: { exasgn(yypvt[-0].pval, yypvt[-1].ival, mkint(1) ); } break; ! 1224: case 178: ! 1225: # line 698 "gram.in" ! 1226: { excall(yypvt[-0].pval); } break; ! 1227: case 179: ! 1228: # line 700 "gram.in" ! 1229: { excall(yypvt[-0].pval); } break; ! 1230: case 181: ! 1231: # line 703 "gram.in" ! 1232: { TEST fprintf(diagfile, "exec: { stats }\n"); ! 1233: addexec(); } break; ! 1234: case 182: ! 1235: # line 706 "gram.in" ! 1236: { thisexec->labeled = 1; } break; ! 1237: case 183: ! 1238: # line 708 "gram.in" ! 1239: { thisexec->uniffable = 1; popctl(); } break; ! 1240: case 184: ! 1241: # line 710 "gram.in" ! 1242: { thisexec->brnchend = 1; } break; ! 1243: case 185: ! 1244: # line 712 "gram.in" ! 1245: { exio(yypvt[-0].pval, 0); } break; ! 1246: case 186: ! 1247: # line 714 "gram.in" ! 1248: { exnull(); } break; ! 1249: case 187: ! 1250: # line 716 "gram.in" ! 1251: { ! 1252: exnull(); ! 1253: putsii(ICCOMMENT, yypvt[-0].pval); ! 1254: cfree(yypvt[-0].pval); ! 1255: exnull(); ! 1256: } break; ! 1257: case 188: ! 1258: # line 725 "gram.in" ! 1259: { TEST fprintf(diagfile, "exec:empty\n"); } break; ! 1260: case 189: ! 1261: # line 727 "gram.in" ! 1262: { TEST fprintf(diagfile, "exec: continue\n"); } break; ! 1263: case 190: ! 1264: # line 731 "gram.in" ! 1265: { ! 1266: thisexec->copylab = 1; ! 1267: ++blklevel; ! 1268: dclsect = 1; ! 1269: ndecl[blklevel] = 0; ! 1270: nhid [blklevel] = 0; ! 1271: } break; ! 1272: case 191: ! 1273: # line 741 "gram.in" ! 1274: { ! 1275: if(ndecl[blklevel]) unhide(); ! 1276: --blklevel; ! 1277: dclsect = 0; ! 1278: } break; ! 1279: case 192: ! 1280: # line 749 "gram.in" ! 1281: { mklabel(yypvt[-2].pval,YES); } break; ! 1282: case 193: ! 1283: # line 751 "gram.in" ! 1284: { mklabel(mkilab(yypvt[-1].pval),YES); } break; ! 1285: case 194: ! 1286: # line 753 "gram.in" ! 1287: { mklabel(mkilab(yypvt[-3].pval),YES); } break; ! 1288: case 195: ! 1289: # line 755 "gram.in" ! 1290: { brkcase(); mkcase(PNULL,1); } break; ! 1291: case 196: ! 1292: # line 756 "gram.in" ! 1293: { brkcase(); } break; ! 1294: case 198: ! 1295: # line 760 "gram.in" ! 1296: { mkcase(yypvt[-0].pval,1); } break; ! 1297: case 199: ! 1298: # line 762 "gram.in" ! 1299: { mkcase(yypvt[-0].pval,1); } break; ! 1300: case 200: ! 1301: # line 766 "gram.in" ! 1302: { TEST fprintf(diagfile, "if-then-else\n"); ! 1303: i = yypvt[-5].pval->brnchend & yypvt[-0].pval->brnchend; ! 1304: addexec(); ! 1305: yyval.pval = addexec(); ! 1306: thisexec->brnchend = i; ! 1307: TEST fprintf(diagfile, "exec: if(expr) exec else exec\n"); } break; ! 1308: case 201: ! 1309: # line 773 "gram.in" ! 1310: { TEST fprintf(diagfile, "if-then\n"); ! 1311: pushlex = 1; ! 1312: yyclearin; ! 1313: yyval.pval = ifthen(); ! 1314: TEST fprintf(diagfile, "exec: if(expr) exec\n"); } break; ! 1315: case 202: ! 1316: # line 779 "gram.in" ! 1317: { TEST fprintf(diagfile, "repeat done\n"); } break; ! 1318: case 203: ! 1319: # line 781 "gram.in" ! 1320: { TEST fprintf(diagfile, "exec: control exec\n"); yyval.pval = addexec(); } break; ! 1321: case 204: ! 1322: # line 785 "gram.in" ! 1323: { pushctl(STIF,yypvt[-1].pval); } break; ! 1324: case 205: ! 1325: # line 789 "gram.in" ! 1326: { ! 1327: if(thisctl->breaklab == 0) ! 1328: thisctl->breaklab = nextlab(); ! 1329: /* if(thisexec->prevexec->brnchend == 0) */ ! 1330: exgoto(thisctl->breaklab); ! 1331: exlab( indifs[thisctl->indifn] = nextlab() ); ! 1332: } break; ! 1333: case 206: ! 1334: # line 799 "gram.in" ! 1335: { pushctl(STREPEAT, PNULL); } break; ! 1336: case 207: ! 1337: # line 803 "gram.in" ! 1338: { pushlex = 1; ! 1339: yyclearin; ! 1340: yyval.pval = addexec(); ! 1341: exgoto(thisctl->xlab); ! 1342: TEST fprintf(diagfile, " no until\n"); } break; ! 1343: case 208: ! 1344: # line 809 "gram.in" ! 1345: { yyval.pval = addexec(); ! 1346: exnull(); ! 1347: exlab( indifs[thisctl->indifn] = nextlab() ); ! 1348: exifgo(mknode(TNOTOP,OPNOT,yypvt[-1].pval,PNULL), thisctl->xlab); ! 1349: TEST fprintf(diagfile, "until\n"); ! 1350: } break; ! 1351: case 209: ! 1352: # line 818 "gram.in" ! 1353: { exretn(PNULL); } break; ! 1354: case 210: ! 1355: # line 820 "gram.in" ! 1356: { exretn(yypvt[-0].pval); } break; ! 1357: case 212: ! 1358: # line 823 "gram.in" ! 1359: { exgoto(yypvt[-0].ival); } break; ! 1360: case 213: ! 1361: # line 825 "gram.in" ! 1362: { if( !equals(yypvt[-1].pval->namep, "to") ) ! 1363: execerr("go %s ??\n", yypvt[-1].pval->namep); ! 1364: else exgoto(yypvt[-0].ival); ! 1365: } break; ! 1366: case 214: ! 1367: # line 830 "gram.in" ! 1368: { excompgoto(yypvt[-1].pval, yypvt[-0].pval); } break; ! 1369: case 215: ! 1370: # line 832 "gram.in" ! 1371: { if(!equals(yypvt[-2].pval->namep, "to") ) ! 1372: execerr("go %s ??\n", yypvt[-2].pval->namep); ! 1373: else excompgoto(yypvt[-1].pval, yypvt[-0].pval); ! 1374: } break; ! 1375: case 216: ! 1376: # line 839 "gram.in" ! 1377: { yyval.pval = yypvt[-1].pval; } break; ! 1378: case 217: ! 1379: # line 844 "gram.in" ! 1380: { yyval.pval = mkchain(yypvt[-0].ival,CHNULL); } break; ! 1381: case 218: ! 1382: # line 846 "gram.in" ! 1383: { yyval.pval = hookup(yypvt[-2].pval, mkchain(yypvt[-0].ival,CHNULL) ); } break; ! 1384: case 220: ! 1385: # line 851 "gram.in" ! 1386: { yyval.pval = yypvt[-0].pval; } break; ! 1387: case 221: ! 1388: # line 856 "gram.in" ! 1389: { yyval.ival = mklabel(yypvt[-0].pval,NO); } break; ! 1390: case 222: ! 1391: # line 858 "gram.in" ! 1392: { yyval.ival = mklabel(mkilab(yypvt[-0].pval),NO); } break; ! 1393: case 223: ! 1394: # line 860 "gram.in" ! 1395: { yyval.ival = mkcase(yypvt[-0].pval,0); } break; ! 1396: case 224: ! 1397: # line 862 "gram.in" ! 1398: { yyval.ival = mkcase(PNULL,0); } break; ! 1399: case 225: ! 1400: # line 866 "gram.in" ! 1401: { exbrk(yypvt[-0].ival, PNULL, 0); } break; ! 1402: case 226: ! 1403: # line 868 "gram.in" ! 1404: { exbrk(yypvt[-1].ival, yypvt[-0].pval, 0); } break; ! 1405: case 227: ! 1406: # line 870 "gram.in" ! 1407: { exbrk(yypvt[-1].ival, PNULL, yypvt[-0].ival); } break; ! 1408: case 228: ! 1409: # line 872 "gram.in" ! 1410: { exbrk(yypvt[-2].ival,yypvt[-1].pval,yypvt[-0].ival); } break; ! 1411: case 229: ! 1412: # line 874 "gram.in" ! 1413: { exbrk(yypvt[-2].ival,yypvt[-0].pval,yypvt[-1].ival); } break; ! 1414: case 230: ! 1415: # line 877 "gram.in" ! 1416: { yyval.ival = 1; } break; ! 1417: case 231: ! 1418: # line 878 "gram.in" ! 1419: { yyval.ival = 0; } break; ! 1420: case 232: ! 1421: # line 879 "gram.in" ! 1422: { yyval.ival = 0; } break; ! 1423: case 233: ! 1424: # line 882 "gram.in" ! 1425: { yyval.ival = STWHILE; } break; ! 1426: case 234: ! 1427: # line 883 "gram.in" ! 1428: { yyval.ival = STFOR; } break; ! 1429: case 235: ! 1430: # line 884 "gram.in" ! 1431: { yyval.ival = STDO; } break; ! 1432: case 236: ! 1433: # line 885 "gram.in" ! 1434: { yyval.ival = STREPEAT; } break; ! 1435: case 237: ! 1436: # line 886 "gram.in" ! 1437: { yyval.ival = STSWITCH; } break; ! 1438: case 238: ! 1439: # line 887 "gram.in" ! 1440: { yyval.ival = STPROC; } break; ! 1441: case 239: ! 1442: # line 891 "gram.in" ! 1443: { pushctl(STWHILE, yypvt[-1].pval); ! 1444: TEST fprintf(diagfile, "while(expr)\n"); } break; ! 1445: case 240: ! 1446: # line 894 "gram.in" ! 1447: { exlab(thisctl->xlab); ! 1448: if(yypvt[-1].pval) ! 1449: exifgo(mknode(TNOTOP,OPNOT,yypvt[-1].pval,PNULL), ! 1450: thisctl->breaklab = nextlab() ); ! 1451: else exnull(); ! 1452: TEST fprintf(diagfile, "for (forlist)\n"); } break; ! 1453: case 241: ! 1454: # line 901 "gram.in" ! 1455: { pushctl(STSWITCH, simple(LVAL,yypvt[-1].pval)); ! 1456: TEST fprintf(diagfile, "switch (expr)\n"); } break; ! 1457: case 242: ! 1458: # line 904 "gram.in" ! 1459: { pushctl(STDO, yypvt[-0].pval); ! 1460: TEST fprintf(diagfile, "do loop\n"); } break; ! 1461: case 243: ! 1462: # line 909 "gram.in" ! 1463: { yyval.pval = doloop(yypvt[-2].pval, PNULL, PNULL); } break; ! 1464: case 244: ! 1465: # line 911 "gram.in" ! 1466: { yyval.pval = doloop(yypvt[-1].pval, PNULL, PNULL); } break; ! 1467: case 245: ! 1468: # line 913 "gram.in" ! 1469: { yyval.pval = doloop(yypvt[-4].pval, yypvt[-2].pval, PNULL); } break; ! 1470: case 246: ! 1471: # line 915 "gram.in" ! 1472: { yyval.pval = doloop(yypvt[-3].pval, yypvt[-1].pval, PNULL); } break; ! 1473: case 247: ! 1474: # line 917 "gram.in" ! 1475: { yyval.pval = doloop(yypvt[-6].pval,yypvt[-4].pval,yypvt[-2].pval); } break; ! 1476: case 248: ! 1477: # line 919 "gram.in" ! 1478: { yyval.pval = doloop(yypvt[-5].pval,yypvt[-3].pval,yypvt[-1].pval); } break; ! 1479: case 249: ! 1480: # line 923 "gram.in" ! 1481: { pushctl(STFOR, PNULL); } break; ! 1482: case 250: ! 1483: # line 927 "gram.in" ! 1484: { exgoto(thisctl->xlab); ! 1485: exlab(thisctl->nextlab); ! 1486: addexec(); ! 1487: } break; ! 1488: case 251: ! 1489: # line 932 "gram.in" ! 1490: { exgoto(thisctl->xlab); ! 1491: exlab(thisctl->nextlab); ! 1492: addexec(); ! 1493: } break; ! 1494: case 253: ! 1495: # line 942 "gram.in" ! 1496: { addexec(); } break; ! 1497: case 254: ! 1498: # line 944 "gram.in" ! 1499: { addexec(); } break; ! 1500: case 255: ! 1501: # line 947 "gram.in" ! 1502: { yyval.pval = 0; } break; ! 1503: case 257: ! 1504: # line 952 "gram.in" ! 1505: { if(dbgopt) ++dbglevel; } break; ! 1506: case 258: ! 1507: # line 956 "gram.in" ! 1508: { if(dbgopt) --dbglevel; } break; ! 1509: case 259: ! 1510: # line 960 "gram.in" ! 1511: { yyval.pval = mkiost(yypvt[-5].ival, yypvt[-3].pval, yypvt[-1].pval); } break; ! 1512: case 260: ! 1513: # line 963 "gram.in" ! 1514: { yyval.ival = 0; } break; ! 1515: case 261: ! 1516: # line 964 "gram.in" ! 1517: { yyval.ival = 1; } break; ! 1518: case 262: ! 1519: # line 965 "gram.in" ! 1520: { yyval.ival = 2; } break; ! 1521: case 263: ! 1522: # line 966 "gram.in" ! 1523: { yyval.ival = 3; } break; ! 1524: case 265: ! 1525: # line 970 "gram.in" ! 1526: { yyval.pval = NULL; } break; ! 1527: case 266: ! 1528: # line 973 "gram.in" ! 1529: { yyval.pval = mkchain(yypvt[-0].pval,CHNULL); } break; ! 1530: case 267: ! 1531: # line 974 "gram.in" ! 1532: { hookup(yypvt[-2].pval, mkchain(yypvt[-0].pval,CHNULL)); } break; ! 1533: case 268: ! 1534: # line 977 "gram.in" ! 1535: { yyval.pval = mkioitem(yypvt[-0].pval,CNULL); } break; ! 1536: case 269: ! 1537: # line 978 "gram.in" ! 1538: { yyval.pval = mkioitem(yypvt[-2].pval,yypvt[-0].pval); } break; ! 1539: case 270: ! 1540: # line 979 "gram.in" ! 1541: { yyval.pval = mkioitem(PNULL,yypvt[-0].pval); } break; ! 1542: case 271: ! 1543: # line 980 "gram.in" ! 1544: { yyval.pval = mkiogroup(yypvt[-0].pval, CNULL, PNULL); } break; ! 1545: case 272: ! 1546: # line 981 "gram.in" ! 1547: { yyval.pval = mkiogroup(yypvt[-0].pval, CNULL, yypvt[-1].pval); } break; ! 1548: case 273: ! 1549: # line 982 "gram.in" ! 1550: { yyval.pval = mkiogroup(yypvt[-2].pval,yypvt[-0].pval,yypvt[-3].pval); } break; ! 1551: case 274: ! 1552: # line 983 "gram.in" ! 1553: { yyval.pval = mkiogroup(yypvt[-2].pval,yypvt[-0].pval,PNULL); } break; ! 1554: case 275: ! 1555: # line 986 "gram.in" ! 1556: { ++iobrlevel; } break; ! 1557: case 276: ! 1558: # line 987 "gram.in" ! 1559: { --iobrlevel; yyval.pval = yypvt[-1].pval; } break; ! 1560: case 277: ! 1561: # line 991 "gram.in" ! 1562: { yyval.pval = mkformat(yypvt[-0].ival, PNULL, PNULL); } break; ! 1563: case 278: ! 1564: # line 993 "gram.in" ! 1565: { yyval.pval = mkformat(yypvt[-3].ival, yypvt[-1].pval, PNULL); } break; ! 1566: case 279: ! 1567: # line 995 "gram.in" ! 1568: { yyval.pval = mkformat(yypvt[-5].ival,yypvt[-3].pval,yypvt[-1].pval); } break; ! 1569: case 280: ! 1570: # line 997 "gram.in" ! 1571: { yyval.pval = yypvt[-1].pval->leftp; frexpblock(yypvt[-1].pval); } break; ! 1572: case 281: ! 1573: # line 1000 "gram.in" ! 1574: { yyval.ival = yypvt[-1].ival; } break; ! 1575: case 282: ! 1576: # line 1003 "gram.in" ! 1577: { lettneed = YES;} break; ! 1578: case 283: ! 1579: # line 1006 "gram.in" ! 1580: { lettneed = NO; } break; ! 1581: } ! 1582: goto yystack; /* stack new state and value */ ! 1583: ! 1584: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.