Annotation of Net2/netiso/xebec/xebec.bnf, revision 1.1.1.2

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.