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