Annotation of researchv10no/cmd/dag/parsedag.c, revision 1.1.1.1

1.1       root        1: 
                      2: # line 2 "parsedag.y"
                      3: #include "draw_dag.h"
                      4: #include "dag.h"
                      5: #define MIN_RANK_SEP   4
                      6: 
                      7: static pair_t*         nodelist;
                      8: static DAG_edge_t*     this_edge;
                      9: static boolean         is_ordered = false;
                     10: 
                     11: int                                    Syntax_error;
                     12: DAG_node_t                     Reset_node,Default_node,Proto_node;
                     13: DAG_edge_t                     Reset_edge,Default_edge;
                     14: static boolean         set_pointsize,set_label,set_shape,set_color,set_xsize,set_ysize;
                     15: 
                     16: static void teardown (pair_t *e) {
                     17:        pair_t *f;
                     18:        while (e) {
                     19:                f = e->next;
                     20:                delete e;
                     21:                e = f;
                     22:        }
                     23: }
                     24: 
                     25: static void init_proto() {
                     26:        Proto_node = Default_node;
                     27:        set_pointsize = set_label = set_shape = set_color = set_xsize = set_ysize = false;
                     28: }
                     29: 
                     30: static void apply_proto(DAG_node_t *np) {
                     31:        /* label setting has precedence over size! */
                     32:        if (set_pointsize) np->setpointsize(Proto_node.pointsize);
                     33:        if (set_label) np->setlabel(Proto_node.label.type,Proto_node.label.value);
                     34:        if (set_shape) np->setshape(Proto_node.shape.type,Proto_node.shape.value);
                     35:        if (set_color) np->setcolor(Proto_node.color);
                     36:        if (set_xsize) np->setxsize(Proto_node.xsize);
                     37:        if (set_ysize) np->setysize(Proto_node.ysize);
                     38:        np->autosize();
                     39: }
                     40: 
                     41: static void install_proto() {
                     42:        Proto_node.autosize();
                     43:        for (pair_t* p = nodelist; p; p = p->next)
                     44:                apply_proto(Node[p->node]);
                     45: }
                     46: 
                     47: /* append list1 to list2 */
                     48: static DAG_edge_t* append(DAG_edge_t *list1, DAG_edge_t *list2) {
                     49: if (!list2) panic("null list2");
                     50:        DAG_edge_t *e,*f;
                     51:        e = list2;
                     52:        while (f = e->nextof()) e = f;
                     53:        e->next = (edge_t*) list1;
                     54:        return list2;
                     55: }
                     56: 
                     57: /* create a new set of same rank nodes within the Options struct */
                     58: static int* &newset() {
                     59:        const int hunksize = 16;
                     60:        if (!Options.same_nodes)
                     61:                Options.same_nodes = new int*[hunksize];
                     62:        else if (!(Options.n_same_nodes % hunksize))
                     63:                Options.same_nodes = (int**)realloc((char*)Options.same_nodes,
                     64:                        (Options.n_same_nodes + hunksize + 1)*sizeof(int*));
                     65:        Options.same_nodes[Options.n_same_nodes] = 0;
                     66:        return(Options.same_nodes[Options.n_same_nodes++]);
                     67: }
                     68: 
                     69: /* take the union of same rank nodes */
                     70: overload set_union;
                     71: static void set_union (int* &ptr, pair_t *nlist) {
                     72:        pair_t *e;
                     73:        int olen = 0, nlen = 0;
                     74:        for (e = nlist; e; e = e->next) nlen++;
                     75:        if (!nlen) return;
                     76:        if (ptr) {
                     77:                while (ptr[olen++] >= 0);
                     78:                ptr = (int*)realloc((char*)ptr,(nlen+olen)*sizeof(int));
                     79:        }
                     80:        else ptr = new int[nlen + 1];
                     81: 
                     82:        for (e = nlist; e; e = e->next)
                     83:                ptr[olen++] = e->node;
                     84:        ptr[olen] = -1;
                     85: }
                     86: 
                     87: static void set_union(int* &ptr, DAG_edge_t *elist) {
                     88:        pair_t *p = 0;
                     89:        while (elist) {
                     90:                p = new pair_t(elist->node,p);
                     91:                elist = elist->nextof();
                     92:        }
                     93:        set_union(ptr,p);
                     94:        teardown(p);
                     95: }
                     96: 
                     97: static void make_invis_edge(int fromnode,int tonode) {
                     98:        DAG_edge_t *e = new DAG_edge_t();
                     99:        e->ink = invis_ink;
                    100:        e->node = tonode;
                    101:        e->next = Edge[fromnode];
                    102:        Edge[fromnode] = e;
                    103: }
                    104: 
                    105: static void enter_edgelist(int tailnode, DAG_edge_t* elist) {
                    106:        DAG_edge_t *e;
                    107:        if (is_ordered) {
                    108:                set_union(newset(),elist);
                    109:                for (e = elist; e->nextof(); e = e->nextof())
                    110:                        make_invis_edge(e->node,e->nextof()->node);
                    111:                is_ordered = false;
                    112:        }
                    113:        Edge[tailnode] = append(Edge[tailnode],elist);
                    114: }
                    115: 
                    116: static void enter_backedgelist(int headnode, DAG_edge_t* elist) {
                    117:        DAG_edge_t *e = elist;
                    118:        while (e) {
                    119:                DAG_edge_t *f = e->nextof();
                    120:                e->next = 0;
                    121:                e->flipped = true;
                    122:                int tailnode = e->node;
                    123:                e->node = headnode;
                    124:                Edge[tailnode] = append(Edge[tailnode],e);
                    125:                e = f;
                    126:        }
                    127: }      
                    128: 
                    129: static void enter_pathlist(int tailnode, DAG_edge_t* elist) {
                    130:        DAG_edge_t *e,*f;
                    131:        e = elist;
                    132:        while (e) {
                    133:                f = e;
                    134:                e = e->nextof();
                    135:                f->next = Edge[tailnode];
                    136:                Edge[tailnode] = f;
                    137:                tailnode = f->node;
                    138:        }
                    139:        is_ordered = false;
                    140: }
                    141: 
                    142: static void enter_backpathlist(int headnode, DAG_edge_t *elist) {
                    143:        DAG_edge_t *e = elist;
                    144:        while (e) {
                    145:                DAG_edge_t *f = e->nextof();
                    146:                e->next = 0;
                    147:                e->flipped = true;
                    148:                int tailnode = e->node;
                    149:                e->node = headnode;
                    150:                Edge[tailnode] = append(Edge[tailnode],e);
                    151:                e = f;
                    152:                headnode = tailnode;
                    153:        }
                    154: }
                    155: 
                    156: 
                    157: # line 156 "parsedag.y"
                    158: typedef union  {
                    159:        char            *s;
                    160:        int                     i;
                    161:        pair_t          *p;     // for node lists
                    162:        DAG_edge_t      *e;     // for edge lists
                    163: } YYSTYPE;
                    164: # define AS 257
                    165: # define BACKEDGE 258
                    166: # define BACKPATH 259
                    167: # define COLOR 260
                    168: # define DASHED 261
                    169: # define DOTTED 262
                    170: # define DRAW 263
                    171: # define EDGE 264
                    172: # define EDGES 265
                    173: # define EQUALLY 266
                    174: # define EXACTLY 267
                    175: # define FROM 268
                    176: # define HEIGHT 269
                    177: # define INVIS 270
                    178: # define LABEL 271
                    179: # define MAXIMUM 272
                    180: # define MINIMUM 273
                    181: # define NODES 274
                    182: # define ORDERED 275
                    183: # define PATH 276
                    184: # define POINTSIZE 277
                    185: # define RANK 278
                    186: # define RANKS 279
                    187: # define SAME 280
                    188: # define SEPARATE 281
                    189: # define SOLID 282
                    190: # define TO 283
                    191: # define WEIGHT 284
                    192: # define WIDTH 285
                    193: # define STRING 286
                    194: # define DESC 287
                    195: #define yyclearin yychar = -1
                    196: #define yyerrok yyerrflag = 0
                    197: extern int yychar;
                    198: extern short yyerrflag;
                    199: #ifndef YYMAXDEPTH
                    200: #define YYMAXDEPTH 150
                    201: #endif
                    202: YYSTYPE yylval, yyval;
                    203: # define YYERRCODE 256
                    204: short yyexca[] ={
                    205: -1, 0,
                    206:        0, 4,
                    207:        258, 4,
                    208:        259, 4,
                    209:        263, 4,
                    210:        264, 4,
                    211:        272, 4,
                    212:        273, 4,
                    213:        275, 4,
                    214:        276, 4,
                    215:        280, 4,
                    216:        281, 4,
                    217:        286, 4,
                    218:        59, 4,
                    219:        -2, 0,
                    220: -1, 1,
                    221:        0, -1,
                    222:        -2, 0,
                    223: -1, 36,
                    224:        283, 46,
                    225:        286, 46,
                    226:        59, 46,
                    227:        44, 46,
                    228:        -2, 44,
                    229:        };
                    230: # define YYNPROD 72
                    231: # define YYLAST 282
                    232: short yyact[]={
                    233: 
                    234:   20,  81,  84,  85, 117,  58,  45, 111, 115, 114,
                    235:   72,  86,  79,  73, 108, 107,  58, 104,  80,  45,
                    236:   98,  92,  69,  83,  71,  78,  58,  58, 110,  89,
                    237:   70,  97,  58,  99, 105, 106,  20,  45,  68,  45,
                    238:   31,  96,  95,  35,  24,  39,  21,  56, 109,  88,
                    239:  102, 101,  91,  23,  90,  87,  21,  49,  30,  29,
                    240:   28, 119, 118,  21,   3,  21,  77, 103,  67,  76,
                    241:   36,  66,  33,  15,  50,  34,  10,  22,  27,  25,
                    242:   60,  26,  47,  46,  43,   7,   6,  38,  38,  38,
                    243:   38,   5,   4,  44,  37,   2,   1,  15,  82,  25,
                    244:   25,  25,   0,  48,   0,  57,  53,  54,  55,  32,
                    245:   62,  59,  40,  41,  42,   0,  74,   0,  75,   0,
                    246:    0,   0,   0,   0,  44,  44,  44,   0,   0,   0,
                    247:   94,  93,   0,   0,  57, 100,  57,  57,  57,   0,
                    248:    0,   0,   0, 112, 100,   0, 113,  61, 116,   0,
                    249:   63,  64,  65,   0,   0,   0,   0,   0,   0,   0,
                    250:    0, 112,   0,   0,   0,   0,   0,   0,   0,   0,
                    251:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                    252:    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
                    253:    0,   0,   0,   0,   0,   0,   0,   0,   0,  17,
                    254:   19,   0,   0,   0,   8,  16,   0,   0,  81,  84,
                    255:   85,   0,   0,  13,  12,   0,   9,  18,  86,  79,
                    256:    0,  14,  11,   0,   0,  80,  72,  21,   0,  73,
                    257:   83,  72,  78,   0,  73,  17,  19,   0,  69,   0,
                    258:   71,  16,   0,  69,  35,  71,  70,  21,  21,   0,
                    259:    0,  70,   0,  18,  68,  35,   0,   0,  21,  68,
                    260:    0,  21,   0,  21,  35,  35,  35,  21,  21,  21,
                    261:    0,  35,  51,   0,  21,   0,   0,  52,   0,  21,
                    262:    0,  21 };
                    263: short yypact[]={
                    264: 
                    265: -192,-1000, -59,-1000,-1000,-1000,-1000,-1000,-221,-1000,
                    266: -1000,-1000,-218,-219,-220, -19,-223,-223,-223,-223,
                    267: -1000,-1000, -25,-1000,-1000,-1000, -23,  -2,-230,-230,
                    268: -230,-1000, -12,-1000,-1000,-230,-1000,-240,-1000,-230,
                    269: -240,-240,-240,-247,-1000,-230,-247,-259,-1000,-1000,
                    270: -1000,-231,-237,  -5,  -7, -38,-1000,-1000,-240,-1000,
                    271: -259, -17,-1000, -18, -28, -39, -26,-1000,-235,-236,
                    272: -269,-252,-272,-238,-1000, -31, -52,-1000,-269,-278,
                    273: -269,-282,-1000,-1000,-1000,-1000,-1000,-1000,-205,-1000,
                    274: -1000,-1000,-1000,-1000,-259,-1000,-1000,-1000,-1000,-1000,
                    275: -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,
                    276: -1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000,-1000 };
                    277: short yypgo[]={
                    278: 
                    279:    0,  68,  66,  98,  70,  67,  94, 109,  75,  72,
                    280:   77,  96,  95,  92,  91,  86,  85,  84,  71,  83,
                    281:   82,  69,  81,  76,  80,  78,  74 };
                    282: short yyr1[]={
                    283: 
                    284:    0,  11,  11,  12,  12,  13,  13,  13,  17,  14,
                    285:   19,  14,  20,  14,  10,  10,  10,  18,  18,   1,
                    286:    1,   1,   1,   1,   1,   1,   1,  22,  15,  15,
                    287:   23,  23,  23,  23,  23,  23,  23,   6,   6,   7,
                    288:    7,   7,   9,   9,  24,   8,   8,  21,  21,   2,
                    289:    2,   2,   2,   2,   2,  16,  16,  16,  16,  25,
                    290:   25,  26,  26,  26,  26,  26,   3,   3,   3,   3,
                    291:    4,   5 };
                    292: short yyr2[]={
                    293: 
                    294:    0,   1,   1,   2,   0,   1,   1,   1,   0,   5,
                    295:    0,   5,   0,   5,   2,   3,   1,   1,   2,   2,
                    296:    2,   2,   2,   2,   2,   2,   2,   0,   3,   1,
                    297:    2,   3,   4,   4,   4,   4,   1,   1,   2,   1,
                    298:    2,   3,   1,   2,   0,   3,   1,   1,   2,   2,
                    299:    2,   2,   2,   2,   1,   3,   4,   4,   4,   2,
                    300:    0,   2,   3,   3,   2,   2,   1,   1,   1,   1,
                    301:    1,   1 };
                    302: short yychk[]={
                    303: 
                    304: -1000, -11, -12, 256, -13, -14, -15, -16, 263, 275,
                    305:  -23, 281, 273, 272, 280,  -4, 264, 258, 276, 259,
                    306:   59, 286, -10, 274, 265,  -4, -22, -25, 278, 278,
                    307:  278,  59,  -7,  -9,  -8, 283,  -4,  -6,  -4, 268,
                    308:   -6,  -6,  -6, -17,  -4,  44, -19, -20, -23,  59,
                    309:  -26, 274, 279, -10, -10, -10,  59,  -9,  44,  -8,
                    310:  -24,  -7,  -4,  -7,  -7,  -7, -18,  -1, 285, 269,
                    311:  277, 271, 257, 260,  -4, -18, -21,  -2, 284, 271,
                    312:  277, 260,  -3, 282, 261, 262, 270, 286, 286, 266,
                    313:   59,  59,  59,  -9, -21,  59,  59,  59,  59,  59,
                    314:   -1, 286, 286,  -5, 286, 286, 287, 287, 286, 286,
                    315:   59,  59,  -2,  -5, 287, 286,  -5, 286, 267, 266 };
                    316: short yydef[]={
                    317: 
                    318:   -2,  -2,   1,   2,   3,   5,   6,   7,   0,  27,
                    319:   29,  60,   0,   0,   0,   0,   0,   0,   0,   0,
                    320:   36,  70,   8,  10,  12,  16,   0,   0,   0,   0,
                    321:    0,  30,   0,  39,  42,   0,  -2,   0,  37,   0,
                    322:    0,   0,   0,   0,  14,   0,   0,   0,  28,  55,
                    323:   59,   0,   0,   0,   0,   0,  31,  40,   0,  43,
                    324:    0,   0,  38,   0,   0,   0,   0,  17,   0,   0,
                    325:    0,   0,   0,   0,  15,   0,   0,  47,   0,   0,
                    326:    0,   0,  54,  66,  67,  68,  69,  61,  65,  64,
                    327:   56,  57,  58,  41,  45,  32,  33,  34,  35,   9,
                    328:   18,  19,  20,  21,  71,  22,  23,  24,  25,  26,
                    329:   11,  13,  48,  49,  50,  51,  52,  53,  62,  63 };
                    330: # ifdef YYDEBUG
                    331: # include "y.debug"
                    332: # endif
                    333: 
                    334: # define YYFLAG -1000
                    335: # define YYERROR goto yyerrlab
                    336: # define YYACCEPT return(0)
                    337: # define YYABORT return(1)
                    338: 
                    339: /*     parser for yacc output  */
                    340: 
                    341: #ifdef YYDEBUG
                    342: int yydebug = 0; /* 1 for debugging */
                    343: #endif
                    344: YYSTYPE yyv[YYMAXDEPTH]; /* where the values are stored */
                    345: int yychar = -1; /* current input token number */
                    346: int yynerrs = 0;  /* number of errors */
                    347: short yyerrflag = 0;  /* error recovery flag */
                    348: 
                    349: yyparse()
                    350: {      short yys[YYMAXDEPTH];
                    351:        int yyj, yym;
                    352:        register YYSTYPE *yypvt;
                    353:        register int yystate, yyn;
                    354:        register short *yyps;
                    355:        register YYSTYPE *yypv;
                    356:        register short *yyxi;
                    357: 
                    358:        yystate = 0;
                    359:        yychar = -1;
                    360:        yynerrs = 0;
                    361:        yyerrflag = 0;
                    362:        yyps= &yys[-1];
                    363:        yypv= &yyv[-1];
                    364: 
                    365: yystack:    /* put a state and value onto the stack */
                    366: #ifdef YYDEBUG
                    367:        if(yydebug >= 3)
                    368:                if(yychar < 0 || yytoknames[yychar] == 0)
                    369:                        printf("char %d in %s", yychar, yystates[yystate]);
                    370:                else
                    371:                        printf("%s in %s", yytoknames[yychar], yystates[yystate]);
                    372: #endif
                    373:        if( ++yyps >= &yys[YYMAXDEPTH] ) { 
                    374:                yyerror( "yacc stack overflow" ); 
                    375:                return(1); 
                    376:        }
                    377:        *yyps = yystate;
                    378:        ++yypv;
                    379:        *yypv = yyval;
                    380: yynewstate:
                    381:        yyn = yypact[yystate];
                    382:        if(yyn <= YYFLAG) goto yydefault; /* simple state */
                    383:        if(yychar<0) {
                    384:                yychar = yylex();
                    385: #ifdef YYDEBUG
                    386:                if(yydebug >= 2) {
                    387:                        if(yychar <= 0)
                    388:                                printf("lex EOF\n");
                    389:                        else if(yytoknames[yychar])
                    390:                                printf("lex %s\n", yytoknames[yychar]);
                    391:                        else
                    392:                                printf("lex (%c)\n", yychar);
                    393:                }
                    394: #endif
                    395:                if(yychar < 0)
                    396:                        yychar = 0;
                    397:        }
                    398:        if((yyn += yychar) < 0 || yyn >= YYLAST)
                    399:                goto yydefault;
                    400:        if( yychk[ yyn=yyact[ yyn ] ] == yychar ){ /* valid shift */
                    401:                yychar = -1;
                    402:                yyval = yylval;
                    403:                yystate = yyn;
                    404:                if( yyerrflag > 0 ) --yyerrflag;
                    405:                goto yystack;
                    406:        }
                    407: yydefault:
                    408:        /* default state action */
                    409:        if( (yyn=yydef[yystate]) == -2 ) {
                    410:                if(yychar < 0) {
                    411:                        yychar = yylex();
                    412: #ifdef YYDEBUG
                    413:                        if(yydebug >= 2)
                    414:                                if(yychar < 0)
                    415:                                        printf("lex EOF\n");
                    416:                                else
                    417:                                        printf("lex %s\n", yytoknames[yychar]);
                    418: #endif
                    419:                        if(yychar < 0)
                    420:                                yychar = 0;
                    421:                }
                    422:                /* look through exception table */
                    423:                for(yyxi=yyexca; (*yyxi!= (-1)) || (yyxi[1]!=yystate);
                    424:                        yyxi += 2 ) ; /* VOID */
                    425:                while( *(yyxi+=2) >= 0 ){
                    426:                        if( *yyxi == yychar ) break;
                    427:                }
                    428:                if( (yyn = yyxi[1]) < 0 ) return(0);   /* accept */
                    429:        }
                    430:        if( yyn == 0 ){ /* error */
                    431:                /* error ... attempt to resume parsing */
                    432:                switch( yyerrflag ){
                    433:                case 0:   /* brand new error */
                    434: #ifdef YYDEBUG
                    435:                        yyerror("syntax error\n%s", yystates[yystate]);
                    436:                        if(yytoknames[yychar])
                    437:                                yyerror("saw %s\n", yytoknames[yychar]);
                    438:                        else if(yychar >= ' ' && yychar < '\177')
                    439:                                yyerror("saw `%c'\n", yychar);
                    440:                        else if(yychar == 0)
                    441:                                yyerror("saw EOF\n");
                    442:                        else
                    443:                                yyerror("saw char 0%o\n", yychar);
                    444: #else
                    445:                        yyerror( "syntax error" );
                    446: #endif
                    447: yyerrlab:
                    448:                        ++yynerrs;
                    449:                case 1:
                    450:                case 2: /* incompletely recovered error ... try again */
                    451:                        yyerrflag = 3;
                    452:                        /* find a state where "error" is a legal shift action */
                    453:                        while ( yyps >= yys ) {
                    454:                                yyn = yypact[*yyps] + YYERRCODE;
                    455:                                if( yyn>= 0 && yyn < YYLAST && yychk[yyact[yyn]] == YYERRCODE ){
                    456:                                        yystate = yyact[yyn];  /* simulate a shift of "error" */
                    457:                                        goto yystack;
                    458:                                }
                    459:                                yyn = yypact[*yyps];
                    460:                                /* the current yyps has no shift onn "error", pop stack */
                    461: #ifdef YYDEBUG
                    462:                                if( yydebug ) printf( "error recovery pops state %d, uncovers %d\n", *yyps, yyps[-1] );
                    463: #endif
                    464:                                --yyps;
                    465:                                --yypv;
                    466:                        }
                    467:                        /* there is no state on the stack with an error shift ... abort */
                    468: yyabort:
                    469:                        return(1);
                    470:                case 3:  /* no shift yet; clobber input char */
                    471: #ifdef YYDEBUG
                    472:                        if( yydebug ) {
                    473:                                printf("error recovery discards ");
                    474:                                if(yytoknames[yychar])
                    475:                                        printf("%s\n", yytoknames[yychar]);
                    476:                                else if(yychar >= ' ' && yychar < '\177')
                    477:                                        printf("`%c'\n", yychar);
                    478:                                else if(yychar == 0)
                    479:                                        printf("EOF\n");
                    480:                                else
                    481:                                        printf("char 0%o\n", yychar);
                    482:                        }
                    483: #endif
                    484:                        if( yychar == 0 ) goto yyabort; /* don't discard EOF, quit */
                    485:                        yychar = -1;
                    486:                        goto yynewstate;   /* try again in the same state */
                    487:                }
                    488:        }
                    489:        /* reduction by production yyn */
                    490: #ifdef YYDEBUG
                    491:        if(yydebug) {   char *s;
                    492:                printf("reduce %d in:\n\t", yyn);
                    493:                for(s = yystates[yystate]; *s; s++) {
                    494:                        putchar(*s);
                    495:                        if(*s == '\n' && *(s+1))
                    496:                                putchar('\t');
                    497:                }
                    498:        }
                    499: #endif
                    500:        yyps -= yyr2[yyn];
                    501:        yypvt = yypv;
                    502:        yypv -= yyr2[yyn];
                    503:        yyval = yypv[1];
                    504:        yym=yyn;
                    505:        /* consult goto table to find next state */
                    506:        yyn = yyr1[yyn];
                    507:        yyj = yypgo[yyn] + *yyps + 1;
                    508:        if( yyj>=YYLAST || yychk[ yystate = yyact[yyj] ] != -yyn ) yystate = yyact[yypgo[yyn]];
                    509:        switch(yym){
                    510:                
                    511: case 1:
                    512: # line 171 "parsedag.y"
                    513: {make_drawing();} break;
                    514: case 8:
                    515: # line 184 "parsedag.y"
                    516: {init_proto(); nodelist = yypvt[-0].p;} break;
                    517: case 9:
                    518: # line 185 "parsedag.y"
                    519: {install_proto(); teardown(yypvt[-3].p);} break;
                    520: case 10:
                    521: # line 186 "parsedag.y"
                    522: {init_proto(); nodelist = 0;} break;
                    523: case 11:
                    524: # line 187 "parsedag.y"
                    525: {apply_proto(&Default_node);} break;
                    526: case 12:
                    527: # line 188 "parsedag.y"
                    528: {this_edge = &Default_edge;} break;
                    529: case 14:
                    530: # line 192 "parsedag.y"
                    531: {yyval.p = new pair_t(yypvt[-0].i,yypvt[-1].p);} break;
                    532: case 15:
                    533: # line 194 "parsedag.y"
                    534: {yyval.p = new pair_t(yypvt[-0].i,yypvt[-2].p);} break;
                    535: case 16:
                    536: # line 196 "parsedag.y"
                    537: {yyval.p = new pair_t(yypvt[-0].i,(pair_t*)0);} break;
                    538: case 19:
                    539: # line 205 "parsedag.y"
                    540: {
                    541:                                                Proto_node.setxsize((int)(Resolution*atof(yypvt[-0].s)));
                    542:                                                set_xsize = true;
                    543:                                        } break;
                    544: case 20:
                    545: # line 211 "parsedag.y"
                    546: {
                    547:                                                Proto_node.setysize((int)(Resolution*atof(yypvt[-0].s)));
                    548:                                                set_ysize = true;
                    549:                                        } break;
                    550: case 21:
                    551: # line 216 "parsedag.y"
                    552: {
                    553:                                                Proto_node.setpointsize(yypvt[-0].i);
                    554:                                                set_pointsize = true;
                    555:                                        } break;
                    556: case 22:
                    557: # line 221 "parsedag.y"
                    558: {
                    559:                                                Proto_node.setlabel(STRING,yypvt[-0].s);
                    560:                                                set_label = true;
                    561:                                        } break;
                    562: case 23:
                    563: # line 226 "parsedag.y"
                    564: {
                    565:                                                Proto_node.setlabel(DESC,yypvt[-0].s);
                    566:                                                set_label = true;
                    567:                                        } break;
                    568: case 24:
                    569: # line 231 "parsedag.y"
                    570: {
                    571:                                                Proto_node.setshape(DESC,yypvt[-0].s);
                    572:                                                set_shape = true;
                    573:                                        } break;
                    574: case 25:
                    575: # line 236 "parsedag.y"
                    576: {
                    577:                                                Proto_node.setshape(STRING,yypvt[-0].s);
                    578:                                                set_shape = true;
                    579:                                        } break;
                    580: case 26:
                    581: # line 241 "parsedag.y"
                    582: {
                    583:                                                Proto_node.setcolor(yypvt[-0].s);
                    584:                                                set_color = true;
                    585:                                        } break;
                    586: case 27:
                    587: # line 247 "parsedag.y"
                    588: {is_ordered = true;} break;
                    589: case 31:
                    590: # line 253 "parsedag.y"
                    591: {enter_edgelist(yypvt[-2].i,yypvt[-1].e);} break;
                    592: case 32:
                    593: # line 255 "parsedag.y"
                    594: {enter_edgelist(yypvt[-2].i,yypvt[-1].e);} break;
                    595: case 33:
                    596: # line 257 "parsedag.y"
                    597: {enter_backedgelist(yypvt[-2].i,yypvt[-1].e);} break;
                    598: case 34:
                    599: # line 259 "parsedag.y"
                    600: {enter_pathlist(yypvt[-2].i,yypvt[-1].e);} break;
                    601: case 35:
                    602: # line 261 "parsedag.y"
                    603: {enter_backpathlist(yypvt[-2].i,yypvt[-1].e);} break;
                    604: case 38:
                    605: # line 267 "parsedag.y"
                    606: {yyval.i = yypvt[-0].i;} break;
                    607: case 40:
                    608: # line 271 "parsedag.y"
                    609: {yyval.e = append(yypvt[-0].e,yypvt[-1].e);} break;
                    610: case 41:
                    611: # line 273 "parsedag.y"
                    612: {yyval.e = append(yypvt[-0].e,yypvt[-2].e);} break;
                    613: case 43:
                    614: # line 278 "parsedag.y"
                    615: {yyval.e = yypvt[-0].e;} break;
                    616: case 44:
                    617: # line 282 "parsedag.y"
                    618: {
                    619:                                                this_edge = new DAG_edge_t();
                    620:                                                *this_edge = Default_edge;
                    621:                                                this_edge->node = yypvt[-0].i;
                    622:                                        } break;
                    623: case 45:
                    624: # line 288 "parsedag.y"
                    625: {yyval.e = this_edge;} break;
                    626: case 46:
                    627: # line 290 "parsedag.y"
                    628: {
                    629:                                                this_edge = new DAG_edge_t();
                    630:                                                *this_edge = Default_edge;
                    631:                                                this_edge->node = yypvt[-0].i;
                    632:                                                yyval.e = this_edge;
                    633:                                        } break;
                    634: case 49:
                    635: # line 303 "parsedag.y"
                    636: {this_edge->setweight(yypvt[-0].i);} break;
                    637: case 50:
                    638: # line 305 "parsedag.y"
                    639: {this_edge->setlabel(DESC,newstring(yypvt[-0].s));} break;
                    640: case 51:
                    641: # line 307 "parsedag.y"
                    642: {this_edge->setlabel(STRING,newstring(yypvt[-0].s));} break;
                    643: case 52:
                    644: # line 309 "parsedag.y"
                    645: {this_edge->setpointsize(yypvt[-0].i);} break;
                    646: case 53:
                    647: # line 311 "parsedag.y"
                    648: {this_edge->setcolor(newstring(yypvt[-0].s));} break;
                    649: case 54:
                    650: # line 313 "parsedag.y"
                    651: {this_edge->setink(yypvt[-0].i);} break;
                    652: case 56:
                    653: # line 318 "parsedag.y"
                    654: {set_union(Options.source_nodes,yypvt[-1].p);teardown(yypvt[-1].p);} break;
                    655: case 57:
                    656: # line 320 "parsedag.y"
                    657: {set_union(Options.sink_nodes,yypvt[-1].p);teardown(yypvt[-1].p);} break;
                    658: case 58:
                    659: # line 322 "parsedag.y"
                    660: {set_union(newset(),yypvt[-1].p);teardown(yypvt[-1].p);} break;
                    661: case 61:
                    662: # line 330 "parsedag.y"
                    663: {
                    664:                                                Options.nodesep = max(1,round(Resolution*atof(yypvt[-0].s)));
                    665:                                        } break;
                    666: case 62:
                    667: # line 334 "parsedag.y"
                    668: {
                    669:                                                Options.ranksep = max(MIN_RANK_SEP,round(Resolution*atof(yypvt[-1].s)));
                    670:                                                Options.rankadjust = 2;
                    671:                                        } break;
                    672: case 63:
                    673: # line 340 "parsedag.y"
                    674: {
                    675:                                                Options.ranksep = max(MIN_RANK_SEP,round(Resolution*atof(yypvt[-1].s)));
                    676:                                                Options.rankadjust = 1;
                    677:                                        } break;
                    678: case 64:
                    679: # line 345 "parsedag.y"
                    680: {
                    681:                                                Options.rankadjust = 1;
                    682:                                        } break;
                    683: case 65:
                    684: # line 349 "parsedag.y"
                    685: {
                    686:                                                Options.ranksep = max(MIN_RANK_SEP,round(Resolution*atof(yypvt[-0].s)));
                    687:                                        } break;
                    688: case 66:
                    689: # line 355 "parsedag.y"
                    690: {yyval.i = solid_ink;} break;
                    691: case 67:
                    692: # line 357 "parsedag.y"
                    693: {yyval.i = dashed_ink;} break;
                    694: case 68:
                    695: # line 359 "parsedag.y"
                    696: {yyval.i = dotted_ink;} break;
                    697: case 69:
                    698: # line 361 "parsedag.y"
                    699: {yyval.i = invis_ink;} break;
                    700: case 70:
                    701: # line 365 "parsedag.y"
                    702: {yyval.i = node_lookup(yypvt[-0].s);} break;
                    703: case 71:
                    704: # line 369 "parsedag.y"
                    705: {yyval.i = atoi(yypvt[-0].s);} break;
                    706:        }
                    707:        goto yystack;  /* stack new state and value */
                    708: }

unix.superglobalmegacorp.com

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