|
|
1.1 ! root 1: { ! 2: #include "main.h" ! 3: #include "sets.h" ! 4: #include <stdio.h> ! 5: ! 6: extern FILE *eventfile_h, *actfile; ! 7: } ! 8: ! 9: *fmq ! 10: ! 11: novocab ! 12: nobnf ! 13: nofirst ! 14: nofollow ! 15: noparsetable ! 16: noerrortables ! 17: nos ! 18: noe ! 19: ! 20: *terminals ! 21: ! 22: ID 0 0 { char *address; } ! 23: STRUCT 0 0 ! 24: SYNONYM 0 0 ! 25: PREDICATE 0 0 { char *address; } ! 26: ACTION 0 0 { char *address; } ! 27: /* ! 28: FSTRING 0 0 { char *address; } ! 29: */ ! 30: PROTOCOL 0 0 ! 31: LBRACK 0 0 ! 32: RBRACK 0 0 ! 33: LANGLE 0 0 ! 34: EQUAL 0 0 ! 35: COMMA 0 0 ! 36: STAR 0 0 ! 37: EVENTS 0 0 ! 38: TRANSITIONS 0 0 ! 39: INCLUDE 0 0 ! 40: STATES 0 0 ! 41: SEMI 0 0 ! 42: PCB 0 0 { char *address; } ! 43: DEFAULT 0 0 ! 44: NULLACTION 0 0 ! 45: SAME 0 0 ! 46: ! 47: *nonterminals ! 48: ! 49: pcb { char *address; int isevent; } ! 50: syn { int type; } ! 51: setlist { struct Object *setnum; } ! 52: setlisttail { struct Object *setnum; } ! 53: part { unsigned char type; } ! 54: parttail { unsigned char type; } ! 55: partrest { unsigned char type; char *address; } ! 56: setstruct { struct Object *object; } ! 57: setdef { unsigned char type,keep; char *address; struct Object *object; } ! 58: translist ! 59: transition ! 60: event { struct Object *object; } ! 61: oldstate { struct Object *object; } ! 62: newstate { struct Object *object; } ! 63: predicatepart { char *string; } ! 64: actionpart { char *string; struct Object *oldstate; struct Object *newstate; } ! 65: ! 66: *productions ! 67: ! 68: program ::= ! 69: STAR PROTOCOL ID ! 70: { ! 71: if(strlen($ID.address) > 50 ) { ! 72: fprintf(stderr, ! 73: "Protocol name may not exceed 50 chars in length.\n"); ! 74: Exit(-1); ! 75: } ! 76: strcpy(protocol, $ID.address); ! 77: openfiles(protocol); ! 78: } ! 79: STAR includelist ! 80: PCB ! 81: { ! 82: $$pcb.isevent = 0; ! 83: } ! 84: pcb ! 85: { ! 86: fprintf(actfile, "\ntypedef %s %s%s;\n", ! 87: $pcb[7].address,protocol, PCBNAME); ! 88: $$syn.type = PCB_SYN; ! 89: } ! 90: syn ! 91: STAR STATES { $$part.type = (unsigned char) STATESET; } part ! 92: STAR { end_states(eventfile_h); } EVENTS ! 93: { $$pcb.isevent = 1; } ! 94: pcb ! 95: { ! 96: fprintf(eventfile_h, "\t"); /* fmq gags on single chars */ ! 97: includecode(eventfile_h, $pcb[14].address); ! 98: fprintf(eventfile_h, "\n"); /* fmq gags on single chars */ ! 99: $$syn.type = EVENT_SYN; ! 100: } ! 101: syn ! 102: { ! 103: $$part.type = (unsigned char)EVENTSET; ! 104: } ! 105: part ! 106: STAR { end_events(); } ! 107: TRANSITIONS ! 108: { ! 109: putincludes(); ! 110: putdriver(actfile, 9); ! 111: } ! 112: translist ! 113: ; ! 114: pcb ::= STRUCT ! 115: { if($pcb.isevent) { ! 116: fprintf(stderr, ! 117: "Event is a list of objects enclosed by \"{}\"\n"); ! 118: Exit(-1); ! 119: } ! 120: fprintf(eventfile_h, "struct "); ! 121: } ! 122: ACTION { $pcb.address = $ACTION.address; } ! 123: optsemi ! 124: ::= ACTION ! 125: { if( ! $pcb.isevent) { ! 126: fprintf(stderr, ! 127: "Pcb requires a type or structure definition.\"{}\"\n"); ! 128: Exit(-1); ! 129: } ! 130: $pcb.address = $ACTION.address; ! 131: } ! 132: optsemi ! 133: ::= ID { $pcb.address = $ID.address; } optsemi ! 134: ; ! 135: ! 136: syn ::= SYNONYM ID { synonyms[$syn.type] = stash( $ID.address ); } ! 137: ::= ! 138: ; ! 139: ! 140: optsemi ::= SEMI ! 141: ::= ! 142: ; ! 143: includelist ::= INCLUDE ACTION { includecode(actfile, $ACTION.address);} STAR ! 144: ::= ! 145: ; ! 146: part ::= ID ! 147: { ! 148: $$partrest.address = $ID.address; ! 149: $$partrest.type = $part.type; ! 150: } ! 151: partrest ! 152: { $$parttail.type = $part.type; } ! 153: parttail ! 154: ; ! 155: parttail ::= { $$part.type = $parttail.type; } part ! 156: ::= ! 157: ; ! 158: partrest ::= EQUAL ! 159: { ! 160: if( lookup( $partrest.type, $partrest.address ) ) { ! 161: fprintf(stderr, "bnf:trying to redefine obj type 0x%x, adr %s\n", ! 162: $partrest.type, $partrest.address); ! 163: Exit(-1); ! 164: } ! 165: $$setdef.type = $partrest.type; ! 166: $$setdef.address = stash( $partrest.address ); ! 167: $$setdef.keep = 1; ! 168: } setdef { $$setstruct.object = $setdef.object; } setstruct ! 169: ! 170: ::= ACTION ! 171: { ! 172: defineitem($partrest.type, ! 173: $partrest.address, $ACTION.address); ! 174: } ! 175: ! 176: ::= { ! 177: defineitem($partrest.type, $partrest.address, (char *)0); ! 178: } ! 179: ; ! 180: ! 181: setstruct ::= ACTION ! 182: { ! 183: if($setstruct.object) { ! 184: /* WHEN COULD THIS BE FALSE?? ! 185: * isn't it supposed to be setstruct.object??? ! 186: * (it used to be $ACTION.address) ! 187: */ ! 188: ! 189: $setstruct.object->obj_struc = $ACTION.address; ! 190: fprintf(eventfile_h, ! 191: "struct %s %s%s;\n\n", $ACTION.address, ! 192: EV_PREFIX, $setstruct.object->obj_name); ! 193: } ! 194: } ! 195: ::= ! 196: ; ! 197: ! 198: setdef ::= LBRACK ! 199: { ! 200: $$setlist.setnum = ! 201: defineset($setdef.type, $setdef.address, $setdef.keep); ! 202: } setlist RBRACK { $setdef.object = $setlist.setnum; } ! 203: ; ! 204: ! 205: setlist ::= ID ! 206: { ! 207: member($setlist.setnum, $ID.address); ! 208: $$setlisttail.setnum = $setlist.setnum; ! 209: } setlisttail ! 210: ; ! 211: ! 212: setlisttail ::= COMMA { $$setlist.setnum = $setlisttail.setnum; } setlist ! 213: ::= ! 214: ; ! 215: translist ::= transition translisttail ! 216: ; ! 217: translisttail ::= translist ! 218: ::= ! 219: ; ! 220: transition ::= newstate { transno ++; } LANGLE EQUAL EQUAL oldstate ! 221: event ! 222: { ! 223: CurrentEvent /* GAG! */ = $event.object; ! 224: } ! 225: predicatepart ! 226: { ! 227: $$actionpart.string = $predicatepart.string; ! 228: $$actionpart.newstate = $newstate.object; ! 229: $$actionpart.oldstate = $oldstate.object; ! 230: } ! 231: actionpart ! 232: SEMI ! 233: ; ! 234: ! 235: predicatepart ::= PREDICATE ! 236: { ! 237: $predicatepart.string = stash ( $PREDICATE.address ); ! 238: } ! 239: ::= DEFAULT ! 240: { ! 241: $predicatepart.string = (char *)0; ! 242: } ! 243: ; ! 244: ! 245: actionpart ::= ! 246: ACTION ! 247: { ! 248: statetable( $actionpart.string, $actionpart.oldstate, ! 249: $actionpart.newstate, ! 250: acttable(actfile, $ACTION.address ), ! 251: CurrentEvent ); ! 252: if( print_trans ) { ! 253: dump_trans( $actionpart.string, $actionpart.oldstate, ! 254: $actionpart.newstate, ! 255: $ACTION.address, CurrentEvent ); ! 256: } ! 257: } ! 258: ::= NULLACTION ! 259: { ! 260: statetable($actionpart.string, $actionpart.oldstate, $actionpart.newstate, ! 261: 0, CurrentEvent ); /* KLUDGE - remove this */ ! 262: if( print_trans ) { ! 263: dump_trans( $actionpart.string, $actionpart.oldstate, ! 264: $actionpart.newstate, ! 265: "NULLACTION", CurrentEvent ); ! 266: } ! 267: } ! 268: ; ! 269: ! 270: oldstate ::= ID ! 271: { ! 272: $oldstate.object = Lookup(STATESET, $ID.address); ! 273: } ! 274: ::= { ! 275: $$setdef.address = (char *)0; ! 276: $$setdef.type = (unsigned char)STATESET; ! 277: $$setdef.keep = 0; ! 278: } ! 279: setdef ! 280: { ! 281: $oldstate.object = $setdef.object; ! 282: } ! 283: ; ! 284: ! 285: newstate ::= ID ! 286: { ! 287: $newstate.object = Lookup(STATESET, $ID.address); ! 288: } ! 289: ; ! 290: ! 291: newstate ::= SAME ! 292: { ! 293: extern struct Object *SameState; ! 294: ! 295: $newstate.object = SameState; ! 296: } ! 297: ; ! 298: ! 299: event ::= ID ! 300: { ! 301: $event.object = Lookup(EVENTSET, $ID.address); ! 302: } ! 303: ::= ! 304: { ! 305: $$setdef.address = (char *)0; ! 306: $$setdef.type = (unsigned char)EVENTSET; ! 307: $$setdef.keep = 0; ! 308: } ! 309: setdef ! 310: { ! 311: $event.object = $setdef.object; ! 312: } ! 313: ; ! 314: ! 315: *end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.