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