|
|
1.1.1.3 ! root 1: /* xebec.c,v 1.2 1993/05/20 05:28:39 cgd Exp */
1.1 root 2:
3: #include "xebec.h"
4: #include "llparse.h"
5: #ifndef E_TABLE
6: #define E_TABLE "xebec.e"
7: #endif E_TABLE
8:
9: #include "main.h"
10: #include "sets.h"
11: #include <stdio.h>
12:
13: extern FILE *eventfile_h, *actfile;
14:
15: llaction(lln,token)
16: LLtoken *token;
17: {
18: struct llattr *llattr;
19: llattr = &llattrdesc[lldescindex-1];
20: switch(lln) {
21: case 1:
22: llfinprod();
23: break;
24:
25: case 10: {
26:
27: if(strlen(llattr->llabase[3].ID.address) > 50 ) {
28: fprintf(stderr,
29: "Protocol name may not exceed 50 chars in length.\n");
30: Exit(-1);
31: }
32: strcpy(protocol, llattr->llabase[3].ID.address);
33: openfiles(protocol);
34:
35: } break;
36:
37: case 11: {
38:
39: llattr->llabase[7].pcb.isevent = 0;
40:
41: } break;
42:
43: case 12: {
44:
45: fprintf(actfile, "\ntypedef %s %s%s;\n",
46: llattr->llabase[7].pcb.address,protocol, PCBNAME);
47: llattr->llabase[8].syn.type = PCB_SYN;
48:
49: } break;
50:
51: case 13: {
52: llattr->llabase[11].part.type = (unsigned char) STATESET;
53: } break;
54:
55: case 14: {
56: end_states(eventfile_h);
57: } break;
58:
59: case 15: {
60: llattr->llabase[14].pcb.isevent = 1;
61: } break;
62:
63: case 16: {
64:
65: fprintf(eventfile_h, "\t"); /* fmq gags on single chars */
66: includecode(eventfile_h, llattr->llabase[14].pcb.address);
67: fprintf(eventfile_h, "\n"); /* fmq gags on single chars */
68: llattr->llabase[15].syn.type = EVENT_SYN;
69:
70: } break;
71:
72: case 17: {
73:
74: llattr->llabase[16].part.type = (unsigned char)EVENTSET;
75:
76: } break;
77:
78: case 18: {
79: end_events();
80: } break;
81:
82: case 19: {
83:
84: putincludes();
85: putdriver(actfile, 9);
86:
87: } break;
88:
89: case 20: {
90: if(llattr->llabase[0].pcb.isevent) {
91: fprintf(stderr,
92: "Event is a list of objects enclosed by \"{}\"\n");
93: Exit(-1);
94: }
95: fprintf(eventfile_h, "struct ");
96:
97: } break;
98:
99: case 21: {
100: llattr->llabase[0].pcb.address = llattr->llabase[2].ACTION.address;
101: } break;
102:
103: case 22: {
104: if( ! llattr->llabase[0].pcb.isevent) {
105: fprintf(stderr,
106: "Pcb requires a type or structure definition.\"{}\"\n");
107: Exit(-1);
108: }
109: llattr->llabase[0].pcb.address = llattr->llabase[1].ACTION.address;
110:
111: } break;
112:
113: case 23: {
114: llattr->llabase[0].pcb.address = llattr->llabase[1].ID.address;
115: } break;
116:
117: case 24: {
118: synonyms[llattr->llabase[0].syn.type] = stash( llattr->llabase[2].ID.address );
119: } break;
120:
121: case 25: {
122: includecode(actfile, llattr->llabase[2].ACTION.address);
123: } break;
124:
125: case 26: {
126:
127: llattr->llabase[2].partrest.address = llattr->llabase[1].ID.address;
128: llattr->llabase[2].partrest.type = llattr->llabase[0].part.type;
129:
130: } break;
131:
132: case 27: {
133: llattr->llabase[3].parttail.type = llattr->llabase[0].part.type;
134: } break;
135:
136: case 28: {
137: llattr->llabase[1].part.type = llattr->llabase[0].parttail.type;
138: } break;
139:
140: case 29: {
141:
142: if( lookup( llattr->llabase[0].partrest.type, llattr->llabase[0].partrest.address ) ) {
143: fprintf(stderr, "bnf:trying to redefine obj type 0x%x, adr %s\n",
144: llattr->llabase[0].partrest.type, llattr->llabase[0].partrest.address);
145: Exit(-1);
146: }
147: llattr->llabase[2].setdef.type = llattr->llabase[0].partrest.type;
148: llattr->llabase[2].setdef.address = stash( llattr->llabase[0].partrest.address );
149: llattr->llabase[2].setdef.keep = 1;
150:
151: } break;
152:
153: case 30: {
154: llattr->llabase[3].setstruct.object = llattr->llabase[2].setdef.object;
155: } break;
156:
157: case 31: {
158:
159: defineitem(llattr->llabase[0].partrest.type,
160: llattr->llabase[0].partrest.address, llattr->llabase[1].ACTION.address);
161:
162: } break;
163:
164: case 32: {
165:
166: defineitem(llattr->llabase[0].partrest.type, llattr->llabase[0].partrest.address, (char *)0);
167:
168: } break;
169:
170: case 33: {
171:
172: if(llattr->llabase[0].setstruct.object) {
173: /* WHEN COULD THIS BE FALSE??
174: * isn't it supposed to be setstruct.object???
175: * (it used to be $ACTION.address)
176: */
177:
178: llattr->llabase[0].setstruct.object->obj_struc = llattr->llabase[1].ACTION.address;
179: fprintf(eventfile_h,
180: "struct %s %s%s;\n\n", llattr->llabase[1].ACTION.address,
181: EV_PREFIX, llattr->llabase[0].setstruct.object->obj_name);
182: }
183:
184: } break;
185:
186: case 34: {
187:
188: llattr->llabase[2].setlist.setnum =
189: defineset(llattr->llabase[0].setdef.type, llattr->llabase[0].setdef.address, llattr->llabase[0].setdef.keep);
190:
191: } break;
192:
193: case 35: {
194: llattr->llabase[0].setdef.object = llattr->llabase[2].setlist.setnum;
195: } break;
196:
197: case 36: {
198:
199: member(llattr->llabase[0].setlist.setnum, llattr->llabase[1].ID.address);
200: llattr->llabase[2].setlisttail.setnum = llattr->llabase[0].setlist.setnum;
201:
202: } break;
203:
204: case 37: {
205: llattr->llabase[2].setlist.setnum = llattr->llabase[0].setlisttail.setnum;
206: } break;
207:
208: case 38: {
209: transno ++;
210: } break;
211:
212: case 39: {
213:
214: CurrentEvent /* GAG! */ = llattr->llabase[6].event.object;
215:
216: } break;
217:
218: case 40: {
219:
220: llattr->llabase[8].actionpart.string = llattr->llabase[7].predicatepart.string;
221: llattr->llabase[8].actionpart.newstate = llattr->llabase[1].newstate.object;
222: llattr->llabase[8].actionpart.oldstate = llattr->llabase[5].oldstate.object;
223:
224: } break;
225:
226: case 41: {
227:
228: llattr->llabase[0].predicatepart.string = stash ( llattr->llabase[1].PREDICATE.address );
229:
230: } break;
231:
232: case 42: {
233:
234: llattr->llabase[0].predicatepart.string = (char *)0;
235:
236: } break;
237:
238: case 43: {
239:
240: statetable( llattr->llabase[0].actionpart.string, llattr->llabase[0].actionpart.oldstate,
241: llattr->llabase[0].actionpart.newstate,
242: acttable(actfile, llattr->llabase[1].ACTION.address ),
243: CurrentEvent );
244: if( print_trans ) {
245: dump_trans( llattr->llabase[0].actionpart.string, llattr->llabase[0].actionpart.oldstate,
246: llattr->llabase[0].actionpart.newstate,
247: llattr->llabase[1].ACTION.address, CurrentEvent );
248: }
249:
250: } break;
251:
252: case 44: {
253:
254: statetable(llattr->llabase[0].actionpart.string, llattr->llabase[0].actionpart.oldstate, llattr->llabase[0].actionpart.newstate,
255: 0, CurrentEvent ); /* KLUDGE - remove this */
256: if( print_trans ) {
257: dump_trans( llattr->llabase[0].actionpart.string, llattr->llabase[0].actionpart.oldstate,
258: llattr->llabase[0].actionpart.newstate,
259: "NULLACTION", CurrentEvent );
260: }
261:
262: } break;
263:
264: case 45: {
265:
266: llattr->llabase[0].oldstate.object = Lookup(STATESET, llattr->llabase[1].ID.address);
267:
268: } break;
269:
270: case 46: {
271:
272: llattr->llabase[1].setdef.address = (char *)0;
273: llattr->llabase[1].setdef.type = (unsigned char)STATESET;
274: llattr->llabase[1].setdef.keep = 0;
275:
276: } break;
277:
278: case 47: {
279:
280: llattr->llabase[0].oldstate.object = llattr->llabase[1].setdef.object;
281:
282: } break;
283:
284: case 48: {
285:
286: llattr->llabase[0].newstate.object = Lookup(STATESET, llattr->llabase[1].ID.address);
287:
288: } break;
289:
290: case 49: {
291:
292: extern struct Object *SameState;
293:
294: llattr->llabase[0].newstate.object = SameState;
295:
296: } break;
297:
298: case 50: {
299:
300: llattr->llabase[0].event.object = Lookup(EVENTSET, llattr->llabase[1].ID.address);
301:
302: } break;
303:
304: case 51: {
305:
306: llattr->llabase[1].setdef.address = (char *)0;
307: llattr->llabase[1].setdef.type = (unsigned char)EVENTSET;
308: llattr->llabase[1].setdef.keep = 0;
309:
310: } break;
311:
312: case 52: {
313:
314: llattr->llabase[0].event.object = llattr->llabase[1].setdef.object;
315:
316: } break;
317: }
318: }
319: char *llstrings[] = {
320: "<null>",
321: "ID",
322: "STRUCT",
323: "SYNONYM",
324: "PREDICATE",
325: "ACTION",
326: "PROTOCOL",
327: "LBRACK",
328: "RBRACK",
329: "LANGLE",
330: "EQUAL",
331: "COMMA",
332: "STAR",
333: "EVENTS",
334: "TRANSITIONS",
335: "INCLUDE",
336: "STATES",
337: "SEMI",
338: "PCB",
339: "DEFAULT",
340: "NULLACTION",
341: "SAME",
342: "ENDMARKER",
343: "pcb",
344: "syn",
345: "setlist",
346: "setlisttail",
347: "part",
348: "parttail",
349: "partrest",
350: "setstruct",
351: "setdef",
352: "translist",
353: "transition",
354: "event",
355: "oldstate",
356: "newstate",
357: "predicatepart",
358: "actionpart",
359: "program",
360: "includelist",
361: "optsemi",
362: "translisttail",
363: "$goal$",
364: (char *) 0
365: };
366: short llnterms = 23;
367: short llnsyms = 44;
368: short llnprods = 38;
369: short llinfinite = 10000;
370: short llproductions[] = {
371: 41, -21, 5, -20, 2,
372: 41, -22, 5,
373: 41, -23, 1,
374: -24, 1, 3,
375:
376: 26, -36, 1,
377: 25, -37, 11,
378:
379: 28, -27, 29, -26, 1,
380: 27, -28,
381:
382: 30, -30, 31, -29, 10,
383: -31, 5,
384: -32,
385: -33, 5,
386:
387: -35, 8, 25, -34, 7,
388: 42, 33,
389: 17, 38, -40, 37, -39, 34, 35, 10, 10, 9, -38, 36,
390: -50, 1,
391: -52, 31, -51,
392: -45, 1,
393: -47, 31, -46,
394: -48, 1,
395: -49, 21,
396: -41, 4,
397: -42, 19,
398: -43, 5,
399: -44, 20,
400: 32, -19, 14, -18, 12, 27, -17, 24, -16, 23, -15, 13, -14, 12, 27, -13, 16, 12, 24, -12, 23, -11, 18, 40, 12, -10, 1, 6, 12,
401: 12, -25, 5, 15,
402:
403: 17,
404:
405: 32,
406:
407: 22, 39,
408: 0
409: };
410: struct llprodindex llprodindex[] = {
411: { 0, 0, 0 }, { 0, 5, 19 }, { 5, 3, 3 }, { 8, 3, 2 },
412: { 11, 3, 2 }, { 14, 0, 2 }, { 14, 3, 0 }, { 17, 3, 1 },
413: { 20, 0, 0 }, { 20, 5, 3 }, { 25, 2, 0 }, { 27, 0, 3 },
414: { 27, 5, 1 }, { 32, 2, 0 }, { 34, 1, 3 }, { 35, 2, 1 },
415: { 37, 0, 0 }, { 37, 5, 1 }, { 42, 2, 0 }, { 44, 12, 3 },
416: { 56, 2, 2 }, { 58, 3, 2 }, { 61, 2, 0 }, { 63, 3, 2 },
417: { 66, 2, 1 }, { 68, 2, 0 }, { 70, 2, 9 }, { 72, 2, 1 },
418: { 74, 2, 1 }, { 76, 2, 1 }, { 78, 29, 1 }, { 107, 4, 1 },
419: { 111, 0, 1 }, { 111, 1, 1 }, { 112, 0, 1 }, { 112, 1, 1 },
420: { 113, 0, 1 }, { 113, 2, 2 }, { 0, 0, 0 }
421: };
422: short llepsilon[] = {
423: 0, 0, 0, 0, 0, 1, 0, 0, 1, 0,
424: 0, 1, 0, 0, 1, 0, 1, 0, 0, 0,
425: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
426: 0, 0, 1, 0, 1, 0, 1, 0, 0
427: };
428: struct llparsetable llparsetable[] = {
429: { 1, 3 }, { 2, 1 }, { 5, 2 }, { 0, 23 }, { 1, 5 },
430: { 3, 4 }, { 12, 5 }, { 0, 24 }, { 1, 6 }, { 0, 25 },
431: { 8, 8 }, { 11, 7 }, { 0, 26 }, { 1, 9 }, { 0, 27 },
432: { 1, 10 }, { 12, 11 }, { 0, 28 }, { 1, 14 }, { 5, 13 },
433: { 10, 12 }, { 12, 14 }, { 0, 29 }, { 1, 16 }, { 5, 15 },
434: { 12, 16 }, { 0, 30 }, { 7, 17 }, { 0, 31 }, { 1, 18 },
435: { 21, 18 }, { 0, 32 }, { 1, 19 }, { 21, 19 }, { 0, 33 },
436: { 1, 20 }, { 7, 21 }, { 0, 34 }, { 1, 22 }, { 7, 23 },
437: { 0, 35 }, { 1, 24 }, { 21, 25 }, { 0, 36 }, { 4, 26 },
438: { 19, 27 }, { 0, 37 }, { 5, 28 }, { 20, 29 }, { 0, 38 },
439: { 12, 30 }, { 0, 39 }, { 15, 31 }, { 18, 32 }, { 0, 40 },
440: { 1, 34 }, { 3, 34 }, { 12, 34 }, { 17, 33 }, { 0, 41 },
441: { 1, 35 }, { 21, 35 }, { 22, 36 }, { 0, 42 }, { 12, 37 },
442: { 0, 43 }, { 0, 0 }
443: };
444: short llparseindex[] = {
445: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
446: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
447: 0, 0, 0, 0, 4, 8, 10, 13, 15, 18,
448: 23, 27, 29, 32, 35, 38, 41, 44, 47, 50,
449: 52, 55, 60, 64, 0
450: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.