21 # define SAUTOMATIC 21
22 # define SBACKSPACE 22
25 # define SCHARACTER 25
32 # define SDIMENSION 32
53 # define SINTRINSIC 53
69 # define SSUBROUTINE 69
72 # define SUNDEFINED 72
101 /* # line 124 "gram.in" */
105 static int nstars; /* Number of labels in an
106 alternate return CALL */
110 static ftnint varleng;
111 static struct { expptr lb, ub; } dims[MAXDIM+1];
112 static struct Labelblock *labarray[MAXLABLIST]; /* Labels in an alternate
115 /* The next two variables are used to verify that each statement might be reached
116 during runtime. lastwasbranch is tested only in the defintion of the
117 stat: nonterminal. */
119 int lastwasbranch = NO;
120 static int thiswasbranch = NO;
121 extern ftnint yystno;
123 static chainp datastack;
124 extern long laststfcn, thisstno;
125 extern int can_include; /* for netlib */
129 expptr mklogcon(), mkaddcon(), mkrealcon(), mkstrcon(), mkbitcon();
131 struct Listblock *mklist();
132 struct Listblock *mklist();
133 struct Impldoblock *mkiodo();
135 #define ESNULL (Extsym *)0
136 #define NPNULL (Namep)0
137 #define LBNULL (struct Listblock *)0
138 extern void freetemps(), make_param();
142 chainp d0 = datastack;
144 curdtp = (chainp)d0->datap;
145 datastack = d0->nextp;
151 /* # line 176 "gram.in" */
159 struct Labelblock *labval;
160 struct Nameblock *namval;
161 struct Eqvchain *eqvval;
164 #define yyclearin yychar = -1
165 #define yyerrok yyerrflag = 0
167 extern int yyerrflag;
169 #define YYMAXDEPTH 150
171 YYSTYPE yylval, yyval;
172 typedef int yytabelem;
173 # define YYERRCODE 256
174 yytabelem yyexca[] ={
248 237, 274, 471, 317, 316, 412, 420, 297, 470, 399,
249 413, 397, 386, 357, 398, 266, 128, 356, 273, 252,
250 292, 5, 116, 295, 326, 303, 222, 99, 184, 121,
251 195, 229, 17, 203, 270, 304, 313, 199, 201, 118,
252 94, 202, 396, 104, 210, 183, 236, 101, 106, 234,
253 264, 103, 111, 336, 260, 95, 96, 97, 165, 166,
254 334, 335, 336, 395, 105, 311, 309, 190, 130, 131,
255 132, 133, 120, 135, 119, 114, 157, 129, 157, 475,
256 103, 272, 334, 335, 336, 396, 521, 103, 278, 483,
257 535, 165, 166, 334, 335, 336, 342, 341, 340, 339,
258 338, 137, 343, 345, 344, 347, 346, 348, 450, 258,
259 259, 260, 539, 165, 166, 258, 259, 260, 261, 525,
260 102, 522, 155, 409, 155, 186, 187, 103, 408, 117,
261 165, 166, 258, 259, 260, 318, 100, 527, 484, 188,
262 446, 185, 480, 230, 240, 240, 194, 193, 290, 120,
263 211, 119, 462, 481, 157, 294, 482, 257, 157, 243,
264 468, 214, 463, 469, 461, 464, 460, 239, 241, 220,
265 215, 218, 157, 219, 213, 165, 166, 334, 335, 336,
266 342, 341, 340, 157, 371, 452, 343, 345, 344, 347,
267 346, 348, 443, 428, 377, 294, 102, 102, 102, 102,
268 155, 189, 447, 149, 155, 446, 192, 103, 98, 196,
269 197, 198, 277, 376, 320, 321, 206, 288, 155, 289,
270 300, 375, 299, 324, 315, 328, 275, 275, 330, 155,
271 310, 333, 196, 216, 217, 350, 269, 207, 308, 352,
272 353, 333, 100, 177, 354, 349, 323, 112, 245, 257,
273 247, 110, 157, 417, 286, 287, 418, 362, 157, 157,
274 157, 157, 157, 257, 257, 109, 108, 268, 279, 280,
275 281, 265, 107, 355, 4, 333, 427, 465, 378, 370,
276 170, 172, 176, 257, 165, 166, 258, 259, 260, 261,
277 102, 406, 232, 293, 407, 381, 422, 390, 155, 400,
278 391, 223, 419, 422, 155, 155, 155, 155, 155, 117,
279 221, 314, 392, 319, 387, 359, 372, 196, 360, 373,
280 374, 333, 333, 536, 350, 333, 275, 250, 424, 333,
281 405, 333, 410, 532, 230, 432, 433, 434, 435, 436,
282 437, 438, 439, 440, 441, 403, 331, 156, 401, 332,
283 531, 333, 530, 333, 333, 333, 388, 526, 380, 529,
284 524, 157, 257, 333, 431, 492, 257, 257, 257, 257,
285 257, 382, 383, 235, 426, 384, 358, 494, 296, 333,
286 448, 165, 166, 258, 259, 260, 261, 451, 165, 166,
287 258, 259, 260, 261, 103, 445, 472, 400, 421, 191,
288 402, 196, 103, 150, 307, 174, 285, 155, 474, 246,
289 476, 416, 467, 466, 242, 226, 223, 200, 212, 136,
290 209, 486, 171, 488, 490, 275, 275, 275, 141, 240,
291 496, 429, 329, 333, 333, 333, 333, 333, 333, 333,
292 333, 333, 333, 403, 497, 479, 401, 403, 487, 154,
293 257, 154, 495, 493, 306, 485, 502, 454, 456, 458,
294 500, 491, 268, 499, 505, 506, 507, 103, 451, 271,
295 271, 472, 30, 333, 414, 501, 400, 508, 511, 509,
296 387, 244, 208, 510, 516, 514, 515, 333, 517, 333,
297 513, 333, 520, 293, 518, 225, 240, 333, 402, 523,
298 92, 248, 402, 528, 6, 262, 123, 249, 81, 80,
299 275, 275, 275, 79, 534, 533, 479, 78, 173, 263,
300 314, 77, 403, 76, 537, 401, 351, 154, 75, 333,
301 282, 154, 60, 49, 48, 333, 45, 33, 333, 538,
302 113, 205, 454, 456, 458, 154, 267, 165, 166, 334,
303 335, 336, 342, 540, 503, 411, 154, 204, 394, 393,
304 298, 478, 503, 503, 503, 134, 389, 312, 115, 379,
305 26, 25, 24, 23, 302, 22, 305, 402, 21, 385,
306 284, 9, 503, 8, 7, 2, 519, 301, 20, 319,
307 164, 51, 489, 291, 228, 327, 325, 415, 91, 361,
308 255, 53, 337, 19, 55, 365, 366, 367, 368, 369,
309 37, 224, 3, 1, 0, 351, 0, 0, 0, 0,
310 0, 0, 0, 0, 0, 154, 0, 0, 0, 0,
311 0, 154, 154, 154, 154, 154, 0, 0, 0, 267,
312 0, 512, 267, 267, 165, 166, 334, 335, 336, 342,
313 341, 340, 339, 338, 0, 343, 345, 344, 347, 346,
314 348, 165, 166, 334, 335, 336, 342, 341, 453, 455,
315 457, 0, 343, 345, 344, 347, 346, 348, 0, 0,
316 305, 0, 459, 0, 0, 0, 0, 165, 166, 334,
317 335, 336, 342, 341, 340, 339, 338, 351, 343, 345,
318 344, 347, 346, 348, 444, 0, 0, 0, 449, 165,
319 166, 334, 335, 336, 342, 341, 340, 339, 338, 0,
320 343, 345, 344, 347, 346, 348, 165, 166, 334, 335,
321 336, 342, 0, 0, 154, 0, 498, 343, 345, 344,
322 347, 346, 348, 0, 0, 267, 0, 0, 0, 0,
323 0, 442, 0, 504, 455, 457, 165, 166, 334, 335,
324 336, 342, 341, 340, 339, 338, 0, 343, 345, 344,
325 347, 346, 348, 0, 0, 0, 0, 0, 0, 430,
326 0, 477, 0, 305, 165, 166, 334, 335, 336, 342,
327 341, 340, 339, 338, 0, 343, 345, 344, 347, 346,
328 348, 423, 0, 0, 0, 0, 165, 166, 334, 335,
329 336, 342, 341, 340, 339, 338, 0, 343, 345, 344,
330 347, 346, 348, 0, 0, 0, 267, 0, 0, 0,
331 0, 165, 166, 334, 335, 336, 342, 341, 340, 339,
332 338, 12, 343, 345, 344, 347, 346, 348, 0, 0,
333 0, 0, 0, 0, 305, 10, 56, 46, 73, 85,
334 14, 61, 70, 90, 38, 66, 47, 42, 68, 72,
335 31, 67, 35, 34, 11, 87, 36, 18, 41, 39,
336 28, 16, 57, 58, 59, 50, 54, 43, 88, 64,
337 40, 69, 44, 89, 29, 62, 84, 13, 0, 82,
338 65, 52, 86, 27, 74, 63, 15, 0, 0, 71,
339 83, 160, 161, 162, 163, 169, 168, 167, 158, 159,
340 103, 0, 160, 161, 162, 163, 169, 168, 167, 158,
341 159, 103, 0, 0, 32, 160, 161, 162, 163, 169,
342 168, 167, 158, 159, 103, 0, 160, 161, 162, 163,
343 169, 168, 167, 158, 159, 103, 0, 160, 161, 162,
344 163, 169, 168, 167, 158, 159, 103, 0, 160, 161,
345 162, 163, 169, 168, 167, 158, 159, 103, 0, 0,
346 233, 0, 0, 0, 0, 0, 165, 166, 363, 0,
347 364, 233, 227, 0, 0, 0, 238, 165, 166, 231,
348 0, 0, 0, 0, 233, 0, 0, 238, 0, 0,
349 165, 166, 473, 0, 0, 233, 0, 0, 0, 0,
350 238, 165, 166, 231, 0, 0, 233, 0, 0, 0,
351 0, 238, 165, 166, 425, 0, 0, 233, 0, 0,
352 0, 0, 238, 165, 166, 0, 0, 0, 0, 0,
353 0, 0, 0, 238, 160, 161, 162, 163, 169, 168,
354 167, 158, 159, 103, 0, 160, 161, 162, 163, 169,
355 168, 167, 158, 159, 103, 160, 161, 162, 163, 169,
356 168, 167, 158, 159, 103, 0, 0, 0, 160, 161,
357 162, 163, 169, 168, 167, 158, 159, 103, 256, 0,
358 93, 160, 161, 162, 163, 169, 168, 167, 158, 159,
359 103, 0, 0, 0, 0, 0, 0, 0, 0, 0,
360 0, 0, 0, 276, 0, 0, 0, 0, 0, 165,
361 166, 0, 122, 0, 322, 125, 126, 127, 0, 238,
362 165, 166, 0, 0, 0, 0, 0, 138, 139, 0,
363 238, 140, 0, 142, 143, 144, 0, 251, 145, 146,
364 147, 0, 148, 165, 166, 253, 0, 254, 0, 0,
365 153, 0, 0, 0, 0, 0, 165, 166, 151, 0,
366 152, 178, 179, 180, 181, 182, 160, 161, 162, 163,
367 169, 168, 167, 158, 159, 103, 160, 161, 162, 163,
368 169, 168, 167, 158, 159, 103, 160, 161, 162, 163,
369 169, 168, 167, 158, 159, 103, 160, 161, 162, 163,
370 169, 168, 167, 158, 159, 103, 0, 0, 0, 0,
371 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
372 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
373 0, 0, 0, 0, 0, 251, 0, 0, 0, 0,
374 0, 165, 166, 283, 0, 153, 0, 0, 0, 0,
375 0, 165, 166, 175, 0, 404, 0, 0, 0, 0,
376 0, 165, 166, 56, 46, 251, 85, 0, 61, 0,
377 90, 165, 166, 47, 73, 0, 0, 0, 70, 0,
378 0, 66, 87, 0, 68, 72, 0, 67, 0, 57,
379 58, 59, 50, 0, 0, 88, 0, 0, 0, 0,
380 89, 0, 62, 84, 0, 64, 82, 69, 52, 86,
381 0, 0, 63, 0, 124, 0, 65, 83, 0, 0,
382 74, 0, 0, 0, 0, 71 };
385 -1000, 18, 503, 837, -1000, -1000, -1000, -1000, -1000, -1000,
386 495, -1000, -1000, -1000, -1000, -1000, -1000, 164, 453, -35,
387 194, 188, 187, 173, 58, 169, -8, 66, -1000, -1000,
388 -1000, -1000, -1000, 1264, -1000, -1000, -1000, -5, -1000, -1000,
389 -1000, -1000, -1000, -1000, -1000, 453, -1000, -1000, -1000, -1000,
390 -1000, 354, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
391 -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
392 -1000, -1000, -1000, -1000, -1000, 1096, 348, 1191, 348, 165,
393 -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
394 -1000, -1000, -1000, -1000, 453, 453, 453, 453, -1000, 453,
395 -1000, 325, -1000, -1000, 453, -1000, -11, 453, 453, 453,
396 343, -1000, -1000, -1000, 453, 159, -1000, -1000, -1000, -1000,
397 468, 346, 58, -1000, -1000, 344, -1000, -1000, -1000, -1000,
398 66, 453, 453, 343, -1000, -1000, 234, 342, 489, -1000,
399 341, 917, 963, 963, 340, 475, 453, 335, 453, -1000,
400 -1000, -1000, -1000, 1083, -1000, -1000, 308, 1211, -1000, -1000,
401 -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
402 -1000, 1083, 193, 158, -1000, -1000, 1049, 1049, -1000, -1000,
403 -1000, -1000, 1181, 332, -1000, -1000, 325, 325, 453, -1000,
404 -1000, 73, 304, -1000, 58, -1000, 304, -1000, -1000, -1000,
405 453, -1000, 380, -1000, 330, 1273, -17, 66, -18, 453,
406 475, 37, 963, 1060, -1000, 453, -1000, -1000, -1000, -1000,
407 -1000, 963, -1000, 963, 361, -1000, 963, -1000, 271, -1000,
408 751, 475, -1000, 963, -1000, -1000, -1000, 963, 963, -1000,
409 751, -1000, 963, -1000, -1000, 58, 475, -1000, 301, 240,
410 -1000, 1211, -1000, -1000, -1000, 906, -1000, 1211, 1211, 1211,
411 1211, 1211, -30, 204, 106, 388, -1000, -1000, 388, 388,
412 -1000, 143, 135, 116, 751, -1000, 1049, -1000, -1000, -1000,
413 -1000, -1000, 308, -1000, -1000, 300, -1000, -1000, 325, -1000,
414 -1000, 222, -1000, -1000, -1000, -5, -1000, -36, 1201, 453,
415 -1000, 216, -1000, 45, -1000, -1000, 380, 460, -1000, 453,
416 -1000, -1000, 178, -1000, 226, -1000, -1000, -1000, 324, 220,
417 726, 751, 952, -1000, 751, 299, 199, 115, 751, 453,
418 704, -1000, 941, 963, 963, 963, 963, 963, 963, 963,
419 963, 963, 963, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
420 676, 114, -31, 646, 629, 321, 127, -1000, -1000, -1000,
421 1083, 33, 751, -1000, -1000, 27, -30, -30, -30, 50,
422 -1000, 388, 106, 107, 106, 1049, 1049, 1049, 607, 88,
423 86, 74, -1000, -1000, -1000, 87, -1000, 201, -1000, 304,
424 -1000, 113, -1000, 85, 930, -1000, 1201, -1000, -1000, -3,
425 1070, -1000, -1000, -1000, 963, -1000, -1000, 453, -1000, 380,
426 64, 78, -1000, 8, -1000, 60, -1000, -1000, 453, 963,
427 58, 963, 963, 391, -1000, 290, 303, 963, 963, -1000,
428 475, -1000, 0, -31, -31, -31, 467, 95, 95, 581,
429 646, -22, -1000, 963, -1000, 475, 475, 58, -1000, 308,
430 -1000, -1000, 388, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
431 1049, 1049, 1049, -1000, 466, 465, -5, -1000, -1000, 930,
432 -1000, -1000, 564, -1000, -1000, 1201, -1000, -1000, -1000, -1000,
433 380, -1000, 460, 460, 453, -1000, 751, 37, 11, 43,
434 751, -1000, -1000, -1000, 963, 285, 751, 41, 282, 62,
435 -1000, 963, 284, 227, 282, 277, 275, 258, -1000, -1000,
436 -1000, -1000, 930, -1000, -1000, 7, 248, -1000, -1000, -1000,
437 -1000, -1000, 963, -1000, -1000, 475, -1000, -1000, 751, -1000,
438 -1000, -1000, -1000, -1000, 751, -1000, -1000, 751, 34, 475,
442 0, 613, 612, 13, 611, 81, 15, 32, 610, 604,
443 603, 10, 0, 602, 601, 600, 16, 598, 35, 25,
444 597, 596, 595, 3, 4, 594, 67, 593, 592, 50,
445 34, 18, 26, 101, 20, 591, 30, 373, 1, 292,
446 24, 347, 327, 2, 9, 14, 31, 49, 46, 590,
447 588, 39, 28, 45, 587, 585, 584, 583, 581, 1100,
448 40, 580, 579, 12, 578, 575, 573, 572, 571, 570,
449 568, 29, 567, 27, 566, 23, 41, 7, 44, 6,
450 37, 565, 38, 561, 560, 11, 22, 36, 559, 558,
451 8, 17, 33, 557, 555, 541, 5, 540, 472, 537,
452 536, 534, 533, 532, 528, 203, 523, 521, 518, 517,
453 513, 509, 88, 508, 507, 19 };
456 0, 1, 1, 55, 55, 55, 55, 55, 55, 55,
457 2, 56, 56, 56, 56, 56, 56, 56, 60, 52,
458 33, 53, 53, 61, 61, 62, 62, 63, 63, 26,
459 26, 26, 27, 27, 34, 34, 17, 57, 57, 57,
460 57, 57, 57, 57, 57, 57, 57, 57, 57, 10,
461 10, 10, 74, 7, 8, 9, 9, 9, 9, 9,
462 9, 9, 9, 9, 9, 9, 16, 16, 16, 50,
463 50, 50, 50, 51, 51, 64, 64, 65, 65, 66,
464 66, 80, 54, 54, 67, 67, 81, 82, 76, 83,
465 84, 77, 77, 85, 85, 45, 45, 45, 70, 70,
466 86, 86, 72, 72, 87, 36, 18, 18, 19, 19,
467 75, 75, 89, 88, 88, 90, 90, 43, 43, 91,
468 91, 3, 68, 68, 92, 92, 95, 93, 94, 94,
469 96, 96, 11, 69, 69, 97, 20, 20, 71, 21,
470 21, 22, 22, 38, 38, 38, 39, 39, 39, 39,
471 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
472 12, 12, 13, 13, 13, 13, 13, 13, 37, 37,
473 37, 37, 32, 40, 40, 44, 44, 48, 48, 48,
474 48, 48, 48, 48, 47, 49, 49, 49, 41, 41,
475 42, 42, 42, 42, 42, 42, 42, 42, 58, 58,
476 58, 58, 58, 58, 58, 58, 58, 99, 23, 24,
477 24, 98, 98, 98, 98, 98, 98, 98, 98, 98,
478 98, 98, 4, 100, 101, 101, 101, 101, 73, 73,
479 35, 25, 25, 46, 46, 14, 14, 28, 28, 59,
480 78, 79, 102, 103, 103, 103, 103, 103, 103, 103,
481 103, 103, 103, 103, 103, 103, 103, 104, 111, 111,
482 111, 106, 113, 113, 113, 108, 108, 105, 105, 114,
483 114, 115, 115, 115, 115, 115, 115, 15, 107, 109,
484 110, 110, 29, 29, 6, 6, 30, 30, 30, 31,
485 31, 31, 31, 31, 31, 5, 5, 5, 5, 5,
489 0, 0, 6, 5, 4, 5, 7, 7, 5, 3,
490 3, 7, 9, 7, 9, 9, 11, 7, 1, 3,
491 3, 1, 2, 4, 6, 2, 6, 2, 6, 1,
492 5, 7, 3, 7, 3, 3, 3, 2, 2, 2,
493 2, 2, 2, 2, 2, 3, 5, 3, 11, 15,
494 11, 11, 1, 5, 3, 3, 3, 3, 3, 3,
495 3, 3, 3, 3, 3, 3, 1, 9, 13, 7,
496 9, 11, 7, 3, 7, 7, 7, 7, 7, 6,
497 6, 7, 3, 7, 6, 6, 1, 13, 1, 1,
498 1, 4, 6, 3, 7, 2, 5, 2, 2, 6,
499 3, 2, 2, 6, 7, 5, 3, 11, 3, 7,
500 1, 6, 1, 4, 6, 3, 7, 3, 2, 3,
501 7, 3, 7, 6, 8, 3, 1, 4, 2, 6,
502 3, 7, 3, 2, 4, 9, 3, 7, 1, 1,
503 2, 3, 7, 2, 7, 2, 2, 2, 7, 7,
504 7, 7, 5, 7, 7, 7, 7, 7, 5, 7,
505 3, 3, 3, 3, 3, 3, 3, 3, 3, 5,
506 9, 11, 11, 1, 2, 3, 2, 3, 3, 3,
507 3, 3, 3, 2, 11, 3, 3, 3, 2, 7,
508 2, 2, 7, 7, 7, 7, 5, 7, 2, 15,
509 9, 3, 5, 4, 13, 5, 5, 11, 7, 2,
510 9, 9, 11, 4, 2, 3, 21, 3, 7, 9,
511 7, 7, 3, 3, 7, 7, 15, 15, 0, 2,
512 7, 3, 7, 2, 5, 3, 3, 3, 7, 1,
513 1, 1, 3, 4, 5, 5, 5, 4, 5, 5,
514 7, 9, 9, 5, 7, 3, 7, 6, 3, 3,
515 3, 6, 3, 3, 3, 3, 3, 7, 7, 2,
516 6, 3, 3, 3, 5, 5, 5, 3, 7, 7,
517 9, 9, 3, 7, 3, 11, 3, 3, 2, 7,
518 7, 7, 7, 7, 7, 3, 7, 11, 11, 11,
522 -1000, -1, -55, -2, 256, 3, 1, -56, -57, -58,
523 18, 37, 4, 60, 23, 69, 44, -7, 40, -10,
524 -50, -64, -65, -66, -67, -68, -69, 66, 43, 57,
525 -98, 33, 97, -99, 36, 35, 39, -8, 27, 42,
526 53, 41, 30, 50, 55, -100, 20, 29, -101, -102,
527 48, -35, 64, -14, 49, -9, 19, 45, 46, 47,
528 -103, 24, 58, 68, 52, 63, 28, 34, 31, 54,
529 25, 72, 32, 21, 67, -104, -106, -107, -109, -110,
530 -111, -113, 62, 73, 59, 22, 65, 38, 51, 56,
531 26, -17, 5, -59, -60, -60, -60, -60, 44, -73,
532 78, -52, -33, 14, 78, 99, -73, 78, 78, 78,
533 78, -73, 78, -97, 83, -70, -86, -33, -51, 85,
534 83, -71, -59, -98, 70, -59, -59, -59, -16, 82,
535 -71, -71, -71, -71, -81, -71, -37, -33, -59, -59,
536 -59, 74, -59, -59, -59, -59, -59, -59, -59, -105,
537 -42, 82, 84, 74, -37, -48, -41, -12, 12, 13,
538 5, 6, 7, 8, -49, 80, 81, 11, 10, 9,
539 -105, 74, -105, -108, -42, 82, -105, 78, -59, -59,
540 -59, -59, -59, -53, -52, -53, -52, -52, -60, -33,
541 -26, 74, -33, -76, -51, -36, -33, -33, -33, -80,
542 74, -82, -76, -92, -93, -95, -33, 78, 14, 74,
543 -78, -73, 74, -78, -36, -51, -33, -33, -80, -82,
544 -92, 76, -32, 74, -4, 6, 74, 75, -25, -46,
545 -38, 82, -39, 74, -47, -37, -48, -12, 90, -40,
546 -38, -40, 74, -3, 6, -33, 74, -33, -41, -114,
547 -42, 74, -115, 82, 84, -15, 15, -12, 82, 83,
548 84, 85, -41, -41, -29, 78, -6, -37, 74, 78,
549 -30, -39, -5, -31, -38, -47, 74, -30, -112, -112,
550 -112, -112, -41, 82, -61, 74, -26, -26, -52, -71,
551 75, -27, -34, -33, 82, -75, 74, -77, -84, -73,
552 -75, -54, -37, -19, -18, -37, 74, 74, -7, 83,
553 -86, 83, -72, -87, -33, -3, -24, -23, 98, -33,
554 -38, -38, 74, -36, -38, -21, -40, -22, -38, 71,
555 -38, 75, 78, -12, 82, 83, 84, -13, 89, 88,
556 87, 86, 85, 91, 93, 92, 95, 94, 96, -3,
557 -38, -39, -38, -38, -38, -73, -91, -3, 75, 75,
558 78, -41, -38, 82, 84, -41, -41, -41, -41, -41,
559 75, 78, -29, -29, -29, 78, 78, 78, -38, -39,
560 -5, -31, -112, -112, 75, -62, -63, 14, -26, -74,
561 75, 78, -16, -88, -89, 99, 78, -85, -45, -44,
562 -12, -47, -33, -48, 74, -36, 75, 78, 83, 78,
563 -19, -94, -96, -11, 14, -20, -33, 75, 78, 76,
564 -79, 74, 76, 75, -79, 82, 75, 77, 78, -33,
565 75, -46, -38, -38, -38, -38, -38, -38, -38, -38,
566 -38, -38, 75, 78, 75, 74, 78, 75, -115, -41,
567 75, -6, 78, -39, -5, -39, -5, -39, -5, 75,
568 78, 78, 78, 75, 78, 76, -75, -34, 75, 78,
569 -90, -43, -38, 82, -85, 82, -44, -37, -83, -18,
570 78, 75, 78, 81, 78, -87, -38, -73, -38, -28,
571 -38, 70, 75, -32, 74, -40, -38, -3, -39, -91,
572 -3, -73, -23, -33, -39, -23, -23, -23, -63, 14,
573 -16, -90, 77, -45, -44, -77, -23, -96, -11, -33,
574 -24, 75, 78, -79, 75, 78, 75, 75, -38, 75,
575 75, 75, 75, -43, -38, 83, 75, -38, -3, 78,
579 1, -2, 0, 0, 9, 10, 2, 3, 4, 5,
580 0, 239, 8, 18, 18, 18, 18, 228, 0, 37,
581 -2, 39, 40, 41, -2, 43, 44, 45, 47, 138,
582 198, 239, 201, 0, 239, 239, 239, 66, 138, 138,
583 138, 138, 86, 138, 133, 0, 239, 239, 214, 215,
584 239, 217, 239, 239, 239, 54, 223, 239, 239, 239,
585 242, 239, 235, 236, 55, 56, 57, 58, 59, 60,
586 61, 62, 63, 64, 65, 0, 0, 0, 0, 255,
587 239, 239, 239, 239, 239, 258, 259, 260, 262, 263,
588 264, 6, 36, 7, 21, 21, 0, 0, 18, 0,
589 229, 29, 19, 20, 0, 88, 0, 229, 0, 0,
590 0, 88, 126, 134, 0, 46, 98, 100, 101, 73,
591 0, 0, -2, 202, 203, 0, 205, 206, 53, 240,
592 0, 0, 0, 0, 88, 126, 0, 168, 0, 213,
593 0, 0, 173, 173, 0, 0, 0, 0, 0, 243,
594 -2, 245, 246, 0, 190, 191, 0, 0, 177, 178,
595 179, 180, 181, 182, 183, 160, 161, 185, 186, 187,
596 247, 0, 248, 249, -2, 266, 253, 0, 300, 300,
597 300, 300, 0, 11, 22, 13, 29, 29, 0, 138,
598 17, 0, 110, 90, 228, 72, 110, 76, 78, 80,
599 0, 85, 0, 123, 125, 0, 0, 0, 0, 0,
600 0, 0, 0, 0, 69, 0, 75, 77, 79, 84,
601 122, 0, 169, -2, 0, 222, 0, 218, 0, 231,
602 233, 0, 143, 0, 145, 146, 147, 0, 0, 220,
603 174, 221, 0, 224, 121, -2, 0, 230, 271, 0,
604 188, 0, 269, 272, 273, 0, 277, 0, 0, 0,
605 0, 0, 196, 271, 250, 0, 282, 284, 0, 0,
606 254, -2, 287, 288, 0, -2, 0, 256, 257, 261,
607 278, 279, 300, 300, 12, 0, 14, 15, 29, 52,
608 30, 0, 32, 34, 35, 66, 112, 0, 0, 0,
609 105, 0, 82, 0, 108, 106, 0, 0, 127, 0,
610 99, 74, 0, 102, 0, 241, 200, 209, 0, 0,
611 0, 241, 0, 70, 211, 0, 0, 140, -2, 0,
612 0, 219, 0, 0, 0, 0, 0, 0, 0, 0,
613 0, 0, 0, 162, 163, 164, 165, 166, 167, 234,
614 0, 143, 152, 158, 0, 0, 0, 119, -2, 268,
615 0, 0, 274, 275, 276, 192, 193, 194, 195, 197,
616 267, 0, 252, 0, 251, 0, 0, 0, 0, 143,
617 0, 0, 280, 281, 23, 0, 25, 27, 16, 110,
618 31, 0, 50, 0, 0, 51, 0, 91, 93, 95,
619 0, 97, 175, 176, 0, 71, 81, 0, 89, 0,
620 0, 0, 128, 130, 132, 135, 136, 48, 0, 0,
621 228, 0, 0, 0, 67, 0, 170, 173, 0, 212,
622 0, 232, 148, 149, 150, 151, -2, 154, 155, 156,
623 157, 159, 144, 0, 207, 0, 0, 228, 270, 271,
624 189, 283, 0, -2, 290, -2, 292, -2, 294, -2,
625 0, 0, 0, 24, 0, 0, 66, 33, 111, 0,
626 113, 115, 118, 117, 92, 0, 96, 83, 90, 109,
627 0, 124, 0, 0, 0, 103, 104, 0, 0, 208,
628 237, 204, 241, 171, 173, 0, 142, 0, 143, 0,
629 120, 0, 0, 168, -2, 0, 0, 0, 26, 28,
630 49, 114, 0, 94, 95, 0, 0, 129, 131, 137,
631 199, 210, 0, 68, 172, 0, 184, 226, 227, 285,
632 297, 298, 299, 116, 118, 87, 107, 238, 0, 0,
634 typedef struct { char *t_name; int t_val; } yytoktype;
636 # define YYDEBUG 0 /* don't allow debugging */
742 "-unknown-", -1 /* ends search */
747 "-no such reduction-",
748 "program : /* empty */",
749 "program : program stat SEOS",
750 "stat : thislabel entry",
751 "stat : thislabel spec",
752 "stat : thislabel exec",
753 "stat : thislabel SINCLUDE filename",
754 "stat : thislabel SEND end_spec",
755 "stat : thislabel SUNKNOWN",
757 "thislabel : SLABEL",
758 "entry : SPROGRAM new_proc progname",
759 "entry : SPROGRAM new_proc progname progarglist",
760 "entry : SBLOCK new_proc progname",
761 "entry : SSUBROUTINE new_proc entryname arglist",
762 "entry : SFUNCTION new_proc entryname arglist",
763 "entry : type SFUNCTION new_proc entryname arglist",
764 "entry : SENTRY entryname arglist",
765 "new_proc : /* empty */",
768 "progname : /* empty */",
769 "progname : entryname",
770 "progarglist : SLPAR SRPAR",
771 "progarglist : SLPAR progargs SRPAR",
772 "progargs : progarg",
773 "progargs : progargs SCOMMA progarg",
775 "progarg : SNAME SEQUALS SNAME",
776 "arglist : /* empty */",
777 "arglist : SLPAR SRPAR",
778 "arglist : SLPAR args SRPAR",
780 "args : args SCOMMA arg",
783 "filename : SHOLLERITH",
788 "spec : equivalence",
793 "spec : SSAVE savelist",
795 "spec : SPARAM in_dcl SLPAR paramlist SRPAR",
796 "dcl : type opt_comma name in_dcl new_dcl dims lengspec",
797 "dcl : dcl SCOMMA name dims lengspec",
798 "dcl : dcl SSLASHD datainit vallist SSLASHD",
799 "new_dcl : /* empty */",
800 "type : typespec lengspec",
801 "typespec : typename",
802 "typename : SINTEGER",
804 "typename : SCOMPLEX",
805 "typename : SDOUBLE",
806 "typename : SDCOMPLEX",
807 "typename : SLOGICAL",
808 "typename : SCHARACTER",
809 "typename : SUNDEFINED",
810 "typename : SDIMENSION",
811 "typename : SAUTOMATIC",
812 "typename : SSTATIC",
813 "lengspec : /* empty */",
814 "lengspec : SSTAR intonlyon expr intonlyoff",
815 "lengspec : SSTAR intonlyon SLPAR SSTAR SRPAR intonlyoff",
816 "common : SCOMMON in_dcl var",
817 "common : SCOMMON in_dcl comblock var",
818 "common : common opt_comma comblock opt_comma var",
819 "common : common SCOMMA var",
820 "comblock : SCONCAT",
821 "comblock : SSLASH SNAME SSLASH",
822 "external : SEXTERNAL in_dcl name",
823 "external : external SCOMMA name",
824 "intrinsic : SINTRINSIC in_dcl name",
825 "intrinsic : intrinsic SCOMMA name",
826 "equivalence : SEQUIV in_dcl equivset",
827 "equivalence : equivalence SCOMMA equivset",
828 "equivset : SLPAR equivlist SRPAR",
830 "equivlist : equivlist SCOMMA lhs",
831 "data : SDATA in_data datalist",
832 "data : data opt_comma datalist",
833 "in_data : /* empty */",
834 "datalist : datainit datavarlist SSLASH datapop vallist SSLASH",
835 "datainit : /* empty */",
836 "datapop : /* empty */",
837 "vallist : /* empty */",
839 "vallist : vallist SCOMMA val",
841 "val : simple SSTAR value",
843 "value : addop simple",
844 "value : complex_const",
845 "savelist : saveitem",
846 "savelist : savelist SCOMMA saveitem",
848 "saveitem : comblock",
849 "paramlist : paramitem",
850 "paramlist : paramlist SCOMMA paramitem",
851 "paramitem : name SEQUALS expr",
854 "datavar : SLPAR datavarlist SCOMMA dospec SRPAR",
855 "datavarlist : datavar",
856 "datavarlist : datavarlist SCOMMA datavar",
857 "dims : /* empty */",
858 "dims : SLPAR dimlist SRPAR",
859 "dimlist : /* empty */",
861 "dimlist : dimlist SCOMMA dim",
863 "dim : expr SCOLON ubound",
867 "labellist : labellist SCOMMA label",
869 "implicit : SIMPLICIT in_dcl implist",
870 "implicit : implicit SCOMMA implist",
871 "implist : imptype SLPAR letgroups SRPAR",
873 "imptype : /* empty */",
875 "letgroups : letgroup",
876 "letgroups : letgroups SCOMMA letgroup",
878 "letgroup : letter SMINUS letter",
880 "namelist : SNAMELIST",
881 "namelist : namelist namelistentry",
882 "namelistentry : SSLASH name SSLASH namelistlist",
883 "namelistlist : name",
884 "namelistlist : namelistlist SCOMMA name",
885 "in_dcl : /* empty */",
886 "funarglist : /* empty */",
887 "funarglist : funargs",
889 "funargs : funargs SCOMMA expr",
891 "expr : SLPAR expr SRPAR",
892 "expr : complex_const",
894 "uexpr : simple_const",
895 "uexpr : expr addop expr",
896 "uexpr : expr SSTAR expr",
897 "uexpr : expr SSLASH expr",
898 "uexpr : expr SPOWER expr",
899 "uexpr : addop expr",
900 "uexpr : expr relop expr",
901 "uexpr : expr SEQV expr",
902 "uexpr : expr SNEQV expr",
903 "uexpr : expr SOR expr",
904 "uexpr : expr SAND expr",
906 "uexpr : expr SCONCAT expr",
916 "lhs : name substring",
917 "lhs : name SLPAR funarglist SRPAR",
918 "lhs : name SLPAR funarglist SRPAR substring",
919 "substring : SLPAR opt_expr SCOLON opt_expr SRPAR",
920 "opt_expr : /* empty */",
923 "simple : simple_const",
924 "simple_const : STRUE",
925 "simple_const : SFALSE",
926 "simple_const : SHOLLERITH",
927 "simple_const : SICON",
928 "simple_const : SRCON",
929 "simple_const : SDCON",
930 "simple_const : bit_const",
931 "complex_const : SLPAR uexpr SCOMMA uexpr SRPAR",
932 "bit_const : SHEXCON",
933 "bit_const : SOCTCON",
934 "bit_const : SBITCON",
935 "fexpr : unpar_fexpr",
936 "fexpr : SLPAR fexpr SRPAR",
938 "unpar_fexpr : simple_const",
939 "unpar_fexpr : fexpr addop fexpr",
940 "unpar_fexpr : fexpr SSTAR fexpr",
941 "unpar_fexpr : fexpr SSLASH fexpr",
942 "unpar_fexpr : fexpr SPOWER fexpr",
943 "unpar_fexpr : addop fexpr",
944 "unpar_fexpr : fexpr SCONCAT fexpr",
946 "exec : SDO end_spec intonlyon label intonlyoff opt_comma dospecw",
947 "exec : SDO end_spec opt_comma dospecw",
949 "exec : logif iffable",
950 "exec : logif STHEN",
951 "exec : SELSEIF end_spec SLPAR expr SRPAR STHEN",
952 "exec : SELSE end_spec",
953 "exec : SENDIF end_spec",
954 "logif : SLOGIF end_spec SLPAR expr SRPAR",
955 "dospec : name SEQUALS exprlist",
957 "dospecw : SWHILE SLPAR expr SRPAR",
958 "iffable : let lhs SEQUALS expr",
959 "iffable : SASSIGN end_spec assignlabel STO name",
960 "iffable : SCONTINUE end_spec",
963 "iffable : SARITHIF end_spec SLPAR expr SRPAR label SCOMMA label SCOMMA label",
965 "iffable : call SLPAR SRPAR",
966 "iffable : call SLPAR callarglist SRPAR",
967 "iffable : SRETURN end_spec opt_expr",
968 "iffable : stop end_spec opt_expr",
969 "assignlabel : SICON",
971 "goto : SGOTO end_spec label",
972 "goto : SASGOTO end_spec name",
973 "goto : SASGOTO end_spec name opt_comma SLPAR labellist SRPAR",
974 "goto : SCOMPGOTO end_spec SLPAR labellist SRPAR opt_comma expr",
975 "opt_comma : /* empty */",
976 "opt_comma : SCOMMA",
977 "call : SCALL end_spec name",
978 "callarglist : callarg",
979 "callarglist : callarglist SCOMMA callarg",
981 "callarg : SSTAR label",
985 "exprlist : exprlist SCOMMA expr",
986 "end_spec : /* empty */",
987 "intonlyon : /* empty */",
988 "intonlyoff : /* empty */",
990 "io1 : iofmove ioctl",
991 "io1 : iofmove unpar_fexpr",
992 "io1 : iofmove SSTAR",
993 "io1 : iofmove SPOWER",
994 "io1 : iofctl ioctl",
997 "io1 : read ioctl inlist",
998 "io1 : read infmt SCOMMA inlist",
999 "io1 : read ioctl SCOMMA inlist",
1000 "io1 : write ioctl",
1001 "io1 : write ioctl outlist",
1003 "io1 : print SCOMMA outlist",
1004 "iofmove : fmkwd end_spec in_ioctl",
1005 "fmkwd : SBACKSPACE",
1008 "iofctl : ctlkwd end_spec in_ioctl",
1009 "ctlkwd : SINQUIRE",
1012 "infmt : unpar_fexpr",
1014 "ioctl : SLPAR fexpr SRPAR",
1015 "ioctl : SLPAR ctllist SRPAR",
1016 "ctllist : ioclause",
1017 "ctllist : ctllist SCOMMA ioclause",
1020 "ioclause : SPOWER",
1021 "ioclause : nameeq expr",
1022 "ioclause : nameeq SSTAR",
1023 "ioclause : nameeq SPOWER",
1025 "read : SREAD end_spec in_ioctl",
1026 "write : SWRITE end_spec in_ioctl",
1027 "print : SPRINT end_spec fexpr in_ioctl",
1028 "print : SPRINT end_spec SSTAR in_ioctl",
1030 "inlist : inlist SCOMMA inelt",
1032 "inelt : SLPAR inlist SCOMMA dospec SRPAR",
1036 "out2 : uexpr SCOMMA uexpr",
1037 "out2 : uexpr SCOMMA other",
1038 "out2 : other SCOMMA uexpr",
1039 "out2 : other SCOMMA other",
1040 "out2 : out2 SCOMMA uexpr",
1041 "out2 : out2 SCOMMA other",
1042 "other : complex_const",
1043 "other : SLPAR expr SRPAR",
1044 "other : SLPAR uexpr SCOMMA dospec SRPAR",
1045 "other : SLPAR other SCOMMA dospec SRPAR",
1046 "other : SLPAR out2 SCOMMA dospec SRPAR",
1047 "in_ioctl : /* empty */",
1049 #endif /* YYDEBUG */
1051 * @(#) yaccpar 1.4 88/11/11
1053 * UNIX is a registered trademark of AT&T
1054 * Portions Copyright 1976-1989 AT&T
1055 * Portions Copyright 1980-1989 Microsoft Corporation
1056 * Portions Copyright 1983-1989 The Santa Cruz Operation, Inc
1057 * All Rights Reserved
1059 #ident "@(#)yacc:yaccpar 1.10"
1062 ** Skeleton parser driver for yacc output
1066 ** yacc user known macros and defines
1068 #define YYERROR goto yyerrlab
1069 #define YYACCEPT return(0)
1070 #define YYABORT return(1)
1071 #define YYBACKUP( newtoken, newvalue )\
1073 if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\
1075 yyerror( "syntax error - cannot backup" );\
1083 #define YYRECOVERING() (!!yyerrflag)
1085 # define YYDEBUG 1 /* make debugging available */
1089 ** user known globals
1091 int yydebug; /* set to 1 to get debugging */
1094 ** driver internal defines
1096 #define YYFLAG (-1000)
1099 ** global variables used by the parser
1101 YYSTYPE yyv[ YYMAXDEPTH ]; /* value stack */
1102 int yys[ YYMAXDEPTH ]; /* state stack */
1104 YYSTYPE *yypv; /* top of value stack */
1105 int *yyps; /* top of state stack */
1107 int yystate; /* current state */
1108 int yytmp; /* extra var (lasts between blocks) */
1110 int yynerrs; /* number of errors */
1111 int yyerrflag; /* error recovery flag */
1112 int yychar; /* current input token number */
1117 ** yyparse - return 0 if worked, 1 if syntax error not recovered from
1122 register YYSTYPE *yypvt; /* top of value stack for $vars */
1125 ** Initialize externals - yyparse may be called more than once
1137 register YYSTYPE *yy_pv; /* top of value stack */
1138 register int *yy_ps; /* top of state stack */
1139 register int yy_state; /* current state */
1140 register int yy_n; /* internal state number info */
1143 ** get globals into registers.
1144 ** branch to here only if YYBACKUP was called.
1153 ** get globals into registers.
1154 ** either we just started, or we just finished a reduction
1162 ** top of for (;;) loop while no reductions done
1166 ** put a state and value onto the stacks
1170 ** if debugging, look up token value in list of value vs.
1171 ** name pairs. 0 and negative (-1) are special values.
1172 ** Note: linear search is used since time is not a real
1173 ** consideration while debugging.
1179 printf( "State %d, token ", yy_state );
1181 printf( "end-of-file\n" );
1182 else if ( yychar < 0 )
1183 printf( "-none-\n" );
1186 for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
1189 if ( yytoks[yy_i].t_val == yychar )
1192 printf( "%s\n", yytoks[yy_i].t_name );
1195 #endif /* YYDEBUG */
1196 if ( ++yy_ps >= &yys[ YYMAXDEPTH ] ) /* room on stack? */
1198 yyerror( "yacc stack overflow" );
1205 ** we have a new state - find out what to do
1208 if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG )
1209 goto yydefault; /* simple state */
1212 ** if debugging, need to mark whether new token grabbed
1216 if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
1217 yychar = 0; /* reached EOF */
1219 if ( yydebug && yytmp )
1223 printf( "Received token " );
1225 printf( "end-of-file\n" );
1226 else if ( yychar < 0 )
1227 printf( "-none-\n" );
1230 for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
1233 if ( yytoks[yy_i].t_val == yychar )
1236 printf( "%s\n", yytoks[yy_i].t_name );
1239 #endif /* YYDEBUG */
1240 if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) )
1242 if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar ) /*valid shift*/
1247 if ( yyerrflag > 0 )
1253 if ( ( yy_n = yydef[ yy_state ] ) == -2 )
1258 if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
1259 yychar = 0; /* reached EOF */
1261 if ( yydebug && yytmp )
1265 printf( "Received token " );
1267 printf( "end-of-file\n" );
1268 else if ( yychar < 0 )
1269 printf( "-none-\n" );
1273 yytoks[yy_i].t_val >= 0;
1276 if ( yytoks[yy_i].t_val
1282 printf( "%s\n", yytoks[yy_i].t_name );
1285 #endif /* YYDEBUG */
1287 ** look through exception table
1290 register int *yyxi = yyexca;
1292 while ( ( *yyxi != -1 ) ||
1293 ( yyxi[1] != yy_state ) )
1297 while ( ( *(yyxi += 2) >= 0 ) &&
1298 ( *yyxi != yychar ) )
1300 if ( ( yy_n = yyxi[1] ) < 0 )
1306 ** check for syntax error
1308 if ( yy_n == 0 ) /* have an error */
1310 /* no worry about speed here! */
1311 switch ( yyerrflag )
1313 case 0: /* new error */
1314 yyerror( "syntax error" );
1318 ** get globals into registers.
1319 ** we have a user generated syntax type error
1327 case 2: /* incompletely recovered error */
1331 ** find state where "error" is a legal
1334 while ( yy_ps >= yys )
1336 yy_n = yypact[ *yy_ps ] + YYERRCODE;
1337 if ( yy_n >= 0 && yy_n < YYLAST &&
1338 yychk[yyact[yy_n]] == YYERRCODE) {
1340 ** simulate shift of "error"
1342 yy_state = yyact[ yy_n ];
1346 ** current state has no shift on
1347 ** "error", pop stack
1350 # define _POP_ "Error recovery pops state %d, uncovers state %d\n"
1352 printf( _POP_, *yy_ps,
1360 ** there is no state on stack with "error" as
1361 ** a valid shift. give up.
1364 case 3: /* no shift yet; eat a token */
1367 ** if debugging, look up token in list of
1368 ** pairs. 0 and negative shouldn't occur,
1369 ** but since timing doesn't matter when
1370 ** debugging, it doesn't hurt to leave the
1377 printf( "Error recovery discards " );
1379 printf( "token end-of-file\n" );
1380 else if ( yychar < 0 )
1381 printf( "token -none-\n" );
1385 yytoks[yy_i].t_val >= 0;
1388 if ( yytoks[yy_i].t_val
1394 printf( "token %s\n",
1395 yytoks[yy_i].t_name );
1398 #endif /* YYDEBUG */
1399 if ( yychar == 0 ) /* reached EOF. quit */
1404 }/* end if ( yy_n == 0 ) */
1406 ** reduction by production yy_n
1407 ** put stack tops, etc. so things right after switch
1411 ** if debugging, print the string that is the user's
1412 ** specification of the reduction which is just about
1416 printf( "Reduce by (%d) \"%s\"\n",
1417 yy_n, yyreds[ yy_n ] );
1419 yytmp = yy_n; /* value to switch over */
1420 yypvt = yy_pv; /* $vars top of value stack */
1422 ** Look in goto table for next state
1423 ** Sorry about using yy_state here as temporary
1424 ** register variable, but why not, if it works...
1425 ** If yyr2[ yy_n ] doesn't have the low order bit
1426 ** set, then there is no action to be done for
1427 ** this reduction. So, no saving & unsaving of
1428 ** registers done. The only difference between the
1429 ** code just after the if and the body of the if is
1430 ** the goto yy_stack in the body. This way the test
1431 ** can be made before the choice of what to do is needed.
1434 /* length of production doubled with extra bit */
1435 register int yy_len = yyr2[ yy_n ];
1437 if ( !( yy_len & 01 ) )
1440 yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
1441 yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
1442 *( yy_ps -= yy_len ) + 1;
1443 if ( yy_state >= YYLAST ||
1445 yyact[ yy_state ] ] != -yy_n )
1447 yy_state = yyact[ yypgo[ yy_n ] ];
1452 yyval = ( yy_pv -= yy_len )[1]; /* $$ = $1 */
1453 yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
1454 *( yy_ps -= yy_len ) + 1;
1455 if ( yy_state >= YYLAST ||
1456 yychk[ yy_state = yyact[ yy_state ] ] != -yy_n )
1458 yy_state = yyact[ yypgo[ yy_n ] ];
1461 /* save until reenter driver code */
1467 ** code supplied by user is placed in this switch
1473 /* # line 224 "gram.in" */
1475 /* stat: is the nonterminal for Fortran statements */
1477 lastwasbranch = NO; } break;
1479 /* # line 230 "gram.in" */
1480 { /* forbid further statement function definitions... */
1481 if (parstate == INDATA && laststfcn != thisstno)
1484 if(yypvt[-1].labval && (yypvt[-1].labval->labelno==dorange))
1485 enddo(yypvt[-1].labval->labelno);
1486 if(lastwasbranch && thislabel==NULL)
1487 warn("statement cannot be reached");
1488 lastwasbranch = thiswasbranch;
1490 if(yypvt[-1].labval)
1492 if(yypvt[-1].labval->labtype == LABFORMAT)
1493 err("label already that of a format");
1495 yypvt[-1].labval->labtype = LABEXEC;
1500 /* # line 250 "gram.in" */
1502 doinclude( yypvt[-0].charpval );
1504 fprintf(diagfile, "Cannot open file %s\n", yypvt[-0].charpval);
1509 /* # line 258 "gram.in" */
1510 { if (yypvt[-2].labval)
1512 endproc(); /* lastwasbranch = NO; -- set in endproc() */
1515 /* # line 263 "gram.in" */
1516 { extern void unclassifiable();
1519 /* flline flushes the current line, ignoring the rest of the text there */
1523 /* # line 270 "gram.in" */
1524 { flline(); needkwd = NO; inioctl = NO;
1525 yyerrok; yyclearin; } break;
1527 /* # line 275 "gram.in" */
1531 yyval.labval = thislabel = mklabel(yystno);
1532 if( ! headerdone ) {
1533 if (procclass == CLUNKNOWN)
1535 puthead(CNULL, procclass);
1537 if(thislabel->labdefined)
1538 execerr("label %s already defined",
1539 convic(thislabel->stateno) );
1541 if(thislabel->blklevel!=0 && thislabel->blklevel<blklevel
1542 && thislabel->labtype!=LABFORMAT)
1543 warn1("there is a branch to label %s from outside block",
1544 convic( (ftnint) (thislabel->stateno) ) );
1545 thislabel->blklevel = blklevel;
1546 thislabel->labdefined = YES;
1547 if(thislabel->labtype != LABFORMAT)
1548 p1_label((long)(thislabel - labeltab));
1551 else yyval.labval = thislabel = NULL;
1554 /* # line 303 "gram.in" */
1555 {startproc(yypvt[-0].extval, CLMAIN); } break;
1557 /* # line 305 "gram.in" */
1558 { warn("ignoring arguments to main program");
1560 startproc(yypvt[-1].extval, CLMAIN); } break;
1562 /* # line 309 "gram.in" */
1563 { if(yypvt[-0].extval) NO66("named BLOCKDATA");
1564 startproc(yypvt[-0].extval, CLBLOCK); } break;
1566 /* # line 312 "gram.in" */
1567 { entrypt(CLPROC, TYSUBR, (ftnint) 0, yypvt[-1].extval, yypvt[-0].chval); } break;
1569 /* # line 314 "gram.in" */
1570 { entrypt(CLPROC, TYUNKNOWN, (ftnint) 0, yypvt[-1].extval, yypvt[-0].chval); } break;
1572 /* # line 316 "gram.in" */
1573 { entrypt(CLPROC, yypvt[-4].ival, varleng, yypvt[-1].extval, yypvt[-0].chval); } break;
1575 /* # line 318 "gram.in" */
1576 { if(parstate==OUTSIDE || procclass==CLMAIN
1577 || procclass==CLBLOCK)
1578 execerr("misplaced entry statement", CNULL);
1579 entrypt(CLENTRY, 0, (ftnint) 0, yypvt[-1].extval, yypvt[-0].chval);
1582 /* # line 326 "gram.in" */
1583 { newproc(); } break;
1585 /* # line 330 "gram.in" */
1586 { yyval.extval = newentry(yypvt[-0].namval, 1); } break;
1588 /* # line 334 "gram.in" */
1589 { yyval.namval = mkname(token); } break;
1591 /* # line 337 "gram.in" */
1592 { yyval.extval = NULL; } break;
1594 /* # line 355 "gram.in" */
1595 { yyval.chval = 0; } break;
1597 /* # line 357 "gram.in" */
1598 { NO66(" () argument list");
1599 yyval.chval = 0; } break;
1601 /* # line 360 "gram.in" */
1602 {yyval.chval = yypvt[-1].chval; } break;
1604 /* # line 364 "gram.in" */
1605 { yyval.chval = (yypvt[-0].namval ? mkchain((char *)yypvt[-0].namval,CHNULL) : CHNULL ); } break;
1607 /* # line 366 "gram.in" */
1608 { if(yypvt[-0].namval) yypvt[-2].chval = yyval.chval = mkchain((char *)yypvt[-0].namval, yypvt[-2].chval); } break;
1610 /* # line 370 "gram.in" */
1611 { if(yypvt[-0].namval->vstg!=STGUNKNOWN && yypvt[-0].namval->vstg!=STGARG)
1612 dclerr("name declared as argument after use", yypvt[-0].namval);
1613 yypvt[-0].namval->vstg = STGARG;
1616 /* # line 375 "gram.in" */
1617 { NO66("altenate return argument");
1619 /* substars means that '*'ed formal parameters should be replaced.
1620 This is used to specify alternate return labels; in theory, only
1621 parameter slots which have '*' should accept the statement labels.
1622 This compiler chooses to ignore the '*'s in the formal declaration, and
1623 always return the proper value anyway.
1625 This variable is only referred to in proc.c */
1627 yyval.namval = 0; substars = YES; } break;
1629 /* # line 391 "gram.in" */
1632 s = copyn(toklen+1, token);
1637 /* # line 407 "gram.in" */
1638 { NO66("SAVE statement");
1639 saveall = YES; } break;
1641 /* # line 410 "gram.in" */
1642 { NO66("SAVE statement"); } break;
1644 /* # line 412 "gram.in" */
1645 { fmtstmt(thislabel); setfmt(thislabel); } break;
1647 /* # line 414 "gram.in" */
1648 { NO66("PARAMETER statement"); } break;
1650 /* # line 418 "gram.in" */
1651 { settype(yypvt[-4].namval, yypvt[-6].ival, yypvt[-0].lval);
1652 if(ndim>0) setbound(yypvt[-4].namval,ndim,dims);
1655 /* # line 422 "gram.in" */
1656 { settype(yypvt[-2].namval, yypvt[-4].ival, yypvt[-0].lval);
1657 if(ndim>0) setbound(yypvt[-2].namval,ndim,dims);
1660 /* # line 426 "gram.in" */
1661 { if (new_dcl == 2) {
1662 err("attempt to give DATA in type-declaration");
1667 /* # line 433 "gram.in" */
1668 { new_dcl = 2; } break;
1670 /* # line 436 "gram.in" */
1671 { varleng = yypvt[-0].lval;
1672 if (vartype == TYLOGICAL && varleng == 1) {
1674 err("treating LOGICAL*1 as LOGICAL");
1675 --nerr; /* allow generation of .c file */
1679 /* # line 446 "gram.in" */
1680 { varleng = (yypvt[-0].ival<0 || yypvt[-0].ival==TYLONG ? 0 : typesize[yypvt[-0].ival]);
1681 vartype = yypvt[-0].ival; } break;
1683 /* # line 450 "gram.in" */
1684 { yyval.ival = TYLONG; } break;
1686 /* # line 451 "gram.in" */
1687 { yyval.ival = tyreal; } break;
1689 /* # line 452 "gram.in" */
1690 { ++complex_seen; yyval.ival = TYCOMPLEX; } break;
1692 /* # line 453 "gram.in" */
1693 { yyval.ival = TYDREAL; } break;
1695 /* # line 454 "gram.in" */
1696 { ++dcomplex_seen; NOEXT("DOUBLE COMPLEX statement"); yyval.ival = TYDCOMPLEX; } break;
1698 /* # line 455 "gram.in" */
1699 { yyval.ival = TYLOGICAL; } break;
1701 /* # line 456 "gram.in" */
1702 { NO66("CHARACTER statement"); yyval.ival = TYCHAR; } break;
1704 /* # line 457 "gram.in" */
1705 { yyval.ival = TYUNKNOWN; } break;
1707 /* # line 458 "gram.in" */
1708 { yyval.ival = TYUNKNOWN; } break;
1710 /* # line 459 "gram.in" */
1711 { NOEXT("AUTOMATIC statement"); yyval.ival = - STGAUTO; } break;
1713 /* # line 460 "gram.in" */
1714 { NOEXT("STATIC statement"); yyval.ival = - STGBSS; } break;
1716 /* # line 464 "gram.in" */
1717 { yyval.lval = varleng; } break;
1719 /* # line 466 "gram.in" */
1722 p = yypvt[-1].expval;
1723 NO66("length specification *n");
1724 if( ! ISICON(p) || p->constblock.Const.ci<0 )
1727 dclerr("length must be a positive integer constant",
1731 if (vartype == TYCHAR)
1732 yyval.lval = p->constblock.Const.ci;
1733 else switch((int)p->constblock.Const.ci) {
1734 case 1: yyval.lval = 1; break;
1735 case 2: yyval.lval = typesize[TYSHORT]; break;
1736 case 4: yyval.lval = typesize[TYLONG]; break;
1737 case 8: yyval.lval = typesize[TYDREAL]; break;
1738 case 16: yyval.lval = typesize[TYDCOMPLEX]; break;
1740 dclerr("invalid length",NPNULL);
1741 yyval.lval = varleng;
1746 /* # line 492 "gram.in" */
1747 { NO66("length specification *(*)"); yyval.lval = -1; } break;
1749 /* # line 496 "gram.in" */
1750 { incomm( yyval.extval = comblock("") , yypvt[-0].namval ); } break;
1752 /* # line 498 "gram.in" */
1753 { yyval.extval = yypvt[-1].extval; incomm(yypvt[-1].extval, yypvt[-0].namval); } break;
1755 /* # line 500 "gram.in" */
1756 { yyval.extval = yypvt[-2].extval; incomm(yypvt[-2].extval, yypvt[-0].namval); } break;
1758 /* # line 502 "gram.in" */
1759 { incomm(yypvt[-2].extval, yypvt[-0].namval); } break;
1761 /* # line 506 "gram.in" */
1762 { yyval.extval = comblock(""); } break;
1764 /* # line 508 "gram.in" */
1765 { yyval.extval = comblock(token); } break;
1767 /* # line 512 "gram.in" */
1768 { setext(yypvt[-0].namval); } break;
1770 /* # line 514 "gram.in" */
1771 { setext(yypvt[-0].namval); } break;
1773 /* # line 518 "gram.in" */
1774 { NO66("INTRINSIC statement"); setintr(yypvt[-0].namval); } break;
1776 /* # line 520 "gram.in" */
1777 { setintr(yypvt[-0].namval); } break;
1779 /* # line 528 "gram.in" */
1781 struct Equivblock *p;
1782 if(nequiv >= maxequiv)
1783 many("equivalences", 'q', maxequiv);
1784 p = & eqvclass[nequiv++];
1788 p->equivs = yypvt[-1].eqvval;
1791 /* # line 541 "gram.in" */
1792 { yyval.eqvval=ALLOC(Eqvchain);
1793 yyval.eqvval->eqvitem.eqvlhs = (struct Primblock *)yypvt[-0].expval;
1796 /* # line 545 "gram.in" */
1797 { yyval.eqvval=ALLOC(Eqvchain);
1798 yyval.eqvval->eqvitem.eqvlhs = (struct Primblock *) yypvt[-0].expval;
1799 yyval.eqvval->eqvnextp = yypvt[-2].eqvval;
1802 /* # line 556 "gram.in" */
1803 { if(parstate == OUTSIDE)
1806 startproc(ESNULL, CLMAIN);
1808 if(parstate < INDATA)
1815 /* # line 570 "gram.in" */
1817 if(nextdata(&junk) != NULL)
1818 err("too few initializers");
1819 frdata(yypvt[-4].chval);
1823 /* # line 578 "gram.in" */
1824 { frchain(&datastack); curdtp = 0; } break;
1826 /* # line 580 "gram.in" */
1827 { pop_datastack(); } break;
1829 /* # line 582 "gram.in" */
1830 { toomanyinit = NO; } break;
1832 /* # line 587 "gram.in" */
1833 { dataval(ENULL, yypvt[-0].expval); } break;
1835 /* # line 589 "gram.in" */
1836 { dataval(yypvt[-2].expval, yypvt[-0].expval); } break;
1838 /* # line 594 "gram.in" */
1839 { if( yypvt[-1].ival==OPMINUS && ISCONST(yypvt[-0].expval) )
1840 consnegop((Constp)yypvt[-0].expval);
1841 yyval.expval = yypvt[-0].expval;
1844 /* # line 606 "gram.in" */
1846 yypvt[-0].namval->vsave = YES;
1847 k = yypvt[-0].namval->vstg;
1848 if( ! ONEOF(k, M(STGUNKNOWN)|M(STGBSS)|M(STGINIT)) )
1849 dclerr("can only save static variables", yypvt[-0].namval);
1852 /* # line 620 "gram.in" */
1853 { if(yypvt[-2].namval->vclass == CLUNKNOWN)
1854 make_param((struct Paramblock *)yypvt[-2].namval, yypvt[-0].expval);
1855 else dclerr("cannot make into parameter", yypvt[-2].namval);
1858 /* # line 627 "gram.in" */
1859 { if(ndim>0) setbound(yypvt[-1].namval, ndim, dims); } break;
1861 /* # line 631 "gram.in" */
1863 np = ( (struct Primblock *) yypvt[-0].expval) -> namep;
1865 if(np->vstg == STGCOMMON)
1866 extsymtab[np->vardesc.varno].extinit = YES;
1867 else if(np->vstg==STGEQUIV)
1868 eqvclass[np->vardesc.varno].eqvinit = YES;
1869 else if(np->vstg!=STGINIT && np->vstg!=STGBSS)
1870 dclerr("inconsistent storage classes", np);
1871 yyval.chval = mkchain((char *)yypvt[-0].expval, CHNULL);
1874 /* # line 643 "gram.in" */
1875 { chainp p; struct Impldoblock *q;
1877 q = ALLOC(Impldoblock);
1879 (q->varnp = (Namep) (yypvt[-1].chval->datap))->vimpldovar = 1;
1880 p = yypvt[-1].chval->nextp;
1881 if(p) { q->implb = (expptr)(p->datap); p = p->nextp; }
1882 if(p) { q->impub = (expptr)(p->datap); p = p->nextp; }
1883 if(p) { q->impstep = (expptr)(p->datap); }
1884 frchain( & (yypvt[-1].chval) );
1885 yyval.chval = mkchain((char *)q, CHNULL);
1886 q->datalist = hookup(yypvt[-3].chval, yyval.chval);
1889 /* # line 659 "gram.in" */
1892 datastack = mkchain((char *)curdtp, datastack);
1893 curdtp = yypvt[-0].chval; curdtelt = 0;
1896 /* # line 665 "gram.in" */
1897 { yyval.chval = hookup(yypvt[-2].chval, yypvt[-0].chval); } break;
1899 /* # line 669 "gram.in" */
1900 { ndim = 0; } break;
1902 /* # line 673 "gram.in" */
1903 { ndim = 0; } break;
1905 /* # line 678 "gram.in" */
1908 err("too many dimensions");
1909 else if(ndim < maxdim)
1910 { dims[ndim].lb = 0;
1911 dims[ndim].ub = yypvt[-0].expval;
1916 /* # line 688 "gram.in" */
1919 err("too many dimensions");
1920 else if(ndim < maxdim)
1921 { dims[ndim].lb = yypvt[-2].expval;
1922 dims[ndim].ub = yypvt[-0].expval;
1927 /* # line 700 "gram.in" */
1928 { yyval.expval = 0; } break;
1930 /* # line 705 "gram.in" */
1931 { nstars = 1; labarray[0] = yypvt[-0].labval; } break;
1933 /* # line 707 "gram.in" */
1934 { if(nstars < MAXLABLIST) labarray[nstars++] = yypvt[-0].labval; } break;
1936 /* # line 711 "gram.in" */
1937 { yyval.labval = execlab( convci(toklen, token) ); } break;
1939 /* # line 715 "gram.in" */
1940 { NO66("IMPLICIT statement"); } break;
1942 /* # line 721 "gram.in" */
1943 { if (vartype != TYUNKNOWN)
1944 dclerr("-- expected letter range",NPNULL);
1945 setimpl(vartype, varleng, 'a', 'z'); } break;
1947 /* # line 726 "gram.in" */
1948 { needkwd = 1; } break;
1950 /* # line 735 "gram.in" */
1951 { setimpl(vartype, varleng, yypvt[-0].ival, yypvt[-0].ival); } break;
1953 /* # line 737 "gram.in" */
1954 { setimpl(vartype, varleng, yypvt[-2].ival, yypvt[-0].ival); } break;
1956 /* # line 741 "gram.in" */
1957 { if(toklen!=1 || token[0]<'a' || token[0]>'z')
1959 dclerr("implicit item must be single letter", NPNULL);
1962 else yyval.ival = token[0];
1965 /* # line 755 "gram.in" */
1967 if(yypvt[-2].namval->vclass == CLUNKNOWN)
1969 yypvt[-2].namval->vclass = CLNAMELIST;
1970 yypvt[-2].namval->vtype = TYINT;
1971 yypvt[-2].namval->vstg = STGBSS;
1972 yypvt[-2].namval->varxptr.namelist = yypvt[-0].chval;
1973 yypvt[-2].namval->vardesc.varno = ++lastvarno;
1975 else dclerr("cannot be a namelist name", yypvt[-2].namval);
1978 /* # line 769 "gram.in" */
1979 { yyval.chval = mkchain((char *)yypvt[-0].namval, CHNULL); } break;
1981 /* # line 771 "gram.in" */
1982 { yyval.chval = hookup(yypvt[-2].chval, mkchain((char *)yypvt[-0].namval, CHNULL)); } break;
1984 /* # line 775 "gram.in" */
1987 case OUTSIDE: newproc();
1988 startproc(ESNULL, CLMAIN);
1989 case INSIDE: parstate = INDCL;
1994 "Statement order error: declaration after DATA",
1999 dclerr("declaration among executables", NPNULL);
2003 /* # line 794 "gram.in" */
2004 { yyval.chval = 0; } break;
2006 /* # line 799 "gram.in" */
2007 { yyval.chval = mkchain((char *)yypvt[-0].expval, CHNULL); } break;
2009 /* # line 801 "gram.in" */
2010 { yyval.chval = hookup(yypvt[-2].chval, mkchain((char *)yypvt[-0].expval,CHNULL) ); } break;
2012 /* # line 806 "gram.in" */
2013 { yyval.expval = yypvt[-1].expval; } break;
2015 /* # line 813 "gram.in" */
2016 { yyval.expval = mkexpr(yypvt[-1].ival, yypvt[-2].expval, yypvt[-0].expval); } break;
2018 /* # line 815 "gram.in" */
2019 { yyval.expval = mkexpr(OPSTAR, yypvt[-2].expval, yypvt[-0].expval); } break;
2021 /* # line 817 "gram.in" */
2022 { yyval.expval = mkexpr(OPSLASH, yypvt[-2].expval, yypvt[-0].expval); } break;
2024 /* # line 819 "gram.in" */
2025 { yyval.expval = mkexpr(OPPOWER, yypvt[-2].expval, yypvt[-0].expval); } break;
2027 /* # line 821 "gram.in" */
2028 { if(yypvt[-1].ival == OPMINUS)
2029 yyval.expval = mkexpr(OPNEG, yypvt[-0].expval, ENULL);
2030 else yyval.expval = yypvt[-0].expval;
2033 /* # line 826 "gram.in" */
2034 { yyval.expval = mkexpr(yypvt[-1].ival, yypvt[-2].expval, yypvt[-0].expval); } break;
2036 /* # line 828 "gram.in" */
2037 { NO66(".EQV. operator");
2038 yyval.expval = mkexpr(OPEQV, yypvt[-2].expval,yypvt[-0].expval); } break;
2040 /* # line 831 "gram.in" */
2041 { NO66(".NEQV. operator");
2042 yyval.expval = mkexpr(OPNEQV, yypvt[-2].expval, yypvt[-0].expval); } break;
2044 /* # line 834 "gram.in" */
2045 { yyval.expval = mkexpr(OPOR, yypvt[-2].expval, yypvt[-0].expval); } break;
2047 /* # line 836 "gram.in" */
2048 { yyval.expval = mkexpr(OPAND, yypvt[-2].expval, yypvt[-0].expval); } break;
2050 /* # line 838 "gram.in" */
2051 { yyval.expval = mkexpr(OPNOT, yypvt[-0].expval, ENULL); } break;
2053 /* # line 840 "gram.in" */
2054 { NO66("concatenation operator //");
2055 yyval.expval = mkexpr(OPCONCAT, yypvt[-2].expval, yypvt[-0].expval); } break;
2057 /* # line 844 "gram.in" */
2058 { yyval.ival = OPPLUS; } break;
2060 /* # line 845 "gram.in" */
2061 { yyval.ival = OPMINUS; } break;
2063 /* # line 848 "gram.in" */
2064 { yyval.ival = OPEQ; } break;
2066 /* # line 849 "gram.in" */
2067 { yyval.ival = OPGT; } break;
2069 /* # line 850 "gram.in" */
2070 { yyval.ival = OPLT; } break;
2072 /* # line 851 "gram.in" */
2073 { yyval.ival = OPGE; } break;
2075 /* # line 852 "gram.in" */
2076 { yyval.ival = OPLE; } break;
2078 /* # line 853 "gram.in" */
2079 { yyval.ival = OPNE; } break;
2081 /* # line 857 "gram.in" */
2082 { yyval.expval = mkprim(yypvt[-0].namval, LBNULL, CHNULL); } break;
2084 /* # line 859 "gram.in" */
2085 { NO66("substring operator :");
2086 yyval.expval = mkprim(yypvt[-1].namval, LBNULL, yypvt[-0].chval); } break;
2088 /* # line 862 "gram.in" */
2089 { yyval.expval = mkprim(yypvt[-3].namval, mklist(yypvt[-1].chval), CHNULL); } break;
2091 /* # line 864 "gram.in" */
2092 { NO66("substring operator :");
2093 yyval.expval = mkprim(yypvt[-4].namval, mklist(yypvt[-2].chval), yypvt[-0].chval); } break;
2095 /* # line 869 "gram.in" */
2096 { yyval.chval = mkchain((char *)yypvt[-3].expval, mkchain((char *)yypvt[-1].expval,CHNULL)); } break;
2098 /* # line 873 "gram.in" */
2099 { yyval.expval = 0; } break;
2101 /* # line 878 "gram.in" */
2102 { if(yypvt[-0].namval->vclass == CLPARAM)
2103 yyval.expval = (expptr) cpexpr(
2104 ( (struct Paramblock *) (yypvt[-0].namval) ) -> paramval);
2107 /* # line 885 "gram.in" */
2108 { yyval.expval = mklogcon(1); } break;
2110 /* # line 886 "gram.in" */
2111 { yyval.expval = mklogcon(0); } break;
2113 /* # line 887 "gram.in" */
2114 { yyval.expval = mkstrcon(toklen, token); } break;
2116 /* # line 888 "gram.in" */
2117 { yyval.expval = mkintcon( convci(toklen, token) ); } break;
2119 /* # line 889 "gram.in" */
2120 { yyval.expval = mkrealcon(tyreal, token); } break;
2122 /* # line 890 "gram.in" */
2123 { yyval.expval = mkrealcon(TYDREAL, token); } break;
2125 /* # line 895 "gram.in" */
2126 { yyval.expval = mkcxcon(yypvt[-3].expval,yypvt[-1].expval); } break;
2128 /* # line 899 "gram.in" */
2129 { NOEXT("hex constant");
2130 yyval.expval = mkbitcon(4, toklen, token); } break;
2132 /* # line 902 "gram.in" */
2133 { NOEXT("octal constant");
2134 yyval.expval = mkbitcon(3, toklen, token); } break;
2136 /* # line 905 "gram.in" */
2137 { NOEXT("binary constant");
2138 yyval.expval = mkbitcon(1, toklen, token); } break;
2140 /* # line 911 "gram.in" */
2141 { yyval.expval = yypvt[-1].expval; } break;
2143 /* # line 917 "gram.in" */
2144 { yyval.expval = mkexpr(yypvt[-1].ival, yypvt[-2].expval, yypvt[-0].expval); } break;
2146 /* # line 919 "gram.in" */
2147 { yyval.expval = mkexpr(OPSTAR, yypvt[-2].expval, yypvt[-0].expval); } break;
2149 /* # line 921 "gram.in" */
2150 { yyval.expval = mkexpr(OPSLASH, yypvt[-2].expval, yypvt[-0].expval); } break;
2152 /* # line 923 "gram.in" */
2153 { yyval.expval = mkexpr(OPPOWER, yypvt[-2].expval, yypvt[-0].expval); } break;
2155 /* # line 925 "gram.in" */
2156 { if(yypvt[-1].ival == OPMINUS)
2157 yyval.expval = mkexpr(OPNEG, yypvt[-0].expval, ENULL);
2158 else yyval.expval = yypvt[-0].expval;
2161 /* # line 930 "gram.in" */
2162 { NO66("concatenation operator //");
2163 yyval.expval = mkexpr(OPCONCAT, yypvt[-2].expval, yypvt[-0].expval); } break;
2165 /* # line 935 "gram.in" */
2167 if(yypvt[-3].labval->labdefined)
2168 execerr("no backward DO loops", CNULL);
2169 yypvt[-3].labval->blklevel = blklevel+1;
2170 exdo(yypvt[-3].labval->labelno, NPNULL, yypvt[-0].chval);
2173 /* # line 942 "gram.in" */
2175 exdo(ctls - ctlstack - 2, NPNULL, yypvt[-0].chval);
2176 NOEXT("DO without label");
2179 /* # line 947 "gram.in" */
2180 { exenddo(NPNULL); } break;
2182 /* # line 949 "gram.in" */
2183 { exendif(); thiswasbranch = NO; } break;
2185 /* # line 952 "gram.in" */
2186 { exelif(yypvt[-2].expval); lastwasbranch = NO; } break;
2188 /* # line 954 "gram.in" */
2189 { exelse(); lastwasbranch = NO; } break;
2191 /* # line 956 "gram.in" */
2192 { exendif(); lastwasbranch = NO; } break;
2194 /* # line 960 "gram.in" */
2195 { exif(yypvt[-1].expval); } break;
2197 /* # line 964 "gram.in" */
2198 { yyval.chval = mkchain((char *)yypvt[-2].namval, yypvt[-0].chval); } break;
2200 /* # line 969 "gram.in" */
2201 { yyval.chval = mkchain(CNULL, (chainp)yypvt[-1].expval); } break;
2203 /* # line 973 "gram.in" */
2204 { exequals((struct Primblock *)yypvt[-2].expval, yypvt[-0].expval); } break;
2206 /* # line 975 "gram.in" */
2207 { exassign(yypvt[-0].namval, yypvt[-2].labval); } break;
2209 /* # line 979 "gram.in" */
2210 { inioctl = NO; } break;
2212 /* # line 981 "gram.in" */
2213 { exarif(yypvt[-6].expval, yypvt[-4].labval, yypvt[-2].labval, yypvt[-0].labval); thiswasbranch = YES; } break;
2215 /* # line 983 "gram.in" */
2216 { excall(yypvt[-0].namval, LBNULL, 0, labarray); } break;
2218 /* # line 985 "gram.in" */
2219 { excall(yypvt[-2].namval, LBNULL, 0, labarray); } break;
2221 /* # line 987 "gram.in" */
2222 { if(nstars < MAXLABLIST)
2223 excall(yypvt[-3].namval, mklist(yypvt[-1].chval), nstars, labarray);
2225 err("too many alternate returns");
2228 /* # line 993 "gram.in" */
2229 { exreturn(yypvt[-0].expval); thiswasbranch = YES; } break;
2231 /* # line 995 "gram.in" */
2232 { exstop(yypvt[-2].ival, yypvt[-0].expval); thiswasbranch = yypvt[-2].ival; } break;
2234 /* # line 999 "gram.in" */
2235 { yyval.labval = mklabel( convci(toklen, token) ); } break;
2237 /* # line 1003 "gram.in" */
2238 { if(parstate == OUTSIDE)
2241 startproc(ESNULL, CLMAIN);
2245 /* # line 1012 "gram.in" */
2246 { exgoto(yypvt[-0].labval); thiswasbranch = YES; } break;
2248 /* # line 1014 "gram.in" */
2249 { exasgoto(yypvt[-0].namval); thiswasbranch = YES; } break;
2251 /* # line 1016 "gram.in" */
2252 { exasgoto(yypvt[-4].namval); thiswasbranch = YES; } break;
2254 /* # line 1018 "gram.in" */
2255 { if(nstars < MAXLABLIST)
2256 putcmgo(putx(fixtype(yypvt[-0].expval)), nstars, labarray);
2258 err("computed GOTO list too long");
2261 /* # line 1030 "gram.in" */
2262 { nstars = 0; yyval.namval = yypvt[-0].namval; } break;
2264 /* # line 1034 "gram.in" */
2265 { yyval.chval = (yypvt[-0].expval ? mkchain((char *)yypvt[-0].expval,CHNULL) : CHNULL); } break;
2267 /* # line 1036 "gram.in" */
2268 { if(yypvt[-0].expval)
2269 if(yypvt[-2].chval) yyval.chval = hookup(yypvt[-2].chval, mkchain((char *)yypvt[-0].expval,CHNULL));
2270 else yyval.chval = mkchain((char *)yypvt[-0].expval,CHNULL);
2272 yyval.chval = yypvt[-2].chval;
2275 /* # line 1046 "gram.in" */
2276 { if(nstars<MAXLABLIST) labarray[nstars++] = yypvt[-0].labval; yyval.expval = 0; } break;
2278 /* # line 1050 "gram.in" */
2279 { yyval.ival = 0; } break;
2281 /* # line 1052 "gram.in" */
2282 { yyval.ival = 1; } break;
2284 /* # line 1056 "gram.in" */
2285 { yyval.chval = mkchain((char *)yypvt[-0].expval, CHNULL); } break;
2287 /* # line 1058 "gram.in" */
2288 { yyval.chval = hookup(yypvt[-2].chval, mkchain((char *)yypvt[-0].expval,CHNULL) ); } break;
2290 /* # line 1062 "gram.in" */
2291 { if(parstate == OUTSIDE)
2294 startproc(ESNULL, CLMAIN);
2297 /* This next statement depends on the ordering of the state table encoding */
2299 if(parstate < INDATA) enddcl();
2302 /* # line 1075 "gram.in" */
2303 { intonly = YES; } break;
2305 /* # line 1079 "gram.in" */
2306 { intonly = NO; } break;
2308 /* # line 1084 "gram.in" */
2311 /* # line 1089 "gram.in" */
2312 { ioclause(IOSUNIT, yypvt[-0].expval); endioctl(); } break;
2314 /* # line 1091 "gram.in" */
2315 { ioclause(IOSUNIT, ENULL); endioctl(); } break;
2317 /* # line 1093 "gram.in" */
2318 { ioclause(IOSUNIT, IOSTDERR); endioctl(); } break;
2320 /* # line 1096 "gram.in" */
2321 { doio(CHNULL); } break;
2323 /* # line 1098 "gram.in" */
2324 { doio(CHNULL); } break;
2326 /* # line 1100 "gram.in" */
2327 { doio(yypvt[-0].chval); } break;
2329 /* # line 1102 "gram.in" */
2330 { doio(yypvt[-0].chval); } break;
2332 /* # line 1104 "gram.in" */
2333 { doio(yypvt[-0].chval); } break;
2335 /* # line 1106 "gram.in" */
2336 { doio(CHNULL); } break;
2338 /* # line 1108 "gram.in" */
2339 { doio(yypvt[-0].chval); } break;
2341 /* # line 1110 "gram.in" */
2342 { doio(CHNULL); } break;
2344 /* # line 1112 "gram.in" */
2345 { doio(yypvt[-0].chval); } break;
2347 /* # line 1119 "gram.in" */
2348 { iostmt = IOBACKSPACE; } break;
2350 /* # line 1121 "gram.in" */
2351 { iostmt = IOREWIND; } break;
2353 /* # line 1123 "gram.in" */
2354 { iostmt = IOENDFILE; } break;
2356 /* # line 1130 "gram.in" */
2357 { iostmt = IOINQUIRE; } break;
2359 /* # line 1132 "gram.in" */
2360 { iostmt = IOOPEN; } break;
2362 /* # line 1134 "gram.in" */
2363 { iostmt = IOCLOSE; } break;
2365 /* # line 1138 "gram.in" */
2367 ioclause(IOSUNIT, ENULL);
2368 ioclause(IOSFMT, yypvt[-0].expval);
2372 /* # line 1144 "gram.in" */
2374 ioclause(IOSUNIT, ENULL);
2375 ioclause(IOSFMT, ENULL);
2379 /* # line 1152 "gram.in" */
2381 ioclause(IOSUNIT, yypvt[-1].expval);
2385 /* # line 1157 "gram.in" */
2386 { endioctl(); } break;
2388 /* # line 1165 "gram.in" */
2389 { ioclause(IOSPOSITIONAL, yypvt[-0].expval); } break;
2391 /* # line 1167 "gram.in" */
2392 { ioclause(IOSPOSITIONAL, ENULL); } break;
2394 /* # line 1169 "gram.in" */
2395 { ioclause(IOSPOSITIONAL, IOSTDERR); } break;
2397 /* # line 1171 "gram.in" */
2398 { ioclause(yypvt[-1].ival, yypvt[-0].expval); } break;
2400 /* # line 1173 "gram.in" */
2401 { ioclause(yypvt[-1].ival, ENULL); } break;
2403 /* # line 1175 "gram.in" */
2404 { ioclause(yypvt[-1].ival, IOSTDERR); } break;
2406 /* # line 1179 "gram.in" */
2407 { yyval.ival = iocname(); } break;
2409 /* # line 1183 "gram.in" */
2410 { iostmt = IOREAD; } break;
2412 /* # line 1187 "gram.in" */
2413 { iostmt = IOWRITE; } break;
2415 /* # line 1191 "gram.in" */
2418 ioclause(IOSUNIT, ENULL);
2419 ioclause(IOSFMT, yypvt[-1].expval);
2423 /* # line 1198 "gram.in" */
2426 ioclause(IOSUNIT, ENULL);
2427 ioclause(IOSFMT, ENULL);
2431 /* # line 1207 "gram.in" */
2432 { yyval.chval = mkchain((char *)yypvt[-0].tagval, CHNULL); } break;
2434 /* # line 1209 "gram.in" */
2435 { yyval.chval = hookup(yypvt[-2].chval, mkchain((char *)yypvt[-0].tagval, CHNULL)); } break;
2437 /* # line 1213 "gram.in" */
2438 { yyval.tagval = (tagptr) yypvt[-0].expval; } break;
2440 /* # line 1215 "gram.in" */
2441 { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval,yypvt[-3].chval); } break;
2443 /* # line 1219 "gram.in" */
2444 { yyval.chval = mkchain((char *)yypvt[-0].expval, CHNULL); } break;
2446 /* # line 1221 "gram.in" */
2447 { yyval.chval = mkchain((char *)yypvt[-0].tagval, CHNULL); } break;
2449 /* # line 1226 "gram.in" */
2450 { yyval.chval = mkchain((char *)yypvt[-2].expval, mkchain((char *)yypvt[-0].expval, CHNULL) ); } break;
2452 /* # line 1228 "gram.in" */
2453 { yyval.chval = mkchain((char *)yypvt[-2].expval, mkchain((char *)yypvt[-0].tagval, CHNULL) ); } break;
2455 /* # line 1230 "gram.in" */
2456 { yyval.chval = mkchain((char *)yypvt[-2].tagval, mkchain((char *)yypvt[-0].expval, CHNULL) ); } break;
2458 /* # line 1232 "gram.in" */
2459 { yyval.chval = mkchain((char *)yypvt[-2].tagval, mkchain((char *)yypvt[-0].tagval, CHNULL) ); } break;
2461 /* # line 1234 "gram.in" */
2462 { yyval.chval = hookup(yypvt[-2].chval, mkchain((char *)yypvt[-0].expval, CHNULL) ); } break;
2464 /* # line 1236 "gram.in" */
2465 { yyval.chval = hookup(yypvt[-2].chval, mkchain((char *)yypvt[-0].tagval, CHNULL) ); } break;
2467 /* # line 1240 "gram.in" */
2468 { yyval.tagval = (tagptr) yypvt[-0].expval; } break;
2470 /* # line 1242 "gram.in" */
2471 { yyval.tagval = (tagptr) yypvt[-1].expval; } break;
2473 /* # line 1244 "gram.in" */
2474 { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval, mkchain((char *)yypvt[-3].expval, CHNULL) ); } break;
2476 /* # line 1246 "gram.in" */
2477 { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval, mkchain((char *)yypvt[-3].tagval, CHNULL) ); } break;
2479 /* # line 1248 "gram.in" */
2480 { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval, yypvt[-3].chval); } break;
2482 /* # line 1252 "gram.in" */
2483 { startioctl(); } break;
2485 goto yystack; /* reset registers in driver code */