|
|
1.1 root 1:
2: #line 8 "sh.y"
3:
4: #include "sh.h"
5:
6: #define YYERROR { yyerrflag=1; goto YYerract; }
7:
8: extern NODE *node();
9:
10: #include "y.tab.h"
11: #define YYCLEARIN yychar = -1000
12: #define YYERROK yyerrflag = 0
13: extern int yychar;
14: extern short yyerrflag;
15: #ifndef YYMAXDEPTH
16: #define YYMAXDEPTH 150
17: #endif
18: YYSTYPE yyval, yylval;
19:
20: #line 570 "sh.y"
21:
22: /*
23: * Create a node.
24: */
25: NODE *
26: node(type, auxp, next)
27: NODE *auxp, *next;
28: {
29: register NODE *np;
30:
31: np = (NODE *) balloc(sizeof (NODE));
32: np->n_type = type;
33: np->n_auxp = auxp;
34: np->n_next = next;
35: return np;
36: }
37:
38: #define NBPC 8
39: #define NKEY 8
40: static char keys[NKEY] = { 0 };
41: static int keyi = NKEY * NBPC;
42:
43: keyflush()
44: {
45: register char *kp;
46:
47: for (kp = keys+NKEY; kp > keys; *--kp = 0)
48: ;
49: keyi = NKEY * NBPC;
50: }
51:
52: keypop()
53: {
54: register char *kp;
55: register int km;
56:
57: if ((km = keyi++) >= NKEY * NBPC) {
58: panic(11);
59: NOTREACHED;
60: }
61: kp = keys + (km / NBPC);
62: km = 1 << (km %= NBPC);
63: keyflag = (*kp & km) ? 1 : 0;
64: *kp &= ~km;
65: }
66:
67: keypush()
68: {
69: register char *kp;
70: register int km;
71:
72: if ((km = --keyi) < 0) {
73: panic(12);
74: NOTREACHED;
75: }
76: if (keyflag) {
77: kp = keys + (km / NBPC);
78: km = 1 << (km %= NBPC);
79: *kp |= km;
80: }
81: }
82: /*
83: * The following fragments might implement named pipes.
84: * The token declaration goes in the header.
85: * The nopen production should go with the others of its ilk.
86: * The production fragment goes into arg:
87: %token _NOPEN _NCLOSE
88: nopen: _NOPEN optnls ;
89:
90: | nopen pipe_cmd ')' {
91: $$ = node(NRPIPE, $2, NULL);
92: }
93: | oparen pipe_cmd _NCLOSE {
94: $$ = node(NWPIPE, $2, NULL);
95: }
96: CLOSE {
97: $$ = node(NWPIPE, $2, NULL);
98: }
99: *
100: */
101: #ifdef YYTNAMES
102: struct yytname yytnames[33] =
103: {
104: "$end", -1,
105: "error", -2,
106: "_ANDF", 256,
107: "_ASGN", 257,
108: "_CASE", 258,
109: "_CBRAC", 259,
110: "_DO", 260,
111: "_DONE", 261,
112: "_DSEMI", 262,
113: "_ELIF", 263,
114: "_ELSE", 264,
115: "_ESAC", 265,
116: "_FI", 266,
117: "_FOR", 267,
118: "_IF", 268,
119: "_IN", 269,
120: "_IORS", 270,
121: "_NAME", 271,
122: "_NULL", 272,
123: "_OBRAC", 273,
124: "_ORF", 274,
125: "_PARENS", 275,
126: "_RET", 276,
127: "_THEN", 277,
128: "_UNTIL", 278,
129: "_WHILE", 279,
130: "'\\n'", 10,
131: "';'", 59,
132: "'|'", 124,
133: "'('", 40,
134: "')'", 41,
135: "'&'", 38,
136: NULL
137: } ;
138: #endif
139: #define YYACTSH 13
140: #define YYAMASK 017777
141: #define YYSHIFTACT 0
142: #define YYREDACT 1
143: #define YYACCEPTACT 2
144: #define YYERRACT 3
145: #define YYGOTO 4
146: #define YYPACTION 5
147: #define YYEOFVAL (-1)
148: #define YYERRVAL (-2)
149: #define YYOTHERS (-1000)
150:
151: unsigned char yypdnt[117] = {
152: 0, 1, 1, 1, 1, 3, 5, 6,
153: 7, 8, 8, 9, 9, 10, 10, 12,
154: 13, 14, 15, 16, 17, 18, 2, 2,
155: 2, 2, 2, 19, 19, 19, 20, 20,
156: 21, 22, 23, 23, 23, 23, 23, 23,
157: 25, 27, 26, 26, 24, 24, 24, 24,
158: 24, 32, 32, 32, 32, 35, 33, 34,
159: 34, 34, 34, 34, 34, 38, 39, 39,
160: 39, 39, 39, 39, 39, 39, 39, 39,
161: 39, 39, 39, 39, 39, 31, 40, 37,
162: 28, 36, 41, 29, 29, 29, 29, 29,
163: 29, 29, 29, 42, 42, 47, 47, 44,
164: 44, 44, 48, 49, 49, 43, 43, 46,
165: 46, 46, 45, 45, 30, 30, 11, 11,
166: 11, 4, 4, 50, 50
167: };
168: unsigned char yypn[117] = {
169: 2, 1, 1, 2, 0, 2, 2, 2,
170: 2, 2, 2, 2, 3, 1, 2, 2,
171: 2, 2, 2, 2, 2, 2, 1, 2,
172: 2, 3, 3, 1, 3, 3, 3, 1,
173: 2, 0, 1, 1, 2, 1, 2, 1,
174: 1, 6, 1, 2, 3, 2, 1, 2,
175: 1, 1, 2, 1, 2, 1, 1, 1,
176: 2, 1, 2, 1, 2, 1, 1, 1,
177: 1, 1, 1, 1, 1, 1, 1, 1,
178: 1, 1, 1, 1, 1, 1, 1, 1,
179: 1, 1, 1, 6, 5, 6, 5, 4,
180: 6, 3, 3, 2, 0, 2, 0, 3,
181: 1, 0, 3, 3, 1, 2, 0, 5,
182: 2, 0, 1, 0, 3, 2, 1, 1,
183: 2, 1, 0, 1, 2
184: };
185: unsigned char yypgo[51] = {
186: 0, 0, 2, 10, 12, 46, 50, 52,
187: 54, 56, 58, 62, 68, 70, 72, 74,
188: 76, 80, 82, 84, 90, 94, 96, 98,
189: 100, 102, 104, 106, 108, 124, 126, 138,
190: 150, 156, 158, 168, 170, 178, 182, 184,
191: 186, 188, 190, 192, 198, 204, 218, 222,
192: 226, 228, 232
193: };
194: unsigned int yygo[244] = {
195: YYOTHERS, 0x3, 0x0, 0x4, 0xb, 0x2f, 0xc, 0x30,
196: YYOTHERS, 0x41, YYOTHERS, 0x1e, 0xe, 0x34, 0x11, 0x37,
197: 0x16, 0x3b, 0x19, 0x3c, 0x1b, 0x3e, 0x1c, 0x3f,
198: 0x1d, 0x40, 0x41, 0x6b, 0x49, 0x75, 0x6d, 0x86,
199: 0x6f, 0x89, 0x88, 0x9c, 0x8f, 0x9f, 0x91, 0xa1,
200: 0x97, 0xa5, 0x98, 0xa6, YYOTHERS, 0x32, 0xa7, 0xab,
201: YYOTHERS, 0x6e, YYOTHERS, 0x99, YYOTHERS, 0x9a, YYOTHERS, 0x1f,
202: YYOTHERS, 0x70, 0x67, 0x80, YYOTHERS, 0x66, 0x64, 0x7a,
203: 0x6a, 0x83, YYOTHERS, 0x67, YYOTHERS, 0xf, YYOTHERS, 0x10,
204: YYOTHERS, 0x12, YYOTHERS, 0x20, 0x75, 0x8c, YYOTHERS, 0x21,
205: YYOTHERS, 0x92, YYOTHERS, 0x90, 0xf, 0x35, 0x10, 0x36,
206: YYOTHERS, 0x5, 0x12, 0x38, YYOTHERS, 0x6, YYOTHERS, 0x7,
207: YYOTHERS, 0x8, YYOTHERS, 0x22, YYOTHERS, 0x23, YYOTHERS, 0x24,
208: YYOTHERS, 0x47, YYOTHERS, 0x25, 0x8, 0x26, 0x14, 0x39,
209: 0x15, 0x3a, 0x1a, 0x3d, 0x29, 0x4b, 0x69, 0x81,
210: 0x81, 0x81, YYOTHERS, 0x7c, YYOTHERS, 0x27, 0x1e, 0x42,
211: 0x1f, 0x43, 0x6c, 0x85, 0x8c, 0x9d, 0x99, 0xa7,
212: YYOTHERS, 0x44, 0x8, 0x28, 0x24, 0x48, 0x28, 0x28,
213: 0x2b, 0x28, 0x47, 0x74, YYOTHERS, 0x5d, 0x28, 0x4a,
214: 0x2b, 0x62, YYOTHERS, 0x29, YYOTHERS, 0x4c, 0x4c, 0x76,
215: 0x5d, 0x77, 0x5f, 0x78, 0x60, 0x79, YYOTHERS, 0x5e,
216: YYOTHERS, 0x2a, 0x8, 0x2b, 0x28, 0x2b, 0x2b, 0x2b,
217: YYOTHERS, 0x5f, 0x29, 0x4d, YYOTHERS, 0x2c, YYOTHERS, 0x60,
218: YYOTHERS, 0x61, YYOTHERS, 0x2d, YYOTHERS, 0x2e, YYOTHERS, 0x6a,
219: 0x6a, 0x84, 0x83, 0x95, YYOTHERS, 0x71, 0x80, 0x93,
220: 0x90, 0xa0, YYOTHERS, 0x7d, 0x21, 0x46, 0x6e, 0x87,
221: 0x70, 0x8a, 0x92, 0xa2, 0x9a, 0xa8, 0xab, 0xac,
222: YYOTHERS, 0x45, 0xac, 0xad, YYOTHERS, 0x9b, 0x81, 0x94,
223: YYOTHERS, 0x82, YYOTHERS, 0x7e, 0x8d, 0x9e, YYOTHERS, 0x7f,
224: 0x39, 0x68, 0x41, 0x6c, 0x64, 0x68, 0x65, 0x7b,
225: 0x6a, 0x68, YYOTHERS, 0x33
226: };
227: unsigned short yypa[174] = {
228: 0, 28, 32, 34, 38, 40, 46, 52,
229: 56, 80, 82, 86, 110, 134, 134, 138,
230: 138, 134, 140, 142, 144, 144, 134, 148,
231: 150, 134, 152, 134, 134, 134, 140, 140,
232: 156, 160, 164, 166, 168, 172, 174, 178,
233: 180, 186, 190, 226, 232, 234, 236, 238,
234: 240, 242, 244, 246, 250, 252, 254, 256,
235: 258, 260, 268, 272, 274, 276, 278, 280,
236: 282, 134, 284, 288, 292, 294, 298, 302,
237: 306, 134, 308, 310, 312, 348, 350, 352,
238: 354, 356, 358, 360, 362, 364, 366, 368,
239: 370, 372, 374, 376, 378, 380, 416, 418,
240: 454, 490, 492, 494, 496, 502, 506, 510,
241: 514, 518, 522, 530, 532, 134, 556, 564,
242: 570, 574, 578, 580, 582, 584, 588, 590,
243: 592, 594, 596, 598, 602, 606, 610, 614,
244: 506, 518, 618, 288, 620, 624, 626, 628,
245: 134, 634, 636, 638, 140, 640, 644, 134,
246: 506, 134, 646, 652, 656, 658, 662, 134,
247: 134, 140, 664, 668, 672, 674, 678, 680,
248: 682, 684, 686, 688, 690, 692, 694, 284,
249: 696, 698, 700, 556, 702, 708
250: };
251: unsigned int yyact[710] = {
252: 0x2, 0xa, 0x2004, YYEOFVAL, 0x2021, 0x101, 0x2021, 0x102,
253: 0x2021, 0x10b, 0x2021, 0x10c, 0x2021, 0x10e, 0x2021, 0x10f,
254: 0x2021, 0x111, 0x2021, 0x114, 0x2021, 0x116, 0x2021, 0x117,
255: 0x2021, 0x28, 0x1, YYOTHERS, 0x9, 0xa, 0x6000, YYOTHERS,
256: 0x2001, YYOTHERS, 0xa, YYEOFVAL, 0x6000, YYOTHERS, 0x2002, YYOTHERS,
257: 0xb, 0x3b, 0xc, 0x26, 0x2016, YYOTHERS, 0xd, 0x100,
258: 0xe, 0x112, 0x201b, YYOTHERS, 0x11, 0x7c, 0x201f, YYOTHERS,
259: 0x13, 0x101, 0x14, 0x102, 0x15, 0x10b, 0x16, 0x10c,
260: 0x17, 0x10e, 0x18, 0x10f, 0x19, 0x111, 0x1a, 0x114,
261: 0x1b, 0x116, 0x1c, 0x117, 0x1d, 0x28, 0x6000, YYOTHERS,
262: 0x2003, YYOTHERS, 0x4000, YYEOFVAL, 0x6000, YYOTHERS, 0x2021, 0x101,
263: 0x2021, 0x102, 0x2021, 0x10b, 0x2021, 0x10c, 0x2021, 0x10e,
264: 0x2021, 0x10f, 0x2021, 0x111, 0x2021, 0x114, 0x2021, 0x116,
265: 0x2021, 0x117, 0x2021, 0x28, 0x2018, YYOTHERS, 0x2021, 0x101,
266: 0x2021, 0x102, 0x2021, 0x10b, 0x2021, 0x10c, 0x2021, 0x10e,
267: 0x2021, 0x10f, 0x2021, 0x111, 0x2021, 0x114, 0x2021, 0x116,
268: 0x2021, 0x117, 0x2021, 0x28, 0x2017, YYOTHERS, 0x31, 0xa,
269: 0x2072, YYOTHERS, 0x2021, YYOTHERS, 0x2021, YYOTHERS, 0x2052, YYOTHERS,
270: 0x18, 0x10f, 0x6000, YYOTHERS, 0x204e, YYOTHERS, 0x2050, YYOTHERS,
271: 0x18, 0x10f, 0x2027, YYOTHERS, 0x206b, 0x29, 0x2021, YYOTHERS,
272: 0x206b, 0x103, 0x2021, YYOTHERS, 0x2020, YYOTHERS, 0x2022, YYOTHERS,
273: 0x17, 0x10e, 0x2023, YYOTHERS, 0x2025, YYOTHERS, 0x49, 0x113,
274: 0x204f, YYOTHERS, 0x2028, YYOTHERS, 0x13, 0x101, 0x17, 0x10e,
275: 0x2031, YYOTHERS, 0x18, 0x10f, 0x202e, YYOTHERS, 0x13, 0x101,
276: 0x4e, 0x102, 0x4f, 0x104, 0x50, 0x105, 0x51, 0x107,
277: 0x52, 0x108, 0x53, 0x109, 0x54, 0x10a, 0x55, 0x10b,
278: 0x56, 0x10c, 0x57, 0x10d, 0x17, 0x10e, 0x58, 0x10f,
279: 0x59, 0x114, 0x5a, 0x115, 0x5b, 0x116, 0x5c, 0x117,
280: 0x2030, YYOTHERS, 0x13, 0x101, 0x17, 0x10e, 0x2033, YYOTHERS,
281: 0x2035, YYOTHERS, 0x204d, YYOTHERS, 0x2051, YYOTHERS, 0x201a, YYOTHERS,
282: 0x2019, YYOTHERS, 0x2073, YYOTHERS, 0x2010, YYOTHERS, 0x63, 0xa,
283: 0x2071, YYOTHERS, 0x200f, YYOTHERS, 0x201c, YYOTHERS, 0x201d, YYOTHERS,
284: 0x2011, YYOTHERS, 0x201e, YYOTHERS, 0x64, 0x10d, 0x31, 0xa,
285: 0x65, 0x3b, 0x6000, YYOTHERS, 0x69, 0x10d, 0x205c, YYOTHERS,
286: 0x2005, YYOTHERS, 0x2013, YYOTHERS, 0x2026, YYOTHERS, 0x200a, YYOTHERS,
287: 0x2009, YYOTHERS, 0x2012, YYOTHERS, 0x6d, 0x115, 0x6000, YYOTHERS,
288: 0x6f, 0x104, 0x2066, YYOTHERS, 0x206a, YYOTHERS, 0x72, 0x29,
289: 0x6000, YYOTHERS, 0x73, 0x103, 0x6000, YYOTHERS, 0x17, 0x10e,
290: 0x2024, YYOTHERS, 0x202a, YYOTHERS, 0x2032, YYOTHERS, 0x204f, YYOTHERS,
291: 0x13, 0x101, 0x4e, 0x102, 0x4f, 0x104, 0x50, 0x105,
292: 0x51, 0x107, 0x52, 0x108, 0x53, 0x109, 0x54, 0x10a,
293: 0x55, 0x10b, 0x56, 0x10c, 0x57, 0x10d, 0x17, 0x10e,
294: 0x58, 0x10f, 0x59, 0x114, 0x5a, 0x115, 0x5b, 0x116,
295: 0x5c, 0x117, 0x202d, YYOTHERS, 0x2036, YYOTHERS, 0x203f, YYOTHERS,
296: 0x2040, YYOTHERS, 0x2041, YYOTHERS, 0x2042, YYOTHERS, 0x2043, YYOTHERS,
297: 0x2044, YYOTHERS, 0x2045, YYOTHERS, 0x2046, YYOTHERS, 0x2047, YYOTHERS,
298: 0x2048, YYOTHERS, 0x203e, YYOTHERS, 0x2049, YYOTHERS, 0x204a, YYOTHERS,
299: 0x204b, YYOTHERS, 0x204c, YYOTHERS, 0x13, 0x101, 0x4e, 0x102,
300: 0x4f, 0x104, 0x50, 0x105, 0x51, 0x107, 0x52, 0x108,
301: 0x53, 0x109, 0x54, 0x10a, 0x55, 0x10b, 0x56, 0x10c,
302: 0x57, 0x10d, 0x17, 0x10e, 0x58, 0x10f, 0x59, 0x114,
303: 0x5a, 0x115, 0x5b, 0x116, 0x5c, 0x117, 0x2037, YYOTHERS,
304: 0x202f, YYOTHERS, 0x13, 0x101, 0x4e, 0x102, 0x4f, 0x104,
305: 0x50, 0x105, 0x51, 0x107, 0x52, 0x108, 0x53, 0x109,
306: 0x54, 0x10a, 0x55, 0x10b, 0x56, 0x10c, 0x57, 0x10d,
307: 0x17, 0x10e, 0x58, 0x10f, 0x59, 0x114, 0x5a, 0x115,
308: 0x5b, 0x116, 0x5c, 0x117, 0x203b, YYOTHERS, 0x13, 0x101,
309: 0x4e, 0x102, 0x4f, 0x104, 0x50, 0x105, 0x51, 0x107,
310: 0x52, 0x108, 0x53, 0x109, 0x54, 0x10a, 0x55, 0x10b,
311: 0x56, 0x10c, 0x57, 0x10d, 0x17, 0x10e, 0x58, 0x10f,
312: 0x59, 0x114, 0x5a, 0x115, 0x5b, 0x116, 0x5c, 0x117,
313: 0x2039, YYOTHERS, 0x203d, YYOTHERS, 0x2034, YYOTHERS, 0x2074, YYOTHERS,
314: 0x31, 0xa, 0x65, 0x3b, 0x200d, YYOTHERS, 0x31, 0xa,
315: 0x206f, YYOTHERS, 0x18, 0x10f, 0x2061, YYOTHERS, 0x64, 0x10d,
316: 0x6000, YYOTHERS, 0x63, 0xa, 0x206e, YYOTHERS, 0x18, 0x10f,
317: 0x205e, YYOTHERS, 0x6f, 0x104, 0x31, 0xa, 0x65, 0x3b,
318: 0x2066, YYOTHERS, 0x206d, YYOTHERS, 0x63, 0xa, 0x2071, 0x103,
319: 0x2071, 0x104, 0x2071, 0x105, 0x2071, 0x106, 0x2071, 0x107,
320: 0x2071, 0x108, 0x2071, 0x109, 0x2071, 0x10a, 0x2071, 0x115,
321: 0x2071, 0x29, 0x2021, YYOTHERS, 0x206b, 0x107, 0x206b, 0x108,
322: 0x206b, 0x10a, 0x2021, YYOTHERS, 0x31, 0xa, 0x88, 0x3b,
323: 0x2072, YYOTHERS, 0x206b, 0x105, 0x2021, YYOTHERS, 0x8b, 0x105,
324: 0x6000, YYOTHERS, 0x2059, YYOTHERS, 0x205a, YYOTHERS, 0x202b, YYOTHERS,
325: 0x19, 0x111, 0x6000, YYOTHERS, 0x202c, YYOTHERS, 0x2038, YYOTHERS,
326: 0x203c, YYOTHERS, 0x203a, YYOTHERS, 0x200e, YYOTHERS, 0x63, 0xa,
327: 0x2070, YYOTHERS, 0x8d, 0x7c, 0x2064, YYOTHERS, 0x8e, 0x109,
328: 0x6000, YYOTHERS, 0x8f, 0x106, 0x2060, YYOTHERS, 0x91, 0x29,
329: 0x6000, YYOTHERS, 0x205b, YYOTHERS, 0x96, 0x105, 0x6000, YYOTHERS,
330: 0x206c, YYOTHERS, 0x2006, YYOTHERS, 0x97, 0x107, 0x98, 0x108,
331: 0x2069, YYOTHERS, 0x200b, YYOTHERS, 0x2065, YYOTHERS, 0x2057, YYOTHERS,
332: 0x18, 0x10f, 0x6000, YYOTHERS, 0x2056, YYOTHERS, 0x206b, 0x106,
333: 0x206b, 0x109, 0x2021, YYOTHERS, 0xa3, 0x109, 0x6000, YYOTHERS,
334: 0x205d, YYOTHERS, 0xa4, 0x105, 0x6000, YYOTHERS, 0x2054, YYOTHERS,
335: 0x206b, 0x10a, 0x2021, YYOTHERS, 0xa9, 0x10a, 0x6000, YYOTHERS,
336: 0x200c, YYOTHERS, 0xaa, 0x103, 0x6000, YYOTHERS, 0x2063, YYOTHERS,
337: 0x2015, YYOTHERS, 0x205f, YYOTHERS, 0x2014, YYOTHERS, 0x2062, YYOTHERS,
338: 0x2055, YYOTHERS, 0x2053, YYOTHERS, 0x2007, YYOTHERS, 0x2008, YYOTHERS,
339: 0x2068, YYOTHERS, 0x2058, YYOTHERS, 0x2029, YYOTHERS, 0x97, 0x107,
340: 0x98, 0x108, 0x2069, YYOTHERS, 0x2067, YYOTHERS
341: };
342:
343:
344: #define YYNOCHAR (-1000)
345: #define yyerrok yyerrflag=0
346: #define yyclearin yylval=YYNOCHAR
347: int yystack[YYMAXDEPTH];
348: YYSTYPE yyvstack[YYMAXDEPTH], *yyv;
349: int yychar;
350:
351: #ifdef YYDEBUG
352: int yydebug = 1; /* No sir, not in the BSS */
353: #include <stdio.h>
354: #endif
355:
356: short yyerrflag;
357: int *yys;
358:
359: yyparse()
360: {
361: register YYSTYPE *yypvt;
362: int act;
363: register unsigned *ip, yystate;
364: int pno;
365: yystate = 0;
366: yychar = YYNOCHAR;
367: yyv = &yyvstack[-1];
368: yys = &yystack[-1];
369:
370: stack:
371: if( ++yys >= &yystack[YYMAXDEPTH] ) {
372: write(2, "Stack overflow\n", 15);
373: exit(1);
374: }
375: *yys = yystate;
376: *++yyv = yyval;
377: #ifdef YYDEBUG
378: if( yydebug )
379: fprintf(stdout, "Stack state %d, char %d\n", yystate, yychar);
380: #endif
381:
382: read:
383: ip = &yyact[yypa[yystate]];
384: if( ip[1] != YYNOCHAR ) {
385: if( yychar == YYNOCHAR ) {
386: yychar = yylex();
387: #ifdef YYDEBUG
388: if( yydebug )
389: fprintf(stdout, "lex read char %d, val %d\n", yychar, yylval);
390: #endif
391: }
392: while (ip[1]!=YYNOCHAR) {
393: if (ip[1]==yychar)
394: break;
395: ip += 2;
396: }
397: }
398: act = ip[0];
399: switch( act>>YYACTSH ) {
400: case YYSHIFTACT:
401: if( ip[1]==YYNOCHAR )
402: goto YYerract;
403: if( yychar != -1 )
404: yychar = YYNOCHAR; /* dont throw away EOF */
405: yystate = act&YYAMASK;
406: yyval = yylval;
407: #ifdef YYDEBUG
408: if( yydebug )
409: fprintf(stdout, "shift %d\n", yystate);
410: #endif
411: if( yyerrflag )
412: --yyerrflag;
413: goto stack;
414:
415: case YYACCEPTACT:
416: #ifdef YYDEBUG
417: if( yydebug )
418: fprintf(stdout, "accept\n");
419: #endif
420: return(0);
421:
422: case YYERRACT:
423: YYerract:
424: switch (yyerrflag) {
425: case 0:
426: yyerror("Syntax error");
427:
428: case 1:
429: case 2:
430:
431: yyerrflag = 3;
432: while( yys >= & yystack[0] ) {
433: ip = &yyact[yypa[*yys]];
434: while( ip[1]!=YYNOCHAR )
435: ip += 2;
436: if( (*ip&~YYAMASK) == (YYSHIFTACT<<YYACTSH) ) {
437: yystate = *ip&YYAMASK;
438: goto stack;
439: }
440: #ifdef YYDEBUG
441: if( yydebug )
442: fprintf(stderr, "error recovery leaves state %d, uncovers %d\n", *yys, yys[-1]);
443: #endif
444: yys--;
445: yyv--;
446: }
447: #ifdef YYDEBUG
448: if( yydebug )
449: fprintf(stderr, "no shift on error; abort\n");
450: #endif
451: return(1);
452:
453: case 3:
454: #ifdef YYDEBUG
455: if( yydebug )
456: fprintf(stderr, "Error recovery clobbers char %o\n", yychar);
457: #endif
458: if( yychar==YYEOFVAL )
459: return(1);
460: yychar = YYNOCHAR;
461: goto read;
462: }
463:
464: case YYREDACT:
465: pno = act&YYAMASK;
466: #ifdef YYDEBUG
467: if( yydebug )
468: fprintf(stdout, "reduce %d\n", pno);
469: #endif
470: yypvt = yyv;
471: yyv -= yypn[pno];
472: yys -= yypn[pno];
473: yyval = yyv[1];
474: switch(pno) {
475:
476: case 1: {
477:
478: #line 66 "sh.y"
479:
480: sesp->s_node = NULL;
481: reset (RCMD);
482: NOTREACHED;
483: }break;
484:
485: case 2: {
486:
487: #line 72 "sh.y"
488:
489: sesp->s_node = yypvt[0].yu_node;
490: reset (errflag ? RERR : RCMD);
491: NOTREACHED;
492: }break;
493:
494: case 3: {
495:
496: #line 77 "sh.y"
497:
498: keyflush ();
499: keyflag = 1;
500: reset (RERR);
501: NOTREACHED;
502: }break;
503:
504: case 9: {
505:
506: #line 95 "sh.y"
507: yyval.yu_nval = NWHILE; }break;
508:
509: case 10: {
510:
511: #line 96 "sh.y"
512: yyval.yu_nval = NUNTIL; }break;
513:
514: case 22: {
515:
516: #line 118 "sh.y"
517:
518: yyval.yu_node = yypvt[0].yu_node;
519: }break;
520:
521: case 23: {
522:
523: #line 121 "sh.y"
524:
525: yyval.yu_node = node(NBACK, yypvt[-1].yu_node, NULL);
526: }break;
527:
528: case 24: {
529:
530: #line 124 "sh.y"
531:
532: yyval.yu_node = yypvt[-1].yu_node;
533: }break;
534:
535: case 25: {
536:
537: #line 127 "sh.y"
538:
539: yyval.yu_node = node(NBACK, yypvt[-2].yu_node, yypvt[0].yu_node);
540: }break;
541:
542: case 26: {
543:
544: #line 130 "sh.y"
545:
546: yyval.yu_node = node(NLIST, yypvt[-2].yu_node, yypvt[0].yu_node);
547: }break;
548:
549: case 27: {
550:
551: #line 136 "sh.y"
552:
553: yyval.yu_node = yypvt[0].yu_node;
554: }break;
555:
556: case 28: {
557:
558: #line 139 "sh.y"
559:
560: yyval.yu_node = node(NORF, yypvt[-2].yu_node, yypvt[0].yu_node);
561: }break;
562:
563: case 29: {
564:
565: #line 142 "sh.y"
566:
567: yyval.yu_node = node(NANDF, yypvt[-2].yu_node, yypvt[0].yu_node);
568: }break;
569:
570: case 30: {
571:
572: #line 148 "sh.y"
573:
574: yyval.yu_node = node(NPIPE, yypvt[-2].yu_node, yypvt[0].yu_node);
575: }break;
576:
577: case 31: {
578:
579: #line 151 "sh.y"
580:
581: yyval.yu_node = yypvt[0].yu_node;
582: }break;
583:
584: case 32: {
585:
586: #line 163 "sh.y"
587:
588: yyval.yu_node = yypvt[0].yu_node;
589: keypop ();
590: }break;
591:
592: case 33: {
593:
594: #line 169 "sh.y"
595:
596: keypush ();
597: keyflag = 1;
598: }break;
599:
600: case 34: {
601:
602: #line 176 "sh.y"
603:
604: yyval.yu_node = node (NCOMS, yypvt[0].yu_node, NULL);
605: }break;
606:
607: case 35: {
608:
609: #line 179 "sh.y"
610:
611: yyval.yu_node = node (NCOMS, yypvt[0].yu_node, NULL);
612: }break;
613:
614: case 36: {
615:
616: #line 182 "sh.y"
617:
618: yypvt[-1].yu_node->n_next = yypvt[0].yu_node;
619: yyval.yu_node = node (NCOMS, yypvt[-1].yu_node, NULL);
620: }break;
621:
622: case 37: {
623:
624: #line 186 "sh.y"
625:
626: yyval.yu_node = node (NCOMS, yypvt[0].yu_node, NULL);
627: }break;
628:
629: case 38: {
630:
631: #line 189 "sh.y"
632:
633: yyval.yu_node = node (NRET, yypvt[0].yu_strp, NULL);
634: }break;
635:
636: case 39: {
637:
638: #line 192 "sh.y"
639:
640: yyval.yu_node = node (NRET, "", NULL);
641: }break;
642:
643: case 40: {
644:
645: #line 198 "sh.y"
646:
647: yyval.yu_node = node (NCTRL, yypvt[0].yu_node, NULL);
648: }break;
649:
650: case 41: {
651:
652: #line 204 "sh.y"
653:
654: yyval.yu_node = node (NCTRL, node (NFUNC, yypvt[-5].yu_strp, yypvt[-1].yu_node), NULL);
655: }break;
656:
657: case 42: {
658:
659: #line 210 "sh.y"
660:
661: yyval.yu_node = yypvt[0].yu_node;
662: }break;
663:
664: case 43: {
665:
666: #line 213 "sh.y"
667:
668: (yyval.yu_node = yypvt[-1].yu_node)->n_next = yypvt[0].yu_node;
669: }break;
670:
671: case 44: {
672:
673: #line 219 "sh.y"
674:
675: NODE * tmp = yypvt[-2].yu_node;
676: /*
677: * NIGEL: The structure of the nodes that have to be generated
678: * is flat, but now the grammar is structured; deal with this.
679: */
680:
681: while (tmp->n_next)
682: tmp = tmp->n_next;
683:
684: (tmp->n_next = yypvt[-1].yu_node)->n_next = yypvt[0].yu_node;
685: yyval.yu_node = yypvt[-2].yu_node;
686: }break;
687:
688: case 45: {
689:
690: #line 232 "sh.y"
691:
692: NODE * tmp = yypvt[-1].yu_node;
693: /*
694: * NIGEL: The structure of the nodes that have to be generated
695: * is flat, but now the grammar is structured; deal with this.
696: */
697:
698: while (tmp->n_next)
699: tmp = tmp->n_next;
700:
701: tmp->n_next = yypvt[0].yu_node;
702: yyval.yu_node = yypvt[-1].yu_node;
703: }break;
704:
705: case 46: {
706:
707: #line 245 "sh.y"
708:
709: yyval.yu_node = yypvt[0].yu_node;
710: }break;
711:
712: case 47: {
713:
714: #line 248 "sh.y"
715:
716: (yyval.yu_node = yypvt[-1].yu_node)->n_next = yypvt[0].yu_node;
717: }break;
718:
719: case 48: {
720:
721: #line 251 "sh.y"
722:
723: yyval.yu_node = yypvt[0].yu_node;
724: }break;
725:
726: case 49: {
727:
728: #line 257 "sh.y"
729:
730: yyval.yu_node = yypvt[0].yu_node;
731: }break;
732:
733: case 50: {
734:
735: #line 260 "sh.y"
736:
737: (yyval.yu_node = yypvt[-1].yu_node)->n_next = yypvt[0].yu_node;
738: }break;
739:
740: case 51: {
741:
742: #line 263 "sh.y"
743:
744: yyval.yu_node = yypvt[0].yu_node;
745: }break;
746:
747: case 52: {
748:
749: #line 266 "sh.y"
750:
751: (yyval.yu_node = yypvt[-1].yu_node)->n_next = yypvt[0].yu_node;
752: }break;
753:
754: case 53: {
755:
756: #line 272 "sh.y"
757:
758: yyval.yu_node = yypvt[0].yu_node;
759: keyflag = 0;
760: }break;
761:
762: case 54: {
763:
764: #line 279 "sh.y"
765:
766: yyval.yu_node = yypvt[0].yu_node;
767: keyflag = 0;
768: }break;
769:
770: case 55: {
771:
772: #line 294 "sh.y"
773:
774: yyval.yu_node = yypvt[0].yu_node;
775: }break;
776:
777: case 56: {
778:
779: #line 297 "sh.y"
780:
781: (yyval.yu_node = yypvt[-1].yu_node)->n_next = yypvt[0].yu_node;
782: }break;
783:
784: case 57: {
785:
786: #line 300 "sh.y"
787:
788: yyval.yu_node = yypvt[0].yu_node;
789: }break;
790:
791: case 58: {
792:
793: #line 303 "sh.y"
794:
795: (yyval.yu_node = yypvt[-1].yu_node)->n_next = yypvt[0].yu_node;
796: }break;
797:
798: case 59: {
799:
800: #line 306 "sh.y"
801:
802: yyval.yu_node = yypvt[0].yu_node;
803: }break;
804:
805: case 60: {
806:
807: #line 309 "sh.y"
808:
809: (yyval.yu_node = yypvt[-1].yu_node)->n_next = yypvt[0].yu_node;
810: }break;
811:
812: case 61: {
813:
814: #line 315 "sh.y"
815:
816: yyval.yu_node = node (NARGS, duplstr (strt, 0), NULL);
817: }break;
818:
819: case 77: {
820:
821: #line 406 "sh.y"
822:
823: yyval.yu_node = node (NIORS, yypvt[0].yu_strp, NULL);
824: }break;
825:
826: case 78: {
827:
828: #line 411 "sh.y"
829:
830: yyval.yu_strp = duplstr (strt, 0);
831: }break;
832:
833: case 79: {
834:
835: #line 416 "sh.y"
836:
837: yyval.yu_node = node (NARGS, yypvt[0].yu_strp, NULL);
838: }break;
839:
840: case 80: {
841:
842: #line 421 "sh.y"
843:
844: yyval.yu_strp = duplstr (strt, 0);
845: }break;
846:
847: case 81: {
848:
849: #line 427 "sh.y"
850:
851: yyval.yu_node = node (NASSG, yypvt[0].yu_strp, NULL);
852: }break;
853:
854: case 82: {
855:
856: #line 432 "sh.y"
857:
858: yyval.yu_strp = duplstr (strt, 0);
859: }break;
860:
861: case 83: {
862:
863: #line 438 "sh.y"
864:
865: yyval.yu_node = node(NFOR, yypvt[-4].yu_strp, node(NFOR2, yypvt[-3].yu_node, node(NLIST, yypvt[-1].yu_node, NULL)));
866: yyval.yu_node->n_next->n_next->n_next = yyval.yu_node->n_next;
867: }break;
868:
869: case 84: {
870:
871: #line 442 "sh.y"
872:
873: yyval.yu_node = node(NFOR, yypvt[-3].yu_strp, node(NFOR2, yypvt[-2].yu_node, node(NLIST, yypvt[-1].yu_node, NULL)));
874: yyval.yu_node->n_next->n_next->n_next = yyval.yu_node->n_next;
875: }break;
876:
877: case 85: {
878:
879: #line 446 "sh.y"
880:
881: yyval.yu_node = node(NCASE, yypvt[-4].yu_strp, yypvt[-1].yu_node);
882: }break;
883:
884: case 86: {
885:
886: #line 449 "sh.y"
887:
888: yyval.yu_node = node(NCASE, yypvt[-3].yu_strp, yypvt[-1].yu_node);
889: }break;
890:
891: case 87: {
892:
893: #line 452 "sh.y"
894:
895: yyval.yu_node = node(yypvt[-3].yu_nval, yypvt[-2].yu_node, node(NLIST, yypvt[-1].yu_node, NULL));
896: yyval.yu_node->n_next->n_next = yyval.yu_node;
897: }break;
898:
899: case 88: {
900:
901: #line 456 "sh.y"
902:
903: yyval.yu_node = node(NIF, node(NNULL, yypvt[-4].yu_node, yypvt[-2].yu_node), yypvt[-1].yu_node);
904: }break;
905:
906: case 89: {
907:
908: #line 459 "sh.y"
909:
910: yyval.yu_node = node(NPARN, yypvt[-1].yu_node, NULL);
911: }break;
912:
913: case 90: {
914:
915: #line 462 "sh.y"
916:
917: yyval.yu_node = node(NBRAC, yypvt[-1].yu_node, NULL);
918: }break;
919:
920: case 91: {
921:
922: #line 468 "sh.y"
923:
924: yyval.yu_node = yypvt[0].yu_node;
925: }break;
926:
927: case 92: {
928:
929: #line 471 "sh.y"
930:
931: yyval.yu_node = node(NARGS, "\"$@\"", NULL);
932: }break;
933:
934: case 93: {
935:
936: #line 477 "sh.y"
937:
938: yyval.yu_node = node(NARGS, yypvt[-1].yu_strp, yypvt[0].yu_node);
939: }break;
940:
941: case 94: {
942:
943: #line 480 "sh.y"
944:
945: yyval.yu_node = NULL;
946: }break;
947:
948: case 95: {
949:
950: #line 486 "sh.y"
951:
952: register NODE *np;
953:
954: for (np=yypvt[-2].yu_node; np->n_next; np=np->n_next)
955: ;
956: np->n_next = yypvt[0].yu_node;
957: yyval.yu_node = yypvt[-2].yu_node;
958: }break;
959:
960: case 96: {
961:
962: #line 494 "sh.y"
963:
964: yyval.yu_node = yypvt[0].yu_node;
965: }break;
966:
967: case 97: {
968:
969: #line 497 "sh.y"
970:
971: yyval.yu_node = NULL;
972: }break;
973:
974: case 98: {
975:
976: #line 503 "sh.y"
977:
978: yyval.yu_node = node(NCASE2, yypvt[0].yu_node, yypvt[-2].yu_node);
979: }break;
980:
981: case 99: {
982:
983: #line 509 "sh.y"
984:
985: yyval.yu_node = node(NCASE3, yypvt[-2].yu_strp, yypvt[0].yu_node);
986: }break;
987:
988: case 100: {
989:
990: #line 512 "sh.y"
991:
992: yyval.yu_node = node(NCASE3, yypvt[0].yu_strp, NULL);
993: }break;
994:
995: case 101: {
996:
997: #line 518 "sh.y"
998:
999: yyval.yu_node = yypvt[0].yu_node;
1000: }break;
1001:
1002: case 102: {
1003:
1004: #line 521 "sh.y"
1005:
1006: yyval.yu_node = NULL;
1007: }break;
1008:
1009: case 103: {
1010:
1011: #line 527 "sh.y"
1012:
1013: yyval.yu_node = node(NIF, node(NNULL, yypvt[-3].yu_node, yypvt[-1].yu_node), yypvt[0].yu_node);
1014: }break;
1015:
1016: case 104: {
1017:
1018: #line 530 "sh.y"
1019:
1020: yyval.yu_node = node(NELSE, yypvt[0].yu_node, NULL);
1021: }break;
1022:
1023: case 105: {
1024:
1025: #line 533 "sh.y"
1026:
1027: yyval.yu_node = NULL;
1028: }break;
1029:
1030: case 106: {
1031:
1032: #line 539 "sh.y"
1033:
1034: yyval.yu_node = yypvt[0].yu_node;
1035: }break;
1036:
1037: case 107: {
1038:
1039: #line 543 "sh.y"
1040:
1041: yyval.yu_node = NULL;
1042: }break;
1043:
1044: case 108: {
1045:
1046: #line 549 "sh.y"
1047:
1048: yyval.yu_node = node(NLIST, yypvt[-2].yu_node, yypvt[0].yu_node);
1049: }break;
1050:
1051: case 109: {
1052:
1053: #line 552 "sh.y"
1054:
1055: yyval.yu_node = yypvt[-1].yu_node;
1056: }break;
1057:
1058: }
1059: ip = &yygo[ yypgo[yypdnt[pno]] ];
1060: while( *ip!=*yys && *ip!=YYNOCHAR )
1061: ip += 2;
1062: yystate = ip[1];
1063: goto stack;
1064: }
1065: }
1066:
1067:
1068:
1069:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.