|
|
1.1 root 1:
2: #line 9 "/usr/src/cmd0/sh/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 347 "/usr/src/cmd0/sh/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:
99: /* end of sh/sh.y */
100: #ifdef YYTNAMES
101: readonly struct yytname yytnames[31] =
102: {
103: "$end", -1,
104: "error", -2,
105: "_ANDF", 256,
106: "_ASGN", 257,
107: "_CASE", 258,
108: "_CBRAC", 259,
109: "_DO", 260,
110: "_DONE", 261,
111: "_DSEMI", 262,
112: "_ELIF", 263,
113: "_ELSE", 264,
114: "_ESAC", 265,
115: "_FI", 266,
116: "_FOR", 267,
117: "_IF", 268,
118: "_IN", 269,
119: "_IORS", 270,
120: "_NAME", 271,
121: "_NULL", 272,
122: "_OBRAC", 273,
123: "_ORF", 274,
124: "_THEN", 275,
125: "_UNTIL", 276,
126: "_WHILE", 277,
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[78] = {
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, 25, 25, 25,
143: 25, 26, 27, 28, 29, 29, 29, 29,
144: 29, 29, 29, 29, 30, 30, 36, 36,
145: 32, 32, 32, 37, 38, 38, 31, 31,
146: 35, 35, 35, 34, 34, 33, 33, 12,
147: 12, 12, 5, 5, 39, 39
148: };
149: readonly unsigned char yypn[78] = {
150: 2, 2, 0, 1, 2, 2, 2, 2,
151: 2, 2, 2, 2, 2, 3, 1, 2,
152: 2, 2, 2, 2, 2, 2, 2, 1,
153: 2, 2, 3, 3, 1, 3, 3, 3,
154: 1, 2, 0, 2, 1, 1, 1, 1,
155: 1, 1, 1, 1, 6, 5, 6, 5,
156: 4, 6, 3, 3, 2, 0, 2, 0,
157: 3, 1, 0, 3, 3, 1, 2, 0,
158: 5, 2, 0, 1, 0, 3, 2, 1,
159: 1, 2, 1, 0, 1, 2
160: };
161: readonly unsigned char yypgo[40] = {
162: 0, 0, 2, 4, 12, 14, 46, 50,
163: 52, 54, 56, 58, 62, 68, 70, 72,
164: 74, 76, 78, 80, 82, 88, 92, 94,
165: 96, 100, 102, 104, 118, 120, 122, 124,
166: 130, 136, 146, 160, 164, 168, 170, 174
167: };
168: readonly unsigned int yygo[186] = {
169: YYOTHERS, 0x1, YYOTHERS, 0x5, 0x1, 0x6, 0xd, 0x29,
170: 0xe, 0x2a, YYOTHERS, 0x3a, YYOTHERS, 0x1f, 0x10, 0x2e,
171: 0x13, 0x31, 0x18, 0x35, 0x1b, 0x36, 0x1c, 0x37,
172: 0x1d, 0x38, 0x1e, 0x39, 0x3a, 0x49, 0x4b, 0x5e,
173: 0x4d, 0x61, 0x60, 0x73, 0x66, 0x75, 0x68, 0x77,
174: 0x6e, 0x7b, 0x6f, 0x7c, YYOTHERS, 0x2c, 0x7d, 0x80,
175: YYOTHERS, 0x4c, YYOTHERS, 0x70, YYOTHERS, 0x71, YYOTHERS, 0x20,
176: YYOTHERS, 0x4e, 0x45, 0x58, YYOTHERS, 0x44, 0x42, 0x52,
177: 0x48, 0x5b, YYOTHERS, 0x45, YYOTHERS, 0x11, YYOTHERS, 0x12,
178: YYOTHERS, 0x14, YYOTHERS, 0x21, YYOTHERS, 0x22, YYOTHERS, 0x69,
179: YYOTHERS, 0x67, 0x11, 0x2f, 0x12, 0x30, YYOTHERS, 0x7,
180: 0x14, 0x32, YYOTHERS, 0x8, YYOTHERS, 0x9, YYOTHERS, 0xa,
181: 0x24, 0x40, YYOTHERS, 0x23, YYOTHERS, 0x24, YYOTHERS, 0x25,
182: 0xa, 0x26, 0x16, 0x33, 0x17, 0x34, 0x24, 0x26,
183: 0x47, 0x59, 0x59, 0x59, YYOTHERS, 0x54, YYOTHERS, 0x27,
184: YYOTHERS, 0x28, YYOTHERS, 0x48, 0x48, 0x5c, 0x5b, 0x6c,
185: YYOTHERS, 0x4f, 0x58, 0x6a, 0x67, 0x76, YYOTHERS, 0x55,
186: 0x1f, 0x3b, 0x20, 0x3c, 0x4a, 0x5d, 0x70, 0x7d,
187: YYOTHERS, 0x3d, 0x22, 0x3f, 0x4c, 0x5f, 0x4e, 0x62,
188: 0x69, 0x78, 0x71, 0x7e, 0x80, 0x81, YYOTHERS, 0x3e,
189: 0x81, 0x82, YYOTHERS, 0x72, 0x59, 0x6b, YYOTHERS, 0x5a,
190: YYOTHERS, 0x56, 0x64, 0x74, YYOTHERS, 0x57, 0x33, 0x46,
191: 0x3a, 0x4a, 0x42, 0x46, 0x43, 0x53, 0x48, 0x46,
192: YYOTHERS, 0x2d
193: };
194: readonly unsigned short yypa[131] = {
195: 0, 2, 28, 32, 36, 38, 40, 44,
196: 50, 56, 60, 82, 84, 86, 108, 130,
197: 130, 134, 134, 130, 136, 138, 140, 140,
198: 130, 144, 146, 130, 130, 130, 130, 136,
199: 136, 148, 152, 156, 158, 180, 182, 184,
200: 186, 188, 190, 192, 194, 196, 200, 202,
201: 204, 206, 208, 210, 218, 222, 224, 226,
202: 228, 230, 130, 232, 236, 240, 242, 246,
203: 250, 252, 254, 260, 264, 268, 272, 276,
204: 280, 288, 290, 130, 314, 322, 328, 332,
205: 336, 338, 340, 342, 346, 350, 354, 358,
206: 264, 276, 362, 236, 364, 368, 370, 372,
207: 130, 378, 380, 382, 384, 388, 130, 264,
208: 130, 390, 396, 400, 402, 406, 130, 130,
209: 136, 408, 412, 416, 418, 420, 422, 424,
210: 426, 428, 430, 432, 434, 232, 436, 438,
211: 314, 440, 446
212: };
213: readonly unsigned int yyact[448] = {
214: 0x2002, YYOTHERS, 0x2, YYEOFVAL, 0x4, 0xa, 0x2022, 0x101,
215: 0x2022, 0x102, 0x2022, 0x10b, 0x2022, 0x10c, 0x2022, 0x10e,
216: 0x2022, 0x10f, 0x2022, 0x111, 0x2022, 0x114, 0x2022, 0x115,
217: 0x2022, 0x28, 0x3, YYOTHERS, 0x4000, YYEOFVAL, 0x6000, YYOTHERS,
218: 0xb, 0xa, 0x6000, YYOTHERS, 0x2003, YYOTHERS, 0x2001, YYOTHERS,
219: 0xc, 0xa, 0x6000, YYOTHERS, 0xd, 0x3b, 0xe, 0x26,
220: 0x2017, YYOTHERS, 0xf, 0x100, 0x10, 0x112, 0x201c, YYOTHERS,
221: 0x13, 0x7c, 0x2020, YYOTHERS, 0x15, 0x101, 0x16, 0x102,
222: 0x17, 0x10b, 0x18, 0x10c, 0x19, 0x10e, 0x1a, 0x10f,
223: 0x1b, 0x111, 0x1c, 0x114, 0x1d, 0x115, 0x1e, 0x28,
224: 0x6000, YYOTHERS, 0x2005, YYOTHERS, 0x2004, YYOTHERS, 0x2022, 0x101,
225: 0x2022, 0x102, 0x2022, 0x10b, 0x2022, 0x10c, 0x2022, 0x10e,
226: 0x2022, 0x10f, 0x2022, 0x111, 0x2022, 0x114, 0x2022, 0x115,
227: 0x2022, 0x28, 0x2019, YYOTHERS, 0x2022, 0x101, 0x2022, 0x102,
228: 0x2022, 0x10b, 0x2022, 0x10c, 0x2022, 0x10e, 0x2022, 0x10f,
229: 0x2022, 0x111, 0x2022, 0x114, 0x2022, 0x115, 0x2022, 0x28,
230: 0x2018, YYOTHERS, 0x2b, 0xa, 0x204b, YYOTHERS, 0x2022, YYOTHERS,
231: 0x2022, YYOTHERS, 0x202b, YYOTHERS, 0x1a, 0x10f, 0x6000, YYOTHERS,
232: 0x2029, YYOTHERS, 0x202a, YYOTHERS, 0x2044, 0x29, 0x2022, YYOTHERS,
233: 0x2044, 0x103, 0x2022, YYOTHERS, 0x2021, YYOTHERS, 0x15, 0x101,
234: 0x16, 0x102, 0x17, 0x10b, 0x18, 0x10c, 0x19, 0x10e,
235: 0x1a, 0x10f, 0x1b, 0x111, 0x1c, 0x114, 0x1d, 0x115,
236: 0x1e, 0x28, 0x2024, YYOTHERS, 0x2025, YYOTHERS, 0x2026, YYOTHERS,
237: 0x2027, YYOTHERS, 0x2028, YYOTHERS, 0x201b, YYOTHERS, 0x201a, YYOTHERS,
238: 0x204c, YYOTHERS, 0x2011, YYOTHERS, 0x41, 0xa, 0x204a, YYOTHERS,
239: 0x2010, YYOTHERS, 0x201d, YYOTHERS, 0x201e, YYOTHERS, 0x2012, YYOTHERS,
240: 0x201f, YYOTHERS, 0x42, 0x10d, 0x2b, 0xa, 0x43, 0x3b,
241: 0x6000, YYOTHERS, 0x47, 0x10d, 0x2035, YYOTHERS, 0x2006, YYOTHERS,
242: 0x2014, YYOTHERS, 0x200b, YYOTHERS, 0x200a, YYOTHERS, 0x2013, YYOTHERS,
243: 0x4b, 0x113, 0x6000, YYOTHERS, 0x4d, 0x104, 0x203f, YYOTHERS,
244: 0x2043, YYOTHERS, 0x50, 0x29, 0x6000, YYOTHERS, 0x51, 0x103,
245: 0x6000, YYOTHERS, 0x2023, YYOTHERS, 0x204d, YYOTHERS, 0x2b, 0xa,
246: 0x43, 0x3b, 0x200e, YYOTHERS, 0x2b, 0xa, 0x2048, YYOTHERS,
247: 0x1a, 0x10f, 0x203a, YYOTHERS, 0x42, 0x10d, 0x6000, YYOTHERS,
248: 0x41, 0xa, 0x2047, YYOTHERS, 0x1a, 0x10f, 0x2037, YYOTHERS,
249: 0x4d, 0x104, 0x2b, 0xa, 0x43, 0x3b, 0x203f, YYOTHERS,
250: 0x2046, YYOTHERS, 0x41, 0xa, 0x204a, 0x103, 0x204a, 0x104,
251: 0x204a, 0x105, 0x204a, 0x106, 0x204a, 0x107, 0x204a, 0x108,
252: 0x204a, 0x109, 0x204a, 0x10a, 0x204a, 0x113, 0x204a, 0x29,
253: 0x2022, YYOTHERS, 0x2044, 0x107, 0x2044, 0x108, 0x2044, 0x10a,
254: 0x2022, YYOTHERS, 0x2b, 0xa, 0x60, 0x3b, 0x204b, YYOTHERS,
255: 0x2044, 0x105, 0x2022, YYOTHERS, 0x63, 0x105, 0x6000, YYOTHERS,
256: 0x2032, YYOTHERS, 0x2033, YYOTHERS, 0x200f, YYOTHERS, 0x41, 0xa,
257: 0x2049, YYOTHERS, 0x64, 0x7c, 0x203d, YYOTHERS, 0x65, 0x109,
258: 0x6000, YYOTHERS, 0x66, 0x106, 0x2039, YYOTHERS, 0x68, 0x29,
259: 0x6000, YYOTHERS, 0x2034, YYOTHERS, 0x6d, 0x105, 0x6000, YYOTHERS,
260: 0x2045, YYOTHERS, 0x2007, YYOTHERS, 0x6e, 0x107, 0x6f, 0x108,
261: 0x2042, YYOTHERS, 0x200c, YYOTHERS, 0x203e, YYOTHERS, 0x2030, YYOTHERS,
262: 0x1a, 0x10f, 0x6000, YYOTHERS, 0x202f, YYOTHERS, 0x2044, 0x106,
263: 0x2044, 0x109, 0x2022, YYOTHERS, 0x79, 0x109, 0x6000, YYOTHERS,
264: 0x2036, YYOTHERS, 0x7a, 0x105, 0x6000, YYOTHERS, 0x202d, YYOTHERS,
265: 0x2044, 0x10a, 0x2022, YYOTHERS, 0x7f, 0x10a, 0x6000, YYOTHERS,
266: 0x200d, YYOTHERS, 0x203c, YYOTHERS, 0x2016, YYOTHERS, 0x2038, YYOTHERS,
267: 0x2015, YYOTHERS, 0x203b, YYOTHERS, 0x202e, YYOTHERS, 0x202c, YYOTHERS,
268: 0x2008, YYOTHERS, 0x2009, YYOTHERS, 0x2041, YYOTHERS, 0x2031, YYOTHERS,
269: 0x6e, 0x107, 0x6f, 0x108, 0x2042, YYOTHERS, 0x2040, YYOTHERS
270: };
271: #define YYNOCHAR (-1000)
272: #define yyerrok yyerrflag=0
273: #define yyclearin yylval=YYNOCHAR
274: int yystack[YYMAXDEPTH];
275: YYSTYPE yyvstack[YYMAXDEPTH], *yyv;
276: int yychar;
277:
278: #ifdef YYDEBUG
279: int yydebug = 1; /* No sir, not in the BSS */
280: #include <stdio.h>
281: #endif
282:
283: short yyerrflag;
284: int *yys;
285:
286: yyparse()
287: {
288: register YYSTYPE *yypvt;
289: int act;
290: register unsigned *ip, yystate;
291: int pno;
292: yystate = 0;
293: yychar = YYNOCHAR;
294: yyv = &yyvstack[-1];
295: yys = &yystack[-1];
296:
297: stack:
298: if( ++yys >= &yystack[YYMAXDEPTH] ) {
299: write(2, "Stack overflow\n", 15);
300: exit(1);
301: }
302: *yys = yystate;
303: *++yyv = yyval;
304: #ifdef YYDEBUG
305: if( yydebug )
306: fprintf(stdout, "Stack state %d, char %d\n", yystate, yychar);
307: #endif
308:
309: read:
310: ip = &yyact[yypa[yystate]];
311: if( ip[1] != YYNOCHAR ) {
312: if( yychar == YYNOCHAR ) {
313: yychar = yylex();
314: #ifdef YYDEBUG
315: if( yydebug )
316: fprintf(stdout, "lex read char %d, val %d\n", yychar, yylval);
317: #endif
318: }
319: while (ip[1]!=YYNOCHAR) {
320: if (ip[1]==yychar)
321: break;
322: ip += 2;
323: }
324: }
325: act = ip[0];
326: switch( act>>YYACTSH ) {
327: case YYSHIFTACT:
328: if( ip[1]==YYNOCHAR )
329: goto YYerract;
330: if( yychar != -1 )
331: yychar = YYNOCHAR; /* dont throw away EOF */
332: yystate = act&YYAMASK;
333: yyval = yylval;
334: #ifdef YYDEBUG
335: if( yydebug )
336: fprintf(stdout, "shift %d\n", yystate);
337: #endif
338: if( yyerrflag )
339: --yyerrflag;
340: goto stack;
341:
342: case YYACCEPTACT:
343: #ifdef YYDEBUG
344: if( yydebug )
345: fprintf(stdout, "accept\n");
346: #endif
347: return(0);
348:
349: case YYERRACT:
350: YYerract:
351: switch (yyerrflag) {
352: case 0:
353: yyerror("Syntax error");
354:
355: case 1:
356: case 2:
357:
358: yyerrflag = 3;
359: while( yys >= & yystack[0] ) {
360: ip = &yyact[yypa[*yys]];
361: while( ip[1]!=YYNOCHAR )
362: ip += 2;
363: if( (*ip&~YYAMASK) == (YYSHIFTACT<<YYACTSH) ) {
364: yystate = *ip&YYAMASK;
365: goto stack;
366: }
367: #ifdef YYDEBUG
368: if( yydebug )
369: fprintf(stderr, "error recovery leaves state %d, uncovers %d\n", *yys, yys[-1]);
370: #endif
371: yys--;
372: yyv--;
373: }
374: #ifdef YYDEBUG
375: if( yydebug )
376: fprintf(stderr, "no shift on error; abort\n");
377: #endif
378: return(1);
379:
380: case 3:
381: #ifdef YYDEBUG
382: if( yydebug )
383: fprintf(stderr, "Error recovery clobbers char %o\n", yychar);
384: #endif
385: if( yychar==YYEOFVAL )
386: return(1);
387: yychar = YYNOCHAR;
388: goto read;
389: }
390:
391: case YYREDACT:
392: pno = act&YYAMASK;
393: #ifdef YYDEBUG
394: if( yydebug )
395: fprintf(stdout, "reduce %d\n", pno);
396: #endif
397: yypvt = yyv;
398: yyv -= yypn[pno];
399: yys -= yypn[pno];
400: yyval = yyv[1];
401: switch(pno) {
402:
403: case 3: {
404:
405: #line 64 "/usr/src/cmd0/sh/sh.y"
406:
407: sesp->s_node = NULL;
408: reset(RCMD);
409: NOTREACHED;
410: }break;
411:
412: case 4: {
413:
414: #line 70 "/usr/src/cmd0/sh/sh.y"
415:
416: sesp->s_node = yypvt[-1].yu_node;
417: reset(errflag ? RERR : RCMD);
418: NOTREACHED;
419: }break;
420:
421: case 5: {
422:
423: #line 75 "/usr/src/cmd0/sh/sh.y"
424:
425: keyflush();
426: keyflag = 1;
427: reset(RERR);
428: NOTREACHED;
429: }break;
430:
431: case 10: {
432:
433: #line 91 "/usr/src/cmd0/sh/sh.y"
434: yyval.yu_nval = NWHILE; }break;
435:
436: case 11: {
437:
438: #line 92 "/usr/src/cmd0/sh/sh.y"
439: yyval.yu_nval = NUNTIL; }break;
440:
441: case 23: {
442:
443: #line 114 "/usr/src/cmd0/sh/sh.y"
444:
445: yyval.yu_node = yypvt[0].yu_node;
446: }break;
447:
448: case 24: {
449:
450: #line 117 "/usr/src/cmd0/sh/sh.y"
451:
452: yyval.yu_node = node(NBACK, yypvt[-1].yu_node, NULL);
453: }break;
454:
455: case 25: {
456:
457: #line 120 "/usr/src/cmd0/sh/sh.y"
458:
459: yyval.yu_node = yypvt[-1].yu_node;
460: }break;
461:
462: case 26: {
463:
464: #line 123 "/usr/src/cmd0/sh/sh.y"
465:
466: yyval.yu_node = node(NBACK, yypvt[-2].yu_node, yypvt[0].yu_node);
467: }break;
468:
469: case 27: {
470:
471: #line 126 "/usr/src/cmd0/sh/sh.y"
472:
473: yyval.yu_node = node(NLIST, yypvt[-2].yu_node, yypvt[0].yu_node);
474: }break;
475:
476: case 28: {
477:
478: #line 132 "/usr/src/cmd0/sh/sh.y"
479:
480: yyval.yu_node = yypvt[0].yu_node;
481: }break;
482:
483: case 29: {
484:
485: #line 135 "/usr/src/cmd0/sh/sh.y"
486:
487: yyval.yu_node = node(NORF, yypvt[-2].yu_node, yypvt[0].yu_node);
488: }break;
489:
490: case 30: {
491:
492: #line 138 "/usr/src/cmd0/sh/sh.y"
493:
494: yyval.yu_node = node(NANDF, yypvt[-2].yu_node, yypvt[0].yu_node);
495: }break;
496:
497: case 31: {
498:
499: #line 144 "/usr/src/cmd0/sh/sh.y"
500:
501: yyval.yu_node = node(NPIPE, yypvt[-2].yu_node, yypvt[0].yu_node);
502: }break;
503:
504: case 32: {
505:
506: #line 147 "/usr/src/cmd0/sh/sh.y"
507:
508: yyval.yu_node = yypvt[0].yu_node;
509: }break;
510:
511: case 33: {
512:
513: #line 153 "/usr/src/cmd0/sh/sh.y"
514:
515: yyval.yu_node = node(NCOMS, yypvt[0].yu_node, NULL);
516: keypop();
517: }break;
518:
519: case 34: {
520:
521: #line 160 "/usr/src/cmd0/sh/sh.y"
522:
523: keypush();
524: keyflag = 1;
525: }break;
526:
527: case 35: {
528:
529: #line 167 "/usr/src/cmd0/sh/sh.y"
530:
531: if ((yypvt[-1].yu_node->n_type == NCTRL && yypvt[0].yu_node->n_type == NARGS)
532: || (yypvt[-1].yu_node->n_type == NARGS && yypvt[0].yu_node->n_type == NCTRL)) {
533: YYERROR;
534: }
535: (yyval.yu_node = yypvt[-1].yu_node)->n_next = yypvt[0].yu_node;
536: }break;
537:
538: case 36: {
539:
540: #line 174 "/usr/src/cmd0/sh/sh.y"
541:
542: yyval.yu_node = yypvt[0].yu_node;
543: }break;
544:
545: case 37: {
546:
547: #line 180 "/usr/src/cmd0/sh/sh.y"
548:
549: yyval.yu_node = node(NIORS, yypvt[0].yu_strp, NULL);
550: }break;
551:
552: case 38: {
553:
554: #line 183 "/usr/src/cmd0/sh/sh.y"
555:
556: yyval.yu_node = node(NARGS, yypvt[0].yu_strp, NULL);
557: keyflag = 0;
558: }break;
559:
560: case 39: {
561:
562: #line 187 "/usr/src/cmd0/sh/sh.y"
563:
564: yyval.yu_node = node(NASSG, yypvt[0].yu_strp, NULL);
565: }break;
566:
567: case 40: {
568:
569: #line 190 "/usr/src/cmd0/sh/sh.y"
570:
571: if (!keyflag) {
572: YYERROR;
573: }
574: yyval.yu_node = node(NCTRL, yypvt[0].yu_node, NULL);
575: keyflag = 0;
576: }break;
577:
578: case 41: {
579:
580: #line 199 "/usr/src/cmd0/sh/sh.y"
581:
582: yyval.yu_strp = duplstr(strt, 0);
583: }break;
584:
585: case 42: {
586:
587: #line 204 "/usr/src/cmd0/sh/sh.y"
588:
589: yyval.yu_strp = duplstr(strt, 0);
590: }break;
591:
592: case 43: {
593:
594: #line 209 "/usr/src/cmd0/sh/sh.y"
595:
596: yyval.yu_strp = duplstr(strt, 0);
597: }break;
598:
599: case 44: {
600:
601: #line 215 "/usr/src/cmd0/sh/sh.y"
602:
603: yyval.yu_node = node(NFOR, yypvt[-4].yu_strp, node(NFOR2, yypvt[-3].yu_node, node(NLIST, yypvt[-1].yu_node, NULL)));
604: yyval.yu_node->n_next->n_next->n_next = yyval.yu_node->n_next;
605: }break;
606:
607: case 45: {
608:
609: #line 219 "/usr/src/cmd0/sh/sh.y"
610:
611: yyval.yu_node = node(NFOR, yypvt[-3].yu_strp, node(NFOR2, yypvt[-2].yu_node, node(NLIST, yypvt[-1].yu_node, NULL)));
612: yyval.yu_node->n_next->n_next->n_next = yyval.yu_node->n_next;
613: }break;
614:
615: case 46: {
616:
617: #line 223 "/usr/src/cmd0/sh/sh.y"
618:
619: yyval.yu_node = node(NCASE, yypvt[-4].yu_strp, yypvt[-1].yu_node);
620: }break;
621:
622: case 47: {
623:
624: #line 226 "/usr/src/cmd0/sh/sh.y"
625:
626: yyval.yu_node = node(NCASE, yypvt[-3].yu_strp, yypvt[-1].yu_node);
627: }break;
628:
629: case 48: {
630:
631: #line 229 "/usr/src/cmd0/sh/sh.y"
632:
633: yyval.yu_node = node(yypvt[-3].yu_nval, yypvt[-2].yu_node, node(NLIST, yypvt[-1].yu_node, NULL));
634: yyval.yu_node->n_next->n_next = yyval.yu_node;
635: }break;
636:
637: case 49: {
638:
639: #line 233 "/usr/src/cmd0/sh/sh.y"
640:
641: yyval.yu_node = node(NIF, node(NNULL, yypvt[-4].yu_node, yypvt[-2].yu_node), yypvt[-1].yu_node);
642: }break;
643:
644: case 50: {
645:
646: #line 236 "/usr/src/cmd0/sh/sh.y"
647:
648: yyval.yu_node = node(NPARN, yypvt[-1].yu_node, NULL);
649: }break;
650:
651: case 51: {
652:
653: #line 239 "/usr/src/cmd0/sh/sh.y"
654:
655: yyval.yu_node = node(NBRAC, yypvt[-1].yu_node, NULL);
656: }break;
657:
658: case 52: {
659:
660: #line 245 "/usr/src/cmd0/sh/sh.y"
661:
662: yyval.yu_node = yypvt[0].yu_node;
663: }break;
664:
665: case 53: {
666:
667: #line 248 "/usr/src/cmd0/sh/sh.y"
668:
669: yyval.yu_node = node(NARGS, "\"$@\"", NULL);
670: }break;
671:
672: case 54: {
673:
674: #line 254 "/usr/src/cmd0/sh/sh.y"
675:
676: yyval.yu_node = node(NARGS, yypvt[-1].yu_strp, yypvt[0].yu_node);
677: }break;
678:
679: case 55: {
680:
681: #line 257 "/usr/src/cmd0/sh/sh.y"
682:
683: yyval.yu_node = NULL;
684: }break;
685:
686: case 56: {
687:
688: #line 263 "/usr/src/cmd0/sh/sh.y"
689:
690: register NODE *np;
691:
692: for (np=yypvt[-2].yu_node; np->n_next; np=np->n_next)
693: ;
694: np->n_next = yypvt[0].yu_node;
695: yyval.yu_node = yypvt[-2].yu_node;
696: }break;
697:
698: case 57: {
699:
700: #line 271 "/usr/src/cmd0/sh/sh.y"
701:
702: yyval.yu_node = yypvt[0].yu_node;
703: }break;
704:
705: case 58: {
706:
707: #line 274 "/usr/src/cmd0/sh/sh.y"
708:
709: yyval.yu_node = NULL;
710: }break;
711:
712: case 59: {
713:
714: #line 280 "/usr/src/cmd0/sh/sh.y"
715:
716: yyval.yu_node = node(NCASE2, yypvt[0].yu_node, yypvt[-2].yu_node);
717: }break;
718:
719: case 60: {
720:
721: #line 286 "/usr/src/cmd0/sh/sh.y"
722:
723: yyval.yu_node = node(NCASE3, yypvt[-2].yu_strp, yypvt[0].yu_node);
724: }break;
725:
726: case 61: {
727:
728: #line 289 "/usr/src/cmd0/sh/sh.y"
729:
730: yyval.yu_node = node(NCASE3, yypvt[0].yu_strp, NULL);
731: }break;
732:
733: case 62: {
734:
735: #line 295 "/usr/src/cmd0/sh/sh.y"
736:
737: yyval.yu_node = yypvt[0].yu_node;
738: }break;
739:
740: case 63: {
741:
742: #line 298 "/usr/src/cmd0/sh/sh.y"
743:
744: yyval.yu_node = NULL;
745: }break;
746:
747: case 64: {
748:
749: #line 304 "/usr/src/cmd0/sh/sh.y"
750:
751: yyval.yu_node = node(NIF, node(NNULL, yypvt[-3].yu_node, yypvt[-1].yu_node), yypvt[0].yu_node);
752: }break;
753:
754: case 65: {
755:
756: #line 307 "/usr/src/cmd0/sh/sh.y"
757:
758: yyval.yu_node = node(NELSE, yypvt[0].yu_node, NULL);
759: }break;
760:
761: case 66: {
762:
763: #line 310 "/usr/src/cmd0/sh/sh.y"
764:
765: yyval.yu_node = NULL;
766: }break;
767:
768: case 67: {
769:
770: #line 316 "/usr/src/cmd0/sh/sh.y"
771:
772: yyval.yu_node = yypvt[0].yu_node;
773: }break;
774:
775: case 68: {
776:
777: #line 320 "/usr/src/cmd0/sh/sh.y"
778:
779: yyval.yu_node = NULL;
780: }break;
781:
782: case 69: {
783:
784: #line 326 "/usr/src/cmd0/sh/sh.y"
785:
786: yyval.yu_node = node(NLIST, yypvt[-2].yu_node, yypvt[0].yu_node);
787: }break;
788:
789: case 70: {
790:
791: #line 329 "/usr/src/cmd0/sh/sh.y"
792:
793: yyval.yu_node = yypvt[-1].yu_node;
794: }break;
795:
796: }
797: ip = &yygo[ yypgo[yypdnt[pno]] ];
798: while( *ip!=*yys && *ip!=YYNOCHAR )
799: ip += 2;
800: yystate = ip[1];
801: goto stack;
802: }
803: }
804:
805:
806:
807:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.