|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.