|
|
1.1 root 1:
2: #line 1 "../scn.y"
3:
4: #include <scnbld.h>
5:
6: clump *clumps, *lastc, *thisc;
7: loc *locs, *last, *this;
8:
9: /*
10: * Generate a unique name.
11: */
12: static char *
13: genname()
14: {
15: char buf[20];
16: static int i = 0;
17:
18: sprintf(buf, "L%04d", ++i);
19: return(newcpy(buf));
20: }
21:
22:
23: #include "y.tab.h"
24: #define YYCLEARIN yychar = -1000
25: #define YYERROK yyerrflag = 0
26: extern int yychar;
27: extern short yyerrflag;
28: #ifndef YYMAXDEPTH
29: #define YYMAXDEPTH 150
30: #endif
31: YYSTYPE yyval, yylval;
32: #ifdef YYTNAMES
33: readonly struct yytname yytnames[18] =
34: {
35: "$end", -1,
36: "error", -2,
37: "NAME", 256,
38: "STRING", 257,
39: "NUMBER", 258,
40: "EXT", 259,
41: "RONLY", 260,
42: "LONG", 261,
43: "DEFAULT", 262,
44: "SKIP", 263,
45: "GROUP", 264,
46: "HELP", 265,
47: "VERIFY", 266,
48: "NL", 267,
49: "DO", 268,
50: "DONE", 269,
51: "DESIG", 270,
52: NULL
53: } ;
54: #endif
55: #include <action.h>
56: readonly unsigned char yypdnt[25] = {
57: 0, 1, 1, 1, 2, 2, 2, 4,
58: 3, 3, 3, 3, 5, 5, 5, 6,
59: 6, 6, 6, 6, 6, 6, 6, 6,
60: 6
61: };
62: readonly unsigned char yypn[25] = {
63: 2, 1, 2, 0, 2, 1, 2, 0,
64: 4, 2, 3, 1, 1, 2, 0, 1,
65: 1, 1, 2, 2, 2, 2, 2, 2,
66: 2
67: };
68: readonly unsigned char yypgo[7] = {
69: 0, 0, 2, 6, 8, 10, 12
70: };
71: readonly unsigned int yygo[16] = {
72: YYOTHERS, 0x7, 0x7, 0xF, YYOTHERS, 0x8, YYOTHERS, 0x9,
73: YYOTHERS, 0x11, YYOTHERS, 0x1A, 0x1A, 0x23, YYOTHERS, 0x1B
74: };
75: readonly unsigned char yypa[36] = {
76: 0, 14, 18, 22, 24, 28, 30, 34,
77: 48, 50, 54, 56, 58, 62, 64, 68,
78: 70, 72, 88, 90, 92, 94, 96, 102,
79: 108, 114, 118, 134, 136, 138, 140, 142,
80: 144, 146, 148, 150
81: };
82: readonly unsigned int yyact[152] = {
83: 0x2, 0x100, 0x3, 0x10B, 0x4, 0x10C, 0x5, 0x10D,
84: 0x6, 0x10E, 0x2003, YYEOFVAL, 0x1, YYOTHERS, 0xA, 0x10B,
85: 0x6000, YYOTHERS, 0xB, 0x102, 0x6000, YYOTHERS, 0x2005, YYOTHERS,
86: 0xC, 0x102, 0x6000, YYOTHERS, 0x200B, YYOTHERS, 0xD, 0x101,
87: 0x6000, YYOTHERS, 0xE, YYEOFVAL, 0x2, 0x100, 0x3, 0x10B,
88: 0x4, 0x10C, 0x5, 0x10D, 0x6, 0x10E, 0x1, YYOTHERS,
89: 0x2001, YYOTHERS, 0x10, 0x10B, 0x6000, YYOTHERS, 0x2006, YYOTHERS,
90: 0x2007, YYOTHERS, 0x12, 0x100, 0x6000, YYOTHERS, 0x2009, YYOTHERS,
91: 0x4000, YYEOFVAL, 0x6000, YYOTHERS, 0x2002, YYOTHERS, 0x2004, YYOTHERS,
92: 0x13, 0x103, 0x14, 0x104, 0x15, 0x105, 0x16, 0x106,
93: 0x17, 0x107, 0x18, 0x109, 0x19, 0x10A, 0x200E, YYOTHERS,
94: 0x200A, YYOTHERS, 0x2011, YYOTHERS, 0x2010, YYOTHERS, 0x200F, YYOTHERS,
95: 0x1C, 0x100, 0x1D, 0x101, 0x6000, YYOTHERS, 0x1E, 0x102,
96: 0x1F, 0x108, 0x6000, YYOTHERS, 0x20, 0x100, 0x21, 0x101,
97: 0x6000, YYOTHERS, 0x22, 0x100, 0x6000, YYOTHERS, 0x13, 0x103,
98: 0x14, 0x104, 0x15, 0x105, 0x16, 0x106, 0x17, 0x107,
99: 0x18, 0x109, 0x19, 0x10A, 0x2008, YYOTHERS, 0x200C, YYOTHERS,
100: 0x2013, YYOTHERS, 0x2012, YYOTHERS, 0x2016, YYOTHERS, 0x2018, YYOTHERS,
101: 0x2015, YYOTHERS, 0x2014, YYOTHERS, 0x2017, YYOTHERS, 0x200D, YYOTHERS
102: };
103: #define YYNOCHAR (-1000)
104: #define yyerrok yyerrflag=0
105: #define yyclearin yylval=YYNOCHAR
106: int yystack[YYMAXDEPTH];
107: YYSTYPE yyvstack[YYMAXDEPTH], *yyv;
108: int yychar;
109:
110: #ifdef YYDEBUG
111: int yydebug = 1; /* No sir, not in the BSS */
112: #include <stdio.h>
113: #endif
114:
115: short yyerrflag;
116: int *yys;
117:
118: yyparse()
119: {
120: register YYSTYPE *yypvt;
121: int act;
122: register unsigned *ip, yystate;
123: int pno;
124: yystate = 0;
125: yychar = YYNOCHAR;
126: yyv = &yyvstack[-1];
127: yys = &yystack[-1];
128:
129: stack:
130: if( ++yys >= &yystack[YYMAXDEPTH] ) {
131: write(2, "Stack overflow\n", 15);
132: exit(1);
133: }
134: *yys = yystate;
135: *++yyv = yyval;
136: #ifdef YYDEBUG
137: if( yydebug )
138: fprintf(stdout, "Stack state %d, char %d\n", yystate, yychar);
139: #endif
140:
141: read:
142: ip = &yyact[yypa[yystate]];
143: if( ip[1] != YYNOCHAR ) {
144: if( yychar == YYNOCHAR ) {
145: yychar = yylex();
146: #ifdef YYDEBUG
147: if( yydebug )
148: fprintf(stdout, "lex read char %d, val %d\n", yychar, yylval);
149: #endif
150: }
151: while (ip[1]!=YYNOCHAR) {
152: if (ip[1]==yychar)
153: break;
154: ip += 2;
155: }
156: }
157: act = ip[0];
158: switch( act>>YYACTSH ) {
159: case YYSHIFTACT:
160: if( ip[1]==YYNOCHAR )
161: goto YYerract;
162: if( yychar != -1 )
163: yychar = YYNOCHAR; /* dont throw away EOF */
164: yystate = act&YYAMASK;
165: yyval = yylval;
166: #ifdef YYDEBUG
167: if( yydebug )
168: fprintf(stdout, "shift %d\n", yystate);
169: #endif
170: if( yyerrflag )
171: --yyerrflag;
172: goto stack;
173:
174: case YYACCEPTACT:
175: #ifdef YYDEBUG
176: if( yydebug )
177: fprintf(stdout, "accept\n");
178: #endif
179: return(0);
180:
181: case YYERRACT:
182: YYerract:
183: switch (yyerrflag) {
184: case 0:
185: yyerror("Syntax error");
186:
187: case 1:
188: case 2:
189:
190: yyerrflag = 3;
191: while( yys >= & yystack[0] ) {
192: ip = &yyact[yypa[*yys]];
193: while( ip[1]!=YYNOCHAR )
194: ip += 2;
195: if( (*ip&~YYAMASK) == (YYSHIFTACT<<YYACTSH) ) {
196: yystate = *ip&YYAMASK;
197: goto stack;
198: }
199: #ifdef YYDEBUG
200: if( yydebug )
201: fprintf(stderr, "error recovery leaves state %d, uncovers %d\n", *yys, yys[-1]);
202: #endif
203: yys--;
204: yyv--;
205: }
206: #ifdef YYDEBUG
207: if( yydebug )
208: fprintf(stderr, "no shift on error; abort\n");
209: #endif
210: return(1);
211:
212: case 3:
213: #ifdef YYDEBUG
214: if( yydebug )
215: fprintf(stderr, "Error recovery clobbers char %o\n", yychar);
216: #endif
217: if( yychar==YYEOFVAL )
218: return(1);
219: yychar = YYNOCHAR;
220: goto read;
221: }
222:
223: case YYREDACT:
224: pno = act&YYAMASK;
225: #ifdef YYDEBUG
226: if( yydebug )
227: fprintf(stdout, "reduce %d\n", pno);
228: #endif
229: yypvt = yyv;
230: yyv -= yypn[pno];
231: yys -= yypn[pno];
232: yyval = yyv[1];
233: switch(pno) {
234:
235: case 6: {
236:
237: #line 50 "../scn.y"
238:
239: yyerrok;
240: }break;
241:
242: case 7: {
243:
244: #line 54 "../scn.y"
245:
246: if (0 >= yypvt[0].val)
247: yyerror("Invalid field size");
248: this = alloc(sizeof(*this));
249: if (NULL == locs)
250: last = locs = this;
251: else
252: last = last->next = this;
253:
254: this->field = yypvt[-1].string;
255: this->len = yypvt[0].val;
256:
257: if ((NULL != thisc) && (!thisc->count++))
258: thisc->from = this;
259: }break;
260:
261: case 9: {
262:
263: #line 70 "../scn.y"
264:
265: extern char fieldDesig;
266:
267: fieldDesig = yypvt[0].string[1];
268: }break;
269:
270: case 10: {
271:
272: #line 76 "../scn.y"
273:
274: if (NULL != thisc)
275: yyerror("Nested do statements");
276: if (0 >= yypvt[-1].val)
277: yyerror("Invalid repeat count");
278:
279: thisc = alloc(sizeof(*thisc));
280: if (NULL == clumps)
281: lastc = clumps = thisc;
282: else
283: lastc = lastc->next = thisc;
284:
285: thisc->times = yypvt[-1].val;
286:
287: fprintf(ohp, "#define %s %d\n", yypvt[0].string, yypvt[-1].val);
288: }break;
289:
290: case 11: {
291:
292: #line 93 "../scn.y"
293:
294: if (NULL == thisc)
295: yyerror("Unmatched done statement");
296: thisc = NULL;
297: }break;
298:
299: case 15: {
300:
301: #line 101 "../scn.y"
302: this->flags |= LONGFIELD; }break;
303:
304: case 16: {
305:
306: #line 102 "../scn.y"
307: this->flags |= READONLY; }break;
308:
309: case 17: {
310:
311: #line 103 "../scn.y"
312: this->flags |= EXTERNAL; }break;
313:
314: case 18: {
315:
316: #line 104 "../scn.y"
317:
318: if (NULL != this->Default)
319: yyerror("Default already set");
320: this->Default = genname();
321: fprintf(ofp, "static char %s[] = %s;\n", this->Default, yypvt[0].string);
322: }break;
323:
324: case 19: {
325:
326: #line 110 "../scn.y"
327:
328: if (NULL != this->Default)
329: yyerror("Default already set");
330: this->Default = yypvt[0].string;
331: }break;
332:
333: case 20: {
334:
335: #line 115 "../scn.y"
336:
337: if (NULL != this->help)
338: yyerror("Help already set");
339: this->help = genname();
340: fprintf(ofp, "static char %s[] = %s;\n", this->help, yypvt[0].string);
341: }break;
342:
343: case 21: {
344:
345: #line 121 "../scn.y"
346:
347: if (NULL != this->help)
348: yyerror("Help already set");
349: this->help = yypvt[0].string;
350: }break;
351:
352: case 22: {
353:
354: #line 126 "../scn.y"
355:
356: if (0 >= yypvt[0].val || 254 < yypvt[0].val)
357: yyerror("Invalid skip number");
358: if (this->skipf)
359: yyerror("Skip factor already set");
360: this->skipf = yypvt[0].val;
361: }break;
362:
363: case 23: {
364:
365: #line 133 "../scn.y"
366:
367: if (NULL != this->verify)
368: yyerror("Verify already set");
369: this->verify = yypvt[0].string;
370: }break;
371:
372: case 24: {
373:
374: #line 138 "../scn.y"
375:
376: if (this->skipf)
377: yyerror("Skip factor already set");
378: if (NULL == thisc)
379: yyerror("group must be in do");
380: else
381: this->skipf = 255;
382: }break;
383:
384: }
385: ip = &yygo[ yypgo[yypdnt[pno]] ];
386: while( *ip!=*yys && *ip!=YYNOCHAR )
387: ip += 2;
388: yystate = ip[1];
389: goto stack;
390: }
391: }
392:
393:
394:
395:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.