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