Annotation of 42BSD/etc/htable/parse.c, revision 1.1.1.1

1.1       root        1: 
                      2: # line 2 "parse.y"
                      3: #ifndef lint
                      4: static char sccsid[] = "@(#)parse.y    4.2 (Berkeley) 10/21/82";
                      5: #endif
                      6: 
                      7: #include "htable.h"
                      8: 
                      9: # line 9 "parse.y"
                     10: typedef union  {
                     11:        int     number;
                     12:        struct  addr *addrlist;
                     13:        struct  name *namelist;
                     14: } YYSTYPE;
                     15: # define END 257
                     16: # define NUMBER 258
                     17: # define KEYWORD 259
                     18: # define NAME 260
                     19: #define yyclearin yychar = -1
                     20: #define yyerrok yyerrflag = 0
                     21: extern int yychar;
                     22: extern short yyerrflag;
                     23: #ifndef YYMAXDEPTH
                     24: #define YYMAXDEPTH 150
                     25: #endif
                     26: YYSTYPE yylval, yyval;
                     27: # define YYERRCODE 256
                     28: 
                     29: # line 120 "parse.y"
                     30: 
                     31: 
                     32: #include <stdio.h>
                     33: 
                     34: extern int yylineno;
                     35: 
                     36: yyerror(msg)
                     37:        char *msg;
                     38: {
                     39:        fprintf(stderr, "\"%s\", line %d: %s\n", infile, yylineno, msg);
                     40: }
                     41: short yyexca[] ={
                     42: -1, 1,
                     43:        0, -1,
                     44:        -2, 0,
                     45:        };
                     46: # define YYNPROD 22
                     47: # define YYLAST 203
                     48: short yyact[]={
                     49: 
                     50:   35,  29,  22,  38,  31,  24,   4,   5,  16,   3,
                     51:   32,  26,  18,  11,  42,  39,   8,  40,  33,  27,
                     52:   19,  12,   7,  28,  21,  14,  41,  20,  13,  36,
                     53:   15,   9,   2,  10,   6,  37,  30,  23,   1,   0,
                     54:    0,   0,   0,   0,   0,  17,   0,   0,   0,   0,
                     55:    0,  25,   0,   0,   0,   0,   0,   0,   0,   0,
                     56:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                     57:    0,  43,   0,   0,   0,   0,   0,   0,   0,   0,
                     58:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                     59:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                     60:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                     61:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                     62:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                     63:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                     64:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                     65:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                     66:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                     67:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                     68:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                     69:    0,   0,   0,   0,   0,   0,   0,   0,   0,  34,
                     70:    0,   0,  38 };
                     71: short yypact[]={
                     72: 
                     73: -250,-250,-1000, -36,-241,-1000,-1000,-245,-1000, -37,
                     74:  -16, -21,-252,-245,-246, -38, -17,-1000, -22,-255,
                     75: -252,-247,-1000, -39,-1000,-1000, -23,-256,-248,-1000,
                     76:  -40,-1000,-1000, -58,-1000,-242, -41, -18,-1000,-1000,
                     77: -243,-257,-1000,-1000 };
                     78: short yypgo[]={
                     79: 
                     80:    0,  38,  30,  37,  36,  29,  35,  31,  33,  32 };
                     81: short yyr1[]={
                     82: 
                     83:    0,   1,   1,   9,   9,   9,   9,   9,   9,   9,
                     84:    7,   7,   8,   2,   2,   3,   3,   4,   4,   5,
                     85:    5,   6 };
                     86: short yyr2[]={
                     87: 
                     88:    0,   1,   2,   7,   9,  11,  12,  13,   2,   1,
                     89:    1,   3,   7,   1,   3,   0,   1,   0,   1,   1,
                     90:    3,   1 };
                     91: short yychk[]={
                     92: 
                     93: -1000,  -1,  -9, 259, 256, 257,  -9,  58, 257,  -7,
                     94:   -8, 258,  58,  44,  46,  -2, 260,  -7, 258,  58,
                     95:   44,  46, 257,  -3, 260,  -2, 258,  58,  46, 257,
                     96:   -4, 260, 258,  58, 257,  58,  -5,  -6, 260, 257,
                     97:   58,  44, 257,  -5 };
                     98: short yydef[]={
                     99: 
                    100:    0,  -2,   1,   0,   0,   9,   2,   0,   8,   0,
                    101:   10,   0,   0,   0,   0,   0,  13,  11,   0,  15,
                    102:    0,   0,   3,   0,  16,  14,   0,  17,   0,   4,
                    103:    0,  18,  12,   0,   5,   0,   0,  19,  21,   6,
                    104:    0,   0,   7,  20 };
                    105: #ifndef lint
                    106: static char yaccpar_sccsid[] = "@(#)yaccpar    4.1     (Berkeley)      2/11/83";
                    107: #endif not lint
                    108: 
                    109: #
                    110: # define YYFLAG -1000
                    111: # define YYERROR goto yyerrlab
                    112: # define YYACCEPT return(0)
                    113: # define YYABORT return(1)
                    114: 
                    115: /*     parser for yacc output  */
                    116: 
                    117: #ifdef YYDEBUG
                    118: int yydebug = 0; /* 1 for debugging */
                    119: #endif
                    120: YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
                    121: int yychar = -1; /* current input token number */
                    122: int yynerrs = 0;  /* number of errors */
                    123: short yyerrflag = 0;  /* error recovery flag */
                    124: 
                    125: yyparse() {
                    126: 
                    127:        short yys[YYMAXDEPTH];
                    128:        short yyj, yym;
                    129:        register YYSTYPE *yypvt;
                    130:        register short yystate, *yyps, yyn;
                    131:        register YYSTYPE *yypv;
                    132:        register short *yyxi;
                    133: 
                    134:        yystate = 0;
                    135:        yychar = -1;
                    136:        yynerrs = 0;
                    137:        yyerrflag = 0;
                    138:        yyps= &yys[-1];
                    139:        yypv= &yyv[-1];
                    140: 
                    141:  yystack:    /* put a state and value onto the stack */
                    142: 
                    143: #ifdef YYDEBUG
                    144:        if( yydebug  ) printf( "state %d, char 0%o\n", yystate, yychar );
                    145: #endif
                    146:                if( ++yyps> &yys[YYMAXDEPTH] ) { yyerror( "yacc stack overflow" ); return(1); }
                    147:                *yyps = yystate;
                    148:                ++yypv;
                    149:                *yypv = yyval;
                    150: 
                    151:  yynewstate:
                    152: 
                    153:        yyn = yypact[yystate];
                    154: 
                    155:        if( yyn<= YYFLAG ) goto yydefault; /* simple state */
                    156: 
                    157:        if( yychar<0 ) if( (yychar=yylex())<0 ) yychar=0;
                    158:        if( (yyn += yychar)<0 || yyn >= YYLAST ) goto yydefault;
                    159: 
                    160:        if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
                    161:                yychar = -1;
                    162:                yyval = yylval;
                    163:                yystate = yyn;
                    164:                if( yyerrflag > 0 ) --yyerrflag;
                    165:                goto yystack;
                    166:                }
                    167: 
                    168:  yydefault:
                    169:        /* default state action */
                    170: 
                    171:        if( (yyn=yydef[yystate]) == -2 ) {
                    172:                if( yychar<0 ) if( (yychar=yylex())<0 ) yychar = 0;
                    173:                /* look through exception table */
                    174: 
                    175:                for( yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate) ; yyxi += 2 ) ; /* VOID */
                    176: 
                    177:                while( *(yyxi+=2) >= 0 ){
                    178:                        if( *yyxi == yychar ) break;
                    179:                        }
                    180:                if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
                    181:                }
                    182: 
                    183:        if( yyn == 0 ){ /* error */
                    184:                /* error ... attempt to resume parsing */
                    185: 
                    186:                switch( yyerrflag ){
                    187: 
                    188:                case 0:   /* brand new error */
                    189: 
                    190:                        yyerror( "syntax error" );
                    191:                yyerrlab:
                    192:                        ++yynerrs;
                    193: 
                    194:                case 1:
                    195:                case 2: /* incompletely recovered error ... try again */
                    196: 
                    197:                        yyerrflag = 3;
                    198: 
                    199:                        /* find a state where "error" is a legal shift action */
                    200: 
                    201:                        while ( yyps >= yys ) {
                    202:                           yyn = yypact[*yyps] + YYERRCODE;
                    203:                           if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
                    204:                              yystate = yyact[yyn];  /* simulate a shift of "error" */
                    205:                              goto yystack;
                    206:                              }
                    207:                           yyn = yypact[*yyps];
                    208: 
                    209:                           /* the current yyps has no shift onn "error", pop stack */
                    210: 
                    211: #ifdef YYDEBUG
                    212:                           if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
                    213: #endif
                    214:                           --yyps;
                    215:                           --yypv;
                    216:                           }
                    217: 
                    218:                        /* there is no state on the stack with an error shift ... abort */
                    219: 
                    220:        yyabort:
                    221:                        return(1);
                    222: 
                    223: 
                    224:                case 3:  /* no shift yet; clobber input char */
                    225: 
                    226: #ifdef YYDEBUG
                    227:                        if( yydebug ) printf( "error recovery discards char %d\n", yychar );
                    228: #endif
                    229: 
                    230:                        if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
                    231:                        yychar = -1;
                    232:                        goto yynewstate;   /* try again in the same state */
                    233: 
                    234:                        }
                    235: 
                    236:                }
                    237: 
                    238:        /* reduction by production yyn */
                    239: 
                    240: #ifdef YYDEBUG
                    241:                if( yydebug ) printf("reduce %d\n",yyn);
                    242: #endif
                    243:                yyps -= yyr2[yyn];
                    244:                yypvt = yypv;
                    245:                yypv -= yyr2[yyn];
                    246:                yyval = yypv[1];
                    247:                yym=yyn;
                    248:                        /* consult goto table to find next state */
                    249:                yyn = yyr1[yyn];
                    250:                yyj = yypgo[yyn] + *yyps + 1;
                    251:                if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
                    252:                switch(yym){
                    253:                        
                    254: case 3:
                    255: # line 28 "parse.y"
                    256:  {
                    257:                do_entry(yypvt[-6].number, yypvt[-4].addrlist, yypvt[-2].namelist, NONAME, NONAME, NONAME);
                    258:        } break;
                    259: case 4:
                    260: # line 32 "parse.y"
                    261:  {
                    262:                do_entry(yypvt[-8].number, yypvt[-6].addrlist, yypvt[-4].namelist, yypvt[-2].namelist, NONAME, NONAME);
                    263:        } break;
                    264: case 5:
                    265: # line 36 "parse.y"
                    266:  {
                    267:                do_entry(yypvt[-10].number, yypvt[-8].addrlist, yypvt[-6].namelist, yypvt[-4].namelist, yypvt[-2].namelist, NONAME);
                    268:        } break;
                    269: case 6:
                    270: # line 40 "parse.y"
                    271:  {
                    272:                do_entry(yypvt[-11].number, yypvt[-9].addrlist, yypvt[-7].namelist, yypvt[-5].namelist, yypvt[-3].namelist, NONAME);
                    273:        } break;
                    274: case 7:
                    275: # line 44 "parse.y"
                    276:  {
                    277:                do_entry(yypvt[-12].number, yypvt[-10].addrlist, yypvt[-8].namelist, yypvt[-6].namelist, yypvt[-4].namelist, yypvt[-2].namelist);
                    278:        } break;
                    279: case 10:
                    280: # line 52 "parse.y"
                    281:  {
                    282:                yyval.addrlist = yypvt[-0].addrlist;
                    283:        } break;
                    284: case 11:
                    285: # line 56 "parse.y"
                    286:  {
                    287:                yypvt[-2].addrlist->addr_link = yypvt[-0].addrlist;
                    288:                yyval.addrlist = yypvt[-2].addrlist;
                    289:        } break;
                    290: case 12:
                    291: # line 63 "parse.y"
                    292:  {
                    293:                char *a;
                    294: 
                    295:                yyval.addrlist = (struct addr *)malloc(sizeof (struct addr));
                    296:                a = (char *)&(yyval.addrlist->addr_val);
                    297:                a[0] = yypvt[-6].number; a[1] = yypvt[-4].number; a[2] = yypvt[-2].number; a[3] = yypvt[-0].number;
                    298:                yyval.addrlist->addr_link = NOADDR;
                    299:        } break;
                    300: case 13:
                    301: # line 74 "parse.y"
                    302:  {
                    303:                yyval.namelist = yypvt[-0].namelist;
                    304:        } break;
                    305: case 14:
                    306: # line 78 "parse.y"
                    307:  {
                    308:                yypvt[-2].namelist->name_link = yypvt[-0].namelist;
                    309:                yyval.namelist = yypvt[-2].namelist;
                    310:        } break;
                    311: case 15:
                    312: # line 85 "parse.y"
                    313:  {
                    314:                yyval.namelist = NONAME;
                    315:        } break;
                    316: case 16:
                    317: # line 89 "parse.y"
                    318:  {
                    319:                yyval.namelist = yypvt[-0].namelist;
                    320:        } break;
                    321: case 17:
                    322: # line 95 "parse.y"
                    323:  {
                    324:                yyval.namelist = NONAME;
                    325:        } break;
                    326: case 18:
                    327: # line 99 "parse.y"
                    328:  {
                    329:                yyval.namelist = yypvt[-0].namelist;
                    330:        } break;
                    331: case 19:
                    332: # line 105 "parse.y"
                    333:  {
                    334:                yyval.namelist = yypvt[-0].namelist;
                    335:        } break;
                    336: case 20:
                    337: # line 109 "parse.y"
                    338:  {
                    339:                yypvt[-2].namelist->name_link = yypvt[-0].namelist;
                    340:                yyval.namelist = yypvt[-2].namelist;
                    341:        } break;
                    342: case 21:
                    343: # line 116 "parse.y"
                    344:  {
                    345:                yyval.namelist = yypvt[-0].namelist;
                    346:        } break;
                    347:                }
                    348:                goto yystack;  /* stack new state and value */
                    349: 
                    350:        }

unix.superglobalmegacorp.com

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