|
Graphviz
2.31.20130618.0446
|
00001 /* A Bison parser, made by GNU Bison 2.5. */ 00002 00003 /* Bison implementation for Yacc-like parsers in C 00004 00005 Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc. 00006 00007 This program is free software: you can redistribute it and/or modify 00008 it under the terms of the GNU General Public License as published by 00009 the Free Software Foundation, either version 3 of the License, or 00010 (at your option) any later version. 00011 00012 This program is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 GNU General Public License for more details. 00016 00017 You should have received a copy of the GNU General Public License 00018 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 00019 00020 /* As a special exception, you may create a larger work that contains 00021 part or all of the Bison parser skeleton and distribute that work 00022 under terms of your choice, so long as that work isn't itself a 00023 parser generator using the skeleton or a modified version thereof 00024 as a parser skeleton. Alternatively, if you modify or redistribute 00025 the parser skeleton itself, you may (at your option) remove this 00026 special exception, which will cause the skeleton and the resulting 00027 Bison output files to be licensed under the GNU General Public 00028 License without this special exception. 00029 00030 This special exception was added by the Free Software Foundation in 00031 version 2.2 of Bison. */ 00032 00033 /* C LALR(1) parser skeleton written by Richard Stallman, by 00034 simplifying the original so-called "semantic" parser. */ 00035 00036 /* All symbols defined below should begin with yy or YY, to avoid 00037 infringing on user name space. This should be done even for local 00038 variables, as they might otherwise be expanded by user macros. 00039 There are some unavoidable exceptions within include files to 00040 define necessary library symbols; they are noted "INFRINGES ON 00041 USER NAME SPACE" below. */ 00042 00043 /* Identify Bison output. */ 00044 #define YYBISON 1 00045 00046 /* Bison version. */ 00047 #define YYBISON_VERSION "2.5" 00048 00049 /* Skeleton name. */ 00050 #define YYSKELETON_NAME "yacc.c" 00051 00052 /* Pure parsers. */ 00053 #define YYPURE 0 00054 00055 /* Push parsers. */ 00056 #define YYPUSH 0 00057 00058 /* Pull parsers. */ 00059 #define YYPULL 1 00060 00061 /* Using locations. */ 00062 #define YYLSP_NEEDED 0 00063 00064 00065 00066 /* Copy the first part of user declarations. */ 00067 00068 /* Line 268 of yacc.c */ 00069 #line 14 "../../lib/graph/parser.y" 00070 00071 00072 #include "libgraph.h" 00073 00074 #ifdef DMALLOC 00075 #include "dmalloc.h" 00076 #endif 00077 00078 static char *Port; 00079 static char In_decl,In_edge_stmt; 00080 static int Current_class,Agraph_type; 00081 static Agsym_t *headsubsym; 00082 static Agsym_t *tailsubsym; 00083 static Agraph_t *G; 00084 static Agnode_t *N; 00085 static Agedge_t *E; 00086 static objstack_t *SP; 00087 #define GSTACK_SIZE 64 00088 static Agraph_t *Gstack[GSTACK_SIZE]; 00089 static int GSP; 00090 00091 static void subgraph_warn (void) 00092 { 00093 agerr (AGWARN, "The use of \"subgraph %s\", line %d, without a body is deprecated.\n", 00094 G->name, aglinenumber()); 00095 agerr (AGPREV, "This may cause unexpected behavior or crash the program.\n"); 00096 agerr (AGPREV, "Please use a single definition of the subgraph within the context of its parent graph \"%s\"\n", Gstack[GSP-2]->name); 00097 } 00098 00099 static int push_subg(Agraph_t *g) 00100 { 00101 if (GSP >= GSTACK_SIZE) { 00102 agerr (AGERR, "Gstack overflow in graph parser\n"); return(1); 00103 } 00104 G = Gstack[GSP++] = g; 00105 return 0; 00106 } 00107 00108 static Agraph_t *pop_subg(void) 00109 { 00110 Agraph_t *g; 00111 if (GSP == 0) { 00112 agerr (AGERR, "Gstack underflow in graph parser\n"); return(NULL); 00113 } 00114 g = Gstack[--GSP]; /* graph being popped off */ 00115 if (GSP > 0) G = Gstack[GSP - 1]; /* current graph */ 00116 else G = 0; 00117 return g; 00118 } 00119 00120 static objport_t pop_gobj(void) 00121 { 00122 objport_t rv; 00123 rv.obj = pop_subg(); 00124 rv.port = NULL; 00125 return rv; 00126 } 00127 00128 static void anonname(char* buf) 00129 { 00130 static int anon_id = 0; 00131 00132 sprintf(buf,"_anonymous_%d",anon_id++); 00133 } 00134 00135 static int begin_graph(char *name) 00136 { 00137 Agraph_t *g; 00138 char buf[SMALLBUF]; 00139 00140 if (!name) { 00141 anonname(buf); 00142 name = buf; 00143 } 00144 g = AG.parsed_g = agopen(name,Agraph_type); 00145 Current_class = TAG_GRAPH; 00146 headsubsym = tailsubsym = NULL; 00147 if (push_subg(g)) return 1; 00148 In_decl = TRUE; 00149 return 0; 00150 } 00151 00152 static Agraph_t* end_graph(void) 00153 { 00154 return (pop_subg()); 00155 } 00156 00157 static Agnode_t *bind_node(char *name) 00158 { 00159 Agnode_t *n = agnode(G,name); 00160 In_decl = FALSE; 00161 return n; 00162 } 00163 00164 static int anonsubg(void) 00165 { 00166 char buf[SMALLBUF]; 00167 Agraph_t *subg; 00168 00169 In_decl = FALSE; 00170 anonname(buf); 00171 subg = agsubg(G,buf); 00172 if (push_subg(subg)) return 1; 00173 else return 0; 00174 } 00175 00176 #if 0 /* NOT USED */ 00177 static int isanonsubg(Agraph_t *g) 00178 { 00179 return (strncmp("_anonymous_",g->name,11) == 0); 00180 } 00181 #endif 00182 00183 static void begin_edgestmt(objport_t objp) 00184 { 00185 struct objstack_t *new_sp; 00186 00187 new_sp = NEW(objstack_t); 00188 new_sp->link = SP; 00189 SP = new_sp; 00190 SP->list = SP->last = NEW(objlist_t); 00191 SP->list->data = objp; 00192 SP->list->link = NULL; 00193 SP->in_edge_stmt = In_edge_stmt; 00194 SP->subg = G; 00195 agpushproto(G); 00196 In_edge_stmt = TRUE; 00197 } 00198 00199 static void mid_edgestmt(objport_t objp) 00200 { 00201 SP->last->link = NEW(objlist_t); 00202 SP->last = SP->last->link; 00203 SP->last->data = objp; 00204 SP->last->link = NULL; 00205 } 00206 00207 static int end_edgestmt(void) 00208 { 00209 objstack_t *old_SP; 00210 objlist_t *tailptr,*headptr,*freeptr; 00211 Agraph_t *t_graph,*h_graph; 00212 Agnode_t *t_node,*h_node,*t_first,*h_first; 00213 Agedge_t *e; 00214 char *tport,*hport; 00215 00216 for (tailptr = SP->list; tailptr->link; tailptr = tailptr->link) { 00217 headptr = tailptr->link; 00218 tport = tailptr->data.port; 00219 hport = headptr->data.port; 00220 if (TAG_OF(tailptr->data.obj) == TAG_NODE) { 00221 t_graph = NULL; 00222 t_first = (Agnode_t*)(tailptr->data.obj); 00223 } 00224 else { 00225 t_graph = (Agraph_t*)(tailptr->data.obj); 00226 t_first = agfstnode(t_graph); 00227 } 00228 if (TAG_OF(headptr->data.obj) == TAG_NODE) { 00229 h_graph = NULL; 00230 h_first = (Agnode_t*)(headptr->data.obj); 00231 } 00232 else { 00233 h_graph = (Agraph_t*)(headptr->data.obj); 00234 h_first = agfstnode(h_graph); 00235 } 00236 00237 for (t_node = t_first; t_node; t_node = t_graph ? 00238 agnxtnode(t_graph,t_node) : NULL) { 00239 for (h_node = h_first; h_node; h_node = h_graph ? 00240 agnxtnode(h_graph,h_node) : NULL ) { 00241 e = agedge(G,t_node,h_node); 00242 if (e) { 00243 char *tp = tport; 00244 char *hp = hport; 00245 if ((e->tail != e->head) && (e->head == t_node)) { 00246 /* could happen with an undirected edge */ 00247 char *temp; 00248 temp = tp; tp = hp; hp = temp; 00249 } 00250 if (tp && tp[0]) { 00251 agxset(e,TAILX,tp); 00252 agstrfree(tp); 00253 } 00254 if (hp && hp[0]) { 00255 agxset(e,HEADX,hp); 00256 agstrfree(hp); 00257 } 00258 } 00259 } 00260 } 00261 } 00262 tailptr = SP->list; 00263 while (tailptr) { 00264 freeptr = tailptr; 00265 tailptr = tailptr->link; 00266 if (TAG_OF(freeptr->data.obj) == TAG_NODE) 00267 free(freeptr); 00268 } 00269 if (G != SP->subg) return 1; 00270 agpopproto(G); 00271 In_edge_stmt = SP->in_edge_stmt; 00272 old_SP = SP; 00273 SP = SP->link; 00274 In_decl = FALSE; 00275 free(old_SP); 00276 Current_class = TAG_GRAPH; 00277 return 0; 00278 } 00279 00280 #if 0 /* NOT USED */ 00281 static Agraph_t *parent_of(Agraph_t *g) 00282 { 00283 Agraph_t *rv; 00284 rv = agusergraph(agfstin(g->meta_node->graph,g->meta_node)->tail); 00285 return rv; 00286 } 00287 #endif 00288 00289 static void attr_set(char *name, char *value) 00290 { 00291 Agsym_t *ap = NULL; 00292 char *defval = ""; 00293 00294 if (In_decl && (G->root == G)) defval = value; 00295 switch (Current_class) { 00296 case TAG_NODE: 00297 ap = agfindattr(G->proto->n,name); 00298 if (ap == NULL) 00299 ap = agnodeattr(AG.parsed_g,name,defval); 00300 else if (ap->fixed && In_decl) 00301 return; 00302 agxset(N,ap->index,value); 00303 break; 00304 case TAG_EDGE: 00305 ap = agfindattr(G->proto->e,name); 00306 if (ap == NULL) 00307 ap = agedgeattr(AG.parsed_g,name,defval); 00308 else if (ap->fixed && In_decl && (G->root == G)) 00309 return; 00310 agxset(E,ap->index,value); 00311 break; 00312 case 0: /* default */ 00313 case TAG_GRAPH: 00314 ap = agfindattr(G,name); 00315 if (ap == NULL) 00316 ap = agraphattr(AG.parsed_g,name,defval); 00317 else if (ap->fixed && In_decl) 00318 return; 00319 agxset(G,ap->index,value); 00320 break; 00321 } 00322 } 00323 00324 /* concat: 00325 */ 00326 static char* 00327 concat (char* s1, char* s2) 00328 { 00329 char* s; 00330 char buf[BUFSIZ]; 00331 char* sym; 00332 int len = strlen(s1) + strlen(s2) + 1; 00333 00334 if (len <= BUFSIZ) sym = buf; 00335 else sym = (char*)malloc(len); 00336 strcpy(sym,s1); 00337 strcat(sym,s2); 00338 s = agstrdup (sym); 00339 if (sym != buf) free (sym); 00340 return s; 00341 } 00342 00343 /* concat3: 00344 */ 00345 static char* 00346 concat3 (char* s1, char* s2, char*s3) 00347 { 00348 char* s; 00349 char buf[BUFSIZ]; 00350 char* sym; 00351 int len = strlen(s1) + strlen(s2) + strlen(s3) + 1; 00352 00353 if (len <= BUFSIZ) sym = buf; 00354 else sym = (char*)malloc(len); 00355 strcpy(sym,s1); 00356 strcat(sym,s2); 00357 strcat(sym,s3); 00358 s = agstrdup (sym); 00359 if (sym != buf) free (sym); 00360 return s; 00361 } 00362 00363 00364 00365 /* Line 268 of yacc.c */ 00366 #line 367 "y.tab.c" 00367 00368 /* Enabling traces. */ 00369 #ifndef YYDEBUG 00370 # define YYDEBUG 0 00371 #endif 00372 00373 /* Enabling verbose error messages. */ 00374 #ifdef YYERROR_VERBOSE 00375 # undef YYERROR_VERBOSE 00376 # define YYERROR_VERBOSE 1 00377 #else 00378 # define YYERROR_VERBOSE 0 00379 #endif 00380 00381 /* Enabling the token table. */ 00382 #ifndef YYTOKEN_TABLE 00383 # define YYTOKEN_TABLE 0 00384 #endif 00385 00386 00387 /* Tokens. */ 00388 #ifndef YYTOKENTYPE 00389 # define YYTOKENTYPE 00390 /* Put the tokens into the symbol table, so that GDB and other debuggers 00391 know about them. */ 00392 enum yytokentype { 00393 T_graph = 258, 00394 T_digraph = 259, 00395 T_strict = 260, 00396 T_node = 261, 00397 T_edge = 262, 00398 T_edgeop = 263, 00399 T_symbol = 264, 00400 T_qsymbol = 265, 00401 T_subgraph = 266 00402 }; 00403 #endif 00404 /* Tokens. */ 00405 #define T_graph 258 00406 #define T_digraph 259 00407 #define T_strict 260 00408 #define T_node 261 00409 #define T_edge 262 00410 #define T_edgeop 263 00411 #define T_symbol 264 00412 #define T_qsymbol 265 00413 #define T_subgraph 266 00414 00415 00416 00417 00418 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED 00419 typedef union YYSTYPE 00420 { 00421 00422 /* Line 293 of yacc.c */ 00423 #line 309 "../../lib/graph/parser.y" 00424 00425 int i; 00426 char *str; 00427 struct objport_t obj; 00428 struct Agnode_t *n; 00429 00430 00431 00432 /* Line 293 of yacc.c */ 00433 #line 434 "y.tab.c" 00434 } YYSTYPE; 00435 # define YYSTYPE_IS_TRIVIAL 1 00436 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ 00437 # define YYSTYPE_IS_DECLARED 1 00438 #endif 00439 00440 00441 /* Copy the second part of user declarations. */ 00442 00443 00444 /* Line 343 of yacc.c */ 00445 #line 446 "y.tab.c" 00446 00447 #ifdef short 00448 # undef short 00449 #endif 00450 00451 #ifdef YYTYPE_UINT8 00452 typedef YYTYPE_UINT8 yytype_uint8; 00453 #else 00454 typedef unsigned char yytype_uint8; 00455 #endif 00456 00457 #ifdef YYTYPE_INT8 00458 typedef YYTYPE_INT8 yytype_int8; 00459 #elif (defined __STDC__ || defined __C99__FUNC__ \ 00460 || defined __cplusplus || defined _MSC_VER) 00461 typedef signed char yytype_int8; 00462 #else 00463 typedef short int yytype_int8; 00464 #endif 00465 00466 #ifdef YYTYPE_UINT16 00467 typedef YYTYPE_UINT16 yytype_uint16; 00468 #else 00469 typedef unsigned short int yytype_uint16; 00470 #endif 00471 00472 #ifdef YYTYPE_INT16 00473 typedef YYTYPE_INT16 yytype_int16; 00474 #else 00475 typedef short int yytype_int16; 00476 #endif 00477 00478 #ifndef YYSIZE_T 00479 # ifdef __SIZE_TYPE__ 00480 # define YYSIZE_T __SIZE_TYPE__ 00481 # elif defined size_t 00482 # define YYSIZE_T size_t 00483 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ 00484 || defined __cplusplus || defined _MSC_VER) 00485 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 00486 # define YYSIZE_T size_t 00487 # else 00488 # define YYSIZE_T unsigned int 00489 # endif 00490 #endif 00491 00492 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) 00493 00494 #ifndef YY_ 00495 # if defined YYENABLE_NLS && YYENABLE_NLS 00496 # if ENABLE_NLS 00497 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ 00498 # define YY_(msgid) dgettext ("bison-runtime", msgid) 00499 # endif 00500 # endif 00501 # ifndef YY_ 00502 # define YY_(msgid) msgid 00503 # endif 00504 #endif 00505 00506 /* Suppress unused-variable warnings by "using" E. */ 00507 #if ! defined lint || defined __GNUC__ 00508 # define YYUSE(e) ((void) (e)) 00509 #else 00510 # define YYUSE(e) /* empty */ 00511 #endif 00512 00513 /* Identity function, used to suppress warnings about constant conditions. */ 00514 #ifndef lint 00515 # define YYID(n) (n) 00516 #else 00517 #if (defined __STDC__ || defined __C99__FUNC__ \ 00518 || defined __cplusplus || defined _MSC_VER) 00519 static int 00520 YYID (int yyi) 00521 #else 00522 static int 00523 YYID (yyi) 00524 int yyi; 00525 #endif 00526 { 00527 return yyi; 00528 } 00529 #endif 00530 00531 #if ! defined yyoverflow || YYERROR_VERBOSE 00532 00533 /* The parser invokes alloca or malloc; define the necessary symbols. */ 00534 00535 # ifdef YYSTACK_USE_ALLOCA 00536 # if YYSTACK_USE_ALLOCA 00537 # ifdef __GNUC__ 00538 # define YYSTACK_ALLOC __builtin_alloca 00539 # elif defined __BUILTIN_VA_ARG_INCR 00540 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ 00541 # elif defined _AIX 00542 # define YYSTACK_ALLOC __alloca 00543 # elif defined _MSC_VER 00544 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ 00545 # define alloca _alloca 00546 # else 00547 # define YYSTACK_ALLOC alloca 00548 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 00549 || defined __cplusplus || defined _MSC_VER) 00550 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 00551 # ifndef EXIT_SUCCESS 00552 # define EXIT_SUCCESS 0 00553 # endif 00554 # endif 00555 # endif 00556 # endif 00557 # endif 00558 00559 # ifdef YYSTACK_ALLOC 00560 /* Pacify GCC's `empty if-body' warning. */ 00561 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) 00562 # ifndef YYSTACK_ALLOC_MAXIMUM 00563 /* The OS might guarantee only one guard page at the bottom of the stack, 00564 and a page size can be as small as 4096 bytes. So we cannot safely 00565 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number 00566 to allow for a few compiler-allocated temporary stack slots. */ 00567 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ 00568 # endif 00569 # else 00570 # define YYSTACK_ALLOC YYMALLOC 00571 # define YYSTACK_FREE YYFREE 00572 # ifndef YYSTACK_ALLOC_MAXIMUM 00573 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM 00574 # endif 00575 # if (defined __cplusplus && ! defined EXIT_SUCCESS \ 00576 && ! ((defined YYMALLOC || defined malloc) \ 00577 && (defined YYFREE || defined free))) 00578 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 00579 # ifndef EXIT_SUCCESS 00580 # define EXIT_SUCCESS 0 00581 # endif 00582 # endif 00583 # ifndef YYMALLOC 00584 # define YYMALLOC malloc 00585 # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 00586 || defined __cplusplus || defined _MSC_VER) 00587 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ 00588 # endif 00589 # endif 00590 # ifndef YYFREE 00591 # define YYFREE free 00592 # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 00593 || defined __cplusplus || defined _MSC_VER) 00594 void free (void *); /* INFRINGES ON USER NAME SPACE */ 00595 # endif 00596 # endif 00597 # endif 00598 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ 00599 00600 00601 #if (! defined yyoverflow \ 00602 && (! defined __cplusplus \ 00603 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) 00604 00605 /* A type that is properly aligned for any stack member. */ 00606 union yyalloc 00607 { 00608 yytype_int16 yyss_alloc; 00609 YYSTYPE yyvs_alloc; 00610 }; 00611 00612 /* The size of the maximum gap between one aligned stack and the next. */ 00613 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) 00614 00615 /* The size of an array large to enough to hold all stacks, each with 00616 N elements. */ 00617 # define YYSTACK_BYTES(N) \ 00618 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ 00619 + YYSTACK_GAP_MAXIMUM) 00620 00621 # define YYCOPY_NEEDED 1 00622 00623 /* Relocate STACK from its old location to the new one. The 00624 local variables YYSIZE and YYSTACKSIZE give the old and new number of 00625 elements in the stack, and YYPTR gives the new location of the 00626 stack. Advance YYPTR to a properly aligned location for the next 00627 stack. */ 00628 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ 00629 do \ 00630 { \ 00631 YYSIZE_T yynewbytes; \ 00632 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ 00633 Stack = &yyptr->Stack_alloc; \ 00634 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ 00635 yyptr += yynewbytes / sizeof (*yyptr); \ 00636 } \ 00637 while (YYID (0)) 00638 00639 #endif 00640 00641 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED 00642 /* Copy COUNT objects from FROM to TO. The source and destination do 00643 not overlap. */ 00644 # ifndef YYCOPY 00645 # if defined __GNUC__ && 1 < __GNUC__ 00646 # define YYCOPY(To, From, Count) \ 00647 __builtin_memcpy (To, From, (Count) * sizeof (*(From))) 00648 # else 00649 # define YYCOPY(To, From, Count) \ 00650 do \ 00651 { \ 00652 YYSIZE_T yyi; \ 00653 for (yyi = 0; yyi < (Count); yyi++) \ 00654 (To)[yyi] = (From)[yyi]; \ 00655 } \ 00656 while (YYID (0)) 00657 # endif 00658 # endif 00659 #endif /* !YYCOPY_NEEDED */ 00660 00661 /* YYFINAL -- State number of the termination state. */ 00662 #define YYFINAL 9 00663 /* YYLAST -- Last index in YYTABLE. */ 00664 #define YYLAST 80 00665 00666 /* YYNTOKENS -- Number of terminals. */ 00667 #define YYNTOKENS 21 00668 /* YYNNTS -- Number of nonterminals. */ 00669 #define YYNNTS 37 00670 /* YYNRULES -- Number of rules. */ 00671 #define YYNRULES 68 00672 /* YYNRULES -- Number of states. */ 00673 #define YYNSTATES 90 00674 00675 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ 00676 #define YYUNDEFTOK 2 00677 #define YYMAXUTOK 266 00678 00679 #define YYTRANSLATE(YYX) \ 00680 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) 00681 00682 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ 00683 static const yytype_uint8 yytranslate[] = 00684 { 00685 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00686 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00687 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00688 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00689 2, 2, 2, 20, 14, 2, 2, 2, 2, 2, 00690 2, 2, 2, 2, 2, 2, 2, 2, 19, 18, 00691 2, 17, 2, 2, 2, 2, 2, 2, 2, 2, 00692 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00693 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00694 2, 15, 2, 16, 2, 2, 2, 2, 2, 2, 00695 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00696 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00697 2, 2, 2, 12, 2, 13, 2, 2, 2, 2, 00698 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00699 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00700 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00701 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00702 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00703 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00704 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00705 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00706 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00707 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00708 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00709 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 00710 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 00711 5, 6, 7, 8, 9, 10, 11 00712 }; 00713 00714 #if YYDEBUG 00715 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in 00716 YYRHS. */ 00717 static const yytype_uint8 yyprhs[] = 00718 { 00719 0, 0, 3, 4, 11, 13, 14, 16, 17, 19, 00720 22, 24, 27, 29, 31, 33, 37, 38, 39, 41, 00721 45, 48, 49, 51, 55, 57, 59, 61, 62, 64, 00722 67, 69, 72, 74, 76, 78, 80, 82, 85, 87, 00723 90, 92, 93, 96, 101, 102, 106, 107, 108, 114, 00724 115, 116, 122, 125, 126, 131, 134, 135, 140, 145, 00725 146, 152, 153, 158, 160, 163, 165, 167, 169 00726 }; 00727 00728 /* YYRHS -- A `-1'-separated list of the rules' RHS. */ 00729 static const yytype_int8 yyrhs[] = 00730 { 00731 22, 0, -1, -1, 25, 24, 23, 12, 34, 13, 00732 -1, 1, -1, -1, 56, -1, -1, 3, -1, 5, 00733 3, -1, 4, -1, 5, 4, -1, 3, -1, 6, 00734 -1, 7, -1, 33, 28, 27, -1, -1, -1, 14, 00735 -1, 15, 27, 16, -1, 30, 29, -1, -1, 30, 00736 -1, 56, 17, 56, -1, 32, -1, 56, -1, 35, 00737 -1, -1, 36, -1, 35, 36, -1, 37, -1, 37, 00738 18, -1, 1, -1, 42, -1, 44, -1, 38, -1, 00739 52, -1, 26, 29, -1, 32, -1, 40, 41, -1, 00740 56, -1, -1, 19, 56, -1, 19, 56, 19, 56, 00741 -1, -1, 39, 43, 31, -1, -1, -1, 39, 45, 00742 49, 46, 31, -1, -1, -1, 52, 47, 49, 48, 00743 31, -1, 8, 39, -1, -1, 8, 39, 50, 49, 00744 -1, 8, 52, -1, -1, 8, 52, 51, 49, -1, 00745 55, 12, 34, 13, -1, -1, 11, 12, 53, 34, 00746 13, -1, -1, 12, 54, 34, 13, -1, 55, -1, 00747 11, 56, -1, 9, -1, 57, -1, 10, -1, 57, 00748 20, 10, -1 00749 }; 00750 00751 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ 00752 static const yytype_uint16 yyrline[] = 00753 { 00754 0, 327, 327, 326, 330, 336, 339, 339, 342, 344, 00755 346, 348, 352, 354, 356, 360, 361, 364, 365, 368, 00756 371, 372, 375, 378, 382, 383, 387, 388, 391, 392, 00757 395, 396, 397, 400, 401, 402, 403, 406, 408, 412, 00758 422, 425, 426, 427, 431, 430, 437, 439, 436, 444, 00759 446, 443, 452, 454, 453, 456, 459, 458, 464, 465, 00760 465, 466, 466, 467, 470, 480, 481, 484, 485 00761 }; 00762 #endif 00763 00764 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE 00765 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. 00766 First, the terminals, then, starting at YYNTOKENS, nonterminals. */ 00767 static const char *const yytname[] = 00768 { 00769 "$end", "error", "$undefined", "T_graph", "T_digraph", "T_strict", 00770 "T_node", "T_edge", "T_edgeop", "T_symbol", "T_qsymbol", "T_subgraph", 00771 "'{'", "'}'", "','", "'['", "']'", "'='", "';'", "':'", "'+'", "$accept", 00772 "file", "$@1", "optgraphname", "graph_type", "attr_class", 00773 "inside_attr_list", "optcomma", "attr_list", "rec_attr_list", 00774 "opt_attr_list", "attr_set", "iattr_set", "stmt_list", "stmt_list1", 00775 "stmt", "stmt1", "attr_stmt", "node_id", "node_name", "node_port", 00776 "node_stmt", "$@2", "edge_stmt", "$@3", "$@4", "$@5", "$@6", "edgeRHS", 00777 "$@7", "$@8", "subg_stmt", "$@9", "$@10", "subg_hdr", "symbol", 00778 "qsymbol", 0 00779 }; 00780 #endif 00781 00782 # ifdef YYPRINT 00783 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to 00784 token YYLEX-NUM. */ 00785 static const yytype_uint16 yytoknum[] = 00786 { 00787 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 00788 265, 266, 123, 125, 44, 91, 93, 61, 59, 58, 00789 43 00790 }; 00791 # endif 00792 00793 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ 00794 static const yytype_uint8 yyr1[] = 00795 { 00796 0, 21, 23, 22, 22, 22, 24, 24, 25, 25, 00797 25, 25, 26, 26, 26, 27, 27, 28, 28, 29, 00798 30, 30, 31, 32, 33, 33, 34, 34, 35, 35, 00799 36, 36, 36, 37, 37, 37, 37, 38, 38, 39, 00800 40, 41, 41, 41, 43, 42, 45, 46, 44, 47, 00801 48, 44, 49, 50, 49, 49, 51, 49, 52, 53, 00802 52, 54, 52, 52, 55, 56, 56, 57, 57 00803 }; 00804 00805 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ 00806 static const yytype_uint8 yyr2[] = 00807 { 00808 0, 2, 0, 6, 1, 0, 1, 0, 1, 2, 00809 1, 2, 1, 1, 1, 3, 0, 0, 1, 3, 00810 2, 0, 1, 3, 1, 1, 1, 0, 1, 2, 00811 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 00812 1, 0, 2, 4, 0, 3, 0, 0, 5, 0, 00813 0, 5, 2, 0, 4, 2, 0, 4, 4, 0, 00814 5, 0, 4, 1, 2, 1, 1, 1, 3 00815 }; 00816 00817 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. 00818 Performed when YYTABLE doesn't specify something else to do. Zero 00819 means the default is an error. */ 00820 static const yytype_uint8 yydefact[] = 00821 { 00822 0, 4, 8, 10, 0, 0, 7, 9, 11, 1, 00823 65, 67, 2, 6, 66, 0, 0, 0, 68, 32, 00824 12, 13, 14, 0, 61, 0, 38, 0, 0, 28, 00825 30, 35, 44, 41, 33, 34, 36, 63, 40, 59, 00826 64, 0, 16, 37, 3, 29, 31, 21, 0, 0, 00827 39, 0, 0, 0, 0, 0, 0, 24, 17, 25, 00828 22, 45, 0, 47, 42, 50, 0, 23, 0, 62, 00829 19, 18, 16, 20, 52, 55, 40, 21, 0, 21, 00830 58, 60, 15, 0, 0, 48, 43, 51, 54, 57 00831 }; 00832 00833 /* YYDEFGOTO[NTERM-NUM]. */ 00834 static const yytype_int8 yydefgoto[] = 00835 { 00836 -1, 5, 15, 12, 6, 25, 56, 72, 43, 60, 00837 61, 26, 58, 27, 28, 29, 30, 31, 32, 33, 00838 50, 34, 47, 35, 48, 77, 51, 79, 63, 83, 00839 84, 36, 54, 41, 37, 38, 14 00840 }; 00841 00842 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 00843 STATE-NUM. */ 00844 #define YYPACT_NINF -68 00845 static const yytype_int8 yypact[] = 00846 { 00847 4, -68, -68, -68, 27, 6, 44, -68, -68, -68, 00848 -68, -68, -68, -68, -9, 8, 25, 12, -68, -68, 00849 -68, -68, -68, 29, -68, 22, -68, 31, 39, -68, 00850 37, -68, 49, 40, -68, -68, 50, 48, 45, -68, 00851 -68, 12, 44, -68, -68, -68, -68, -68, 53, 44, 00852 -68, 53, 12, 44, 12, 51, 47, -68, 54, 45, 00853 22, -68, 17, -68, 46, -68, 56, -68, 57, -68, 00854 -68, -68, 44, -68, 59, 63, -68, -68, 44, -68, 00855 -68, -68, -68, 53, 53, -68, -68, -68, -68, -68 00856 }; 00857 00858 /* YYPGOTO[NTERM-NUM]. */ 00859 static const yytype_int8 yypgoto[] = 00860 { 00861 -68, -68, -68, -68, -68, -68, 1, -68, 14, -68, 00862 -67, -40, -68, -38, -68, 52, -68, -68, 13, -68, 00863 -68, -68, -68, -68, -68, -68, -68, -68, -50, -68, 00864 -68, 15, -68, -68, -68, -6, -68 00865 }; 00866 00867 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If 00868 positive, shift that token. If negative, reduce the rule which 00869 number is the opposite. If YYTABLE_NINF, syntax error. */ 00870 #define YYTABLE_NINF -57 00871 static const yytype_int8 yytable[] = 00872 { 00873 13, 65, 57, 55, -5, 1, 9, 2, 3, 4, 00874 85, 16, 87, 19, 66, 20, 68, 40, 21, 22, 00875 17, 10, 11, 23, 24, -27, 10, 11, 23, 24, 00876 7, 8, 57, 88, 89, 18, 59, 42, 10, 11, 00877 19, 39, 20, 64, 44, 21, 22, 67, 10, 11, 00878 23, 24, -26, 10, 11, 46, 76, -46, -49, 49, 00879 52, 62, 53, 70, 69, 78, 59, -53, 71, 80, 00880 81, -56, 86, 82, 73, 74, 0, 75, 0, 0, 00881 45 00882 }; 00883 00884 #define yypact_value_is_default(yystate) \ 00885 ((yystate) == (-68)) 00886 00887 #define yytable_value_is_error(yytable_value) \ 00888 YYID (0) 00889 00890 static const yytype_int8 yycheck[] = 00891 { 00892 6, 51, 42, 41, 0, 1, 0, 3, 4, 5, 00893 77, 20, 79, 1, 52, 3, 54, 23, 6, 7, 00894 12, 9, 10, 11, 12, 13, 9, 10, 11, 12, 00895 3, 4, 72, 83, 84, 10, 42, 15, 9, 10, 00896 1, 12, 3, 49, 13, 6, 7, 53, 9, 10, 00897 11, 12, 13, 9, 10, 18, 62, 8, 8, 19, 00898 12, 8, 17, 16, 13, 19, 72, 8, 14, 13, 00899 13, 8, 78, 72, 60, 62, -1, 62, -1, -1, 00900 28 00901 }; 00902 00903 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing 00904 symbol of state STATE-NUM. */ 00905 static const yytype_uint8 yystos[] = 00906 { 00907 0, 1, 3, 4, 5, 22, 25, 3, 4, 0, 00908 9, 10, 24, 56, 57, 23, 20, 12, 10, 1, 00909 3, 6, 7, 11, 12, 26, 32, 34, 35, 36, 00910 37, 38, 39, 40, 42, 44, 52, 55, 56, 12, 00911 56, 54, 15, 29, 13, 36, 18, 43, 45, 19, 00912 41, 47, 12, 17, 53, 34, 27, 32, 33, 56, 00913 30, 31, 8, 49, 56, 49, 34, 56, 34, 13, 00914 16, 14, 28, 29, 39, 52, 56, 46, 19, 48, 00915 13, 13, 27, 50, 51, 31, 56, 31, 49, 49 00916 }; 00917 00918 #define yyerrok (yyerrstatus = 0) 00919 #define yyclearin (yychar = YYEMPTY) 00920 #define YYEMPTY (-2) 00921 #define YYEOF 0 00922 00923 #define YYACCEPT goto yyacceptlab 00924 #define YYABORT goto yyabortlab 00925 #define YYERROR goto yyerrorlab 00926 00927 00928 /* Like YYERROR except do call yyerror. This remains here temporarily 00929 to ease the transition to the new meaning of YYERROR, for GCC. 00930 Once GCC version 2 has supplanted version 1, this can go. However, 00931 YYFAIL appears to be in use. Nevertheless, it is formally deprecated 00932 in Bison 2.4.2's NEWS entry, where a plan to phase it out is 00933 discussed. */ 00934 00935 #define YYFAIL goto yyerrlab 00936 #if defined YYFAIL 00937 /* This is here to suppress warnings from the GCC cpp's 00938 -Wunused-macros. Normally we don't worry about that warning, but 00939 some users do, and we want to make it easy for users to remove 00940 YYFAIL uses, which will produce warnings from Bison 2.5. */ 00941 #endif 00942 00943 #define YYRECOVERING() (!!yyerrstatus) 00944 00945 #define YYBACKUP(Token, Value) \ 00946 do \ 00947 if (yychar == YYEMPTY && yylen == 1) \ 00948 { \ 00949 yychar = (Token); \ 00950 yylval = (Value); \ 00951 YYPOPSTACK (1); \ 00952 goto yybackup; \ 00953 } \ 00954 else \ 00955 { \ 00956 yyerror (YY_("syntax error: cannot back up")); \ 00957 YYERROR; \ 00958 } \ 00959 while (YYID (0)) 00960 00961 00962 #define YYTERROR 1 00963 #define YYERRCODE 256 00964 00965 00966 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. 00967 If N is 0, then set CURRENT to the empty location which ends 00968 the previous symbol: RHS[0] (always defined). */ 00969 00970 #define YYRHSLOC(Rhs, K) ((Rhs)[K]) 00971 #ifndef YYLLOC_DEFAULT 00972 # define YYLLOC_DEFAULT(Current, Rhs, N) \ 00973 do \ 00974 if (YYID (N)) \ 00975 { \ 00976 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ 00977 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ 00978 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ 00979 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ 00980 } \ 00981 else \ 00982 { \ 00983 (Current).first_line = (Current).last_line = \ 00984 YYRHSLOC (Rhs, 0).last_line; \ 00985 (Current).first_column = (Current).last_column = \ 00986 YYRHSLOC (Rhs, 0).last_column; \ 00987 } \ 00988 while (YYID (0)) 00989 #endif 00990 00991 00992 /* This macro is provided for backward compatibility. */ 00993 00994 #ifndef YY_LOCATION_PRINT 00995 # define YY_LOCATION_PRINT(File, Loc) ((void) 0) 00996 #endif 00997 00998 00999 /* YYLEX -- calling `yylex' with the right arguments. */ 01000 01001 #ifdef YYLEX_PARAM 01002 # define YYLEX yylex (YYLEX_PARAM) 01003 #else 01004 # define YYLEX yylex () 01005 #endif 01006 01007 /* Enable debugging if requested. */ 01008 #if YYDEBUG 01009 01010 # ifndef YYFPRINTF 01011 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ 01012 # define YYFPRINTF fprintf 01013 # endif 01014 01015 # define YYDPRINTF(Args) \ 01016 do { \ 01017 if (yydebug) \ 01018 YYFPRINTF Args; \ 01019 } while (YYID (0)) 01020 01021 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ 01022 do { \ 01023 if (yydebug) \ 01024 { \ 01025 YYFPRINTF (stderr, "%s ", Title); \ 01026 yy_symbol_print (stderr, \ 01027 Type, Value); \ 01028 YYFPRINTF (stderr, "\n"); \ 01029 } \ 01030 } while (YYID (0)) 01031 01032 01033 /*--------------------------------. 01034 | Print this symbol on YYOUTPUT. | 01035 `--------------------------------*/ 01036 01037 /*ARGSUSED*/ 01038 #if (defined __STDC__ || defined __C99__FUNC__ \ 01039 || defined __cplusplus || defined _MSC_VER) 01040 static void 01041 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) 01042 #else 01043 static void 01044 yy_symbol_value_print (yyoutput, yytype, yyvaluep) 01045 FILE *yyoutput; 01046 int yytype; 01047 YYSTYPE const * const yyvaluep; 01048 #endif 01049 { 01050 if (!yyvaluep) 01051 return; 01052 # ifdef YYPRINT 01053 if (yytype < YYNTOKENS) 01054 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); 01055 # else 01056 YYUSE (yyoutput); 01057 # endif 01058 switch (yytype) 01059 { 01060 default: 01061 break; 01062 } 01063 } 01064 01065 01066 /*--------------------------------. 01067 | Print this symbol on YYOUTPUT. | 01068 `--------------------------------*/ 01069 01070 #if (defined __STDC__ || defined __C99__FUNC__ \ 01071 || defined __cplusplus || defined _MSC_VER) 01072 static void 01073 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) 01074 #else 01075 static void 01076 yy_symbol_print (yyoutput, yytype, yyvaluep) 01077 FILE *yyoutput; 01078 int yytype; 01079 YYSTYPE const * const yyvaluep; 01080 #endif 01081 { 01082 if (yytype < YYNTOKENS) 01083 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); 01084 else 01085 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); 01086 01087 yy_symbol_value_print (yyoutput, yytype, yyvaluep); 01088 YYFPRINTF (yyoutput, ")"); 01089 } 01090 01091 /*------------------------------------------------------------------. 01092 | yy_stack_print -- Print the state stack from its BOTTOM up to its | 01093 | TOP (included). | 01094 `------------------------------------------------------------------*/ 01095 01096 #if (defined __STDC__ || defined __C99__FUNC__ \ 01097 || defined __cplusplus || defined _MSC_VER) 01098 static void 01099 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) 01100 #else 01101 static void 01102 yy_stack_print (yybottom, yytop) 01103 yytype_int16 *yybottom; 01104 yytype_int16 *yytop; 01105 #endif 01106 { 01107 YYFPRINTF (stderr, "Stack now"); 01108 for (; yybottom <= yytop; yybottom++) 01109 { 01110 int yybot = *yybottom; 01111 YYFPRINTF (stderr, " %d", yybot); 01112 } 01113 YYFPRINTF (stderr, "\n"); 01114 } 01115 01116 # define YY_STACK_PRINT(Bottom, Top) \ 01117 do { \ 01118 if (yydebug) \ 01119 yy_stack_print ((Bottom), (Top)); \ 01120 } while (YYID (0)) 01121 01122 01123 /*------------------------------------------------. 01124 | Report that the YYRULE is going to be reduced. | 01125 `------------------------------------------------*/ 01126 01127 #if (defined __STDC__ || defined __C99__FUNC__ \ 01128 || defined __cplusplus || defined _MSC_VER) 01129 static void 01130 yy_reduce_print (YYSTYPE *yyvsp, int yyrule) 01131 #else 01132 static void 01133 yy_reduce_print (yyvsp, yyrule) 01134 YYSTYPE *yyvsp; 01135 int yyrule; 01136 #endif 01137 { 01138 int yynrhs = yyr2[yyrule]; 01139 int yyi; 01140 unsigned long int yylno = yyrline[yyrule]; 01141 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", 01142 yyrule - 1, yylno); 01143 /* The symbols being reduced. */ 01144 for (yyi = 0; yyi < yynrhs; yyi++) 01145 { 01146 YYFPRINTF (stderr, " $%d = ", yyi + 1); 01147 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], 01148 &(yyvsp[(yyi + 1) - (yynrhs)]) 01149 ); 01150 YYFPRINTF (stderr, "\n"); 01151 } 01152 } 01153 01154 # define YY_REDUCE_PRINT(Rule) \ 01155 do { \ 01156 if (yydebug) \ 01157 yy_reduce_print (yyvsp, Rule); \ 01158 } while (YYID (0)) 01159 01160 /* Nonzero means print parse trace. It is left uninitialized so that 01161 multiple parsers can coexist. */ 01162 int yydebug; 01163 #else /* !YYDEBUG */ 01164 # define YYDPRINTF(Args) 01165 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) 01166 # define YY_STACK_PRINT(Bottom, Top) 01167 # define YY_REDUCE_PRINT(Rule) 01168 #endif /* !YYDEBUG */ 01169 01170 01171 /* YYINITDEPTH -- initial size of the parser's stacks. */ 01172 #ifndef YYINITDEPTH 01173 # define YYINITDEPTH 200 01174 #endif 01175 01176 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only 01177 if the built-in stack extension method is used). 01178 01179 Do not make this value too large; the results are undefined if 01180 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) 01181 evaluated with infinite-precision integer arithmetic. */ 01182 01183 #ifndef YYMAXDEPTH 01184 # define YYMAXDEPTH 10000 01185 #endif 01186 01187 01188 #if YYERROR_VERBOSE 01189 01190 # ifndef yystrlen 01191 # if defined __GLIBC__ && defined _STRING_H 01192 # define yystrlen strlen 01193 # else 01194 /* Return the length of YYSTR. */ 01195 #if (defined __STDC__ || defined __C99__FUNC__ \ 01196 || defined __cplusplus || defined _MSC_VER) 01197 static YYSIZE_T 01198 yystrlen (const char *yystr) 01199 #else 01200 static YYSIZE_T 01201 yystrlen (yystr) 01202 const char *yystr; 01203 #endif 01204 { 01205 YYSIZE_T yylen; 01206 for (yylen = 0; yystr[yylen]; yylen++) 01207 continue; 01208 return yylen; 01209 } 01210 # endif 01211 # endif 01212 01213 # ifndef yystpcpy 01214 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE 01215 # define yystpcpy stpcpy 01216 # else 01217 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in 01218 YYDEST. */ 01219 #if (defined __STDC__ || defined __C99__FUNC__ \ 01220 || defined __cplusplus || defined _MSC_VER) 01221 static char * 01222 yystpcpy (char *yydest, const char *yysrc) 01223 #else 01224 static char * 01225 yystpcpy (yydest, yysrc) 01226 char *yydest; 01227 const char *yysrc; 01228 #endif 01229 { 01230 char *yyd = yydest; 01231 const char *yys = yysrc; 01232 01233 while ((*yyd++ = *yys++) != '\0') 01234 continue; 01235 01236 return yyd - 1; 01237 } 01238 # endif 01239 # endif 01240 01241 # ifndef yytnamerr 01242 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary 01243 quotes and backslashes, so that it's suitable for yyerror. The 01244 heuristic is that double-quoting is unnecessary unless the string 01245 contains an apostrophe, a comma, or backslash (other than 01246 backslash-backslash). YYSTR is taken from yytname. If YYRES is 01247 null, do not copy; instead, return the length of what the result 01248 would have been. */ 01249 static YYSIZE_T 01250 yytnamerr (char *yyres, const char *yystr) 01251 { 01252 if (*yystr == '"') 01253 { 01254 YYSIZE_T yyn = 0; 01255 char const *yyp = yystr; 01256 01257 for (;;) 01258 switch (*++yyp) 01259 { 01260 case '\'': 01261 case ',': 01262 goto do_not_strip_quotes; 01263 01264 case '\\': 01265 if (*++yyp != '\\') 01266 goto do_not_strip_quotes; 01267 /* Fall through. */ 01268 default: 01269 if (yyres) 01270 yyres[yyn] = *yyp; 01271 yyn++; 01272 break; 01273 01274 case '"': 01275 if (yyres) 01276 yyres[yyn] = '\0'; 01277 return yyn; 01278 } 01279 do_not_strip_quotes: ; 01280 } 01281 01282 if (! yyres) 01283 return yystrlen (yystr); 01284 01285 return yystpcpy (yyres, yystr) - yyres; 01286 } 01287 # endif 01288 01289 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message 01290 about the unexpected token YYTOKEN for the state stack whose top is 01291 YYSSP. 01292 01293 Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is 01294 not large enough to hold the message. In that case, also set 01295 *YYMSG_ALLOC to the required number of bytes. Return 2 if the 01296 required number of bytes is too large to store. */ 01297 static int 01298 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, 01299 yytype_int16 *yyssp, int yytoken) 01300 { 01301 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); 01302 YYSIZE_T yysize = yysize0; 01303 YYSIZE_T yysize1; 01304 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; 01305 /* Internationalized format string. */ 01306 const char *yyformat = 0; 01307 /* Arguments of yyformat. */ 01308 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; 01309 /* Number of reported tokens (one for the "unexpected", one per 01310 "expected"). */ 01311 int yycount = 0; 01312 01313 /* There are many possibilities here to consider: 01314 - Assume YYFAIL is not used. It's too flawed to consider. See 01315 <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> 01316 for details. YYERROR is fine as it does not invoke this 01317 function. 01318 - If this state is a consistent state with a default action, then 01319 the only way this function was invoked is if the default action 01320 is an error action. In that case, don't check for expected 01321 tokens because there are none. 01322 - The only way there can be no lookahead present (in yychar) is if 01323 this state is a consistent state with a default action. Thus, 01324 detecting the absence of a lookahead is sufficient to determine 01325 that there is no unexpected or expected token to report. In that 01326 case, just report a simple "syntax error". 01327 - Don't assume there isn't a lookahead just because this state is a 01328 consistent state with a default action. There might have been a 01329 previous inconsistent state, consistent state with a non-default 01330 action, or user semantic action that manipulated yychar. 01331 - Of course, the expected token list depends on states to have 01332 correct lookahead information, and it depends on the parser not 01333 to perform extra reductions after fetching a lookahead from the 01334 scanner and before detecting a syntax error. Thus, state merging 01335 (from LALR or IELR) and default reductions corrupt the expected 01336 token list. However, the list is correct for canonical LR with 01337 one exception: it will still contain any token that will not be 01338 accepted due to an error action in a later state. 01339 */ 01340 if (yytoken != YYEMPTY) 01341 { 01342 int yyn = yypact[*yyssp]; 01343 yyarg[yycount++] = yytname[yytoken]; 01344 if (!yypact_value_is_default (yyn)) 01345 { 01346 /* Start YYX at -YYN if negative to avoid negative indexes in 01347 YYCHECK. In other words, skip the first -YYN actions for 01348 this state because they are default actions. */ 01349 int yyxbegin = yyn < 0 ? -yyn : 0; 01350 /* Stay within bounds of both yycheck and yytname. */ 01351 int yychecklim = YYLAST - yyn + 1; 01352 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; 01353 int yyx; 01354 01355 for (yyx = yyxbegin; yyx < yyxend; ++yyx) 01356 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR 01357 && !yytable_value_is_error (yytable[yyx + yyn])) 01358 { 01359 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) 01360 { 01361 yycount = 1; 01362 yysize = yysize0; 01363 break; 01364 } 01365 yyarg[yycount++] = yytname[yyx]; 01366 yysize1 = yysize + yytnamerr (0, yytname[yyx]); 01367 if (! (yysize <= yysize1 01368 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) 01369 return 2; 01370 yysize = yysize1; 01371 } 01372 } 01373 } 01374 01375 switch (yycount) 01376 { 01377 # define YYCASE_(N, S) \ 01378 case N: \ 01379 yyformat = S; \ 01380 break 01381 YYCASE_(0, YY_("syntax error")); 01382 YYCASE_(1, YY_("syntax error, unexpected %s")); 01383 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); 01384 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); 01385 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); 01386 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); 01387 # undef YYCASE_ 01388 } 01389 01390 yysize1 = yysize + yystrlen (yyformat); 01391 if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) 01392 return 2; 01393 yysize = yysize1; 01394 01395 if (*yymsg_alloc < yysize) 01396 { 01397 *yymsg_alloc = 2 * yysize; 01398 if (! (yysize <= *yymsg_alloc 01399 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) 01400 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; 01401 return 1; 01402 } 01403 01404 /* Avoid sprintf, as that infringes on the user's name space. 01405 Don't have undefined behavior even if the translation 01406 produced a string with the wrong number of "%s"s. */ 01407 { 01408 char *yyp = *yymsg; 01409 int yyi = 0; 01410 while ((*yyp = *yyformat) != '\0') 01411 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) 01412 { 01413 yyp += yytnamerr (yyp, yyarg[yyi++]); 01414 yyformat += 2; 01415 } 01416 else 01417 { 01418 yyp++; 01419 yyformat++; 01420 } 01421 } 01422 return 0; 01423 } 01424 #endif /* YYERROR_VERBOSE */ 01425 01426 /*-----------------------------------------------. 01427 | Release the memory associated to this symbol. | 01428 `-----------------------------------------------*/ 01429 01430 /*ARGSUSED*/ 01431 #if (defined __STDC__ || defined __C99__FUNC__ \ 01432 || defined __cplusplus || defined _MSC_VER) 01433 static void 01434 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) 01435 #else 01436 static void 01437 yydestruct (yymsg, yytype, yyvaluep) 01438 const char *yymsg; 01439 int yytype; 01440 YYSTYPE *yyvaluep; 01441 #endif 01442 { 01443 YYUSE (yyvaluep); 01444 01445 if (!yymsg) 01446 yymsg = "Deleting"; 01447 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); 01448 01449 switch (yytype) 01450 { 01451 01452 default: 01453 break; 01454 } 01455 } 01456 01457 01458 /* Prevent warnings from -Wmissing-prototypes. */ 01459 #ifdef YYPARSE_PARAM 01460 #if defined __STDC__ || defined __cplusplus 01461 int yyparse (void *YYPARSE_PARAM); 01462 #else 01463 int yyparse (); 01464 #endif 01465 #else /* ! YYPARSE_PARAM */ 01466 #if defined __STDC__ || defined __cplusplus 01467 int yyparse (void); 01468 #else 01469 int yyparse (); 01470 #endif 01471 #endif /* ! YYPARSE_PARAM */ 01472 01473 01474 /* The lookahead symbol. */ 01475 int yychar; 01476 01477 /* The semantic value of the lookahead symbol. */ 01478 YYSTYPE yylval; 01479 01480 /* Number of syntax errors so far. */ 01481 int yynerrs; 01482 01483 01484 /*----------. 01485 | yyparse. | 01486 `----------*/ 01487 01488 #ifdef YYPARSE_PARAM 01489 #if (defined __STDC__ || defined __C99__FUNC__ \ 01490 || defined __cplusplus || defined _MSC_VER) 01491 int 01492 yyparse (void *YYPARSE_PARAM) 01493 #else 01494 int 01495 yyparse (YYPARSE_PARAM) 01496 void *YYPARSE_PARAM; 01497 #endif 01498 #else /* ! YYPARSE_PARAM */ 01499 #if (defined __STDC__ || defined __C99__FUNC__ \ 01500 || defined __cplusplus || defined _MSC_VER) 01501 int 01502 yyparse (void) 01503 #else 01504 int 01505 yyparse () 01506 01507 #endif 01508 #endif 01509 { 01510 int yystate; 01511 /* Number of tokens to shift before error messages enabled. */ 01512 int yyerrstatus; 01513 01514 /* The stacks and their tools: 01515 `yyss': related to states. 01516 `yyvs': related to semantic values. 01517 01518 Refer to the stacks thru separate pointers, to allow yyoverflow 01519 to reallocate them elsewhere. */ 01520 01521 /* The state stack. */ 01522 yytype_int16 yyssa[YYINITDEPTH]; 01523 yytype_int16 *yyss; 01524 yytype_int16 *yyssp; 01525 01526 /* The semantic value stack. */ 01527 YYSTYPE yyvsa[YYINITDEPTH]; 01528 YYSTYPE *yyvs; 01529 YYSTYPE *yyvsp; 01530 01531 YYSIZE_T yystacksize; 01532 01533 int yyn; 01534 int yyresult; 01535 /* Lookahead token as an internal (translated) token number. */ 01536 int yytoken; 01537 /* The variables used to return semantic value and location from the 01538 action routines. */ 01539 YYSTYPE yyval; 01540 01541 #if YYERROR_VERBOSE 01542 /* Buffer for error messages, and its allocated size. */ 01543 char yymsgbuf[128]; 01544 char *yymsg = yymsgbuf; 01545 YYSIZE_T yymsg_alloc = sizeof yymsgbuf; 01546 #endif 01547 01548 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) 01549 01550 /* The number of symbols on the RHS of the reduced rule. 01551 Keep to zero when no symbol should be popped. */ 01552 int yylen = 0; 01553 01554 yytoken = 0; 01555 yyss = yyssa; 01556 yyvs = yyvsa; 01557 yystacksize = YYINITDEPTH; 01558 01559 YYDPRINTF ((stderr, "Starting parse\n")); 01560 01561 yystate = 0; 01562 yyerrstatus = 0; 01563 yynerrs = 0; 01564 yychar = YYEMPTY; /* Cause a token to be read. */ 01565 01566 /* Initialize stack pointers. 01567 Waste one element of value and location stack 01568 so that they stay on the same level as the state stack. 01569 The wasted elements are never initialized. */ 01570 yyssp = yyss; 01571 yyvsp = yyvs; 01572 01573 goto yysetstate; 01574 01575 /*------------------------------------------------------------. 01576 | yynewstate -- Push a new state, which is found in yystate. | 01577 `------------------------------------------------------------*/ 01578 yynewstate: 01579 /* In all cases, when you get here, the value and location stacks 01580 have just been pushed. So pushing a state here evens the stacks. */ 01581 yyssp++; 01582 01583 yysetstate: 01584 *yyssp = yystate; 01585 01586 if (yyss + yystacksize - 1 <= yyssp) 01587 { 01588 /* Get the current used size of the three stacks, in elements. */ 01589 YYSIZE_T yysize = yyssp - yyss + 1; 01590 01591 #ifdef yyoverflow 01592 { 01593 /* Give user a chance to reallocate the stack. Use copies of 01594 these so that the &'s don't force the real ones into 01595 memory. */ 01596 YYSTYPE *yyvs1 = yyvs; 01597 yytype_int16 *yyss1 = yyss; 01598 01599 /* Each stack pointer address is followed by the size of the 01600 data in use in that stack, in bytes. This used to be a 01601 conditional around just the two extra args, but that might 01602 be undefined if yyoverflow is a macro. */ 01603 yyoverflow (YY_("memory exhausted"), 01604 &yyss1, yysize * sizeof (*yyssp), 01605 &yyvs1, yysize * sizeof (*yyvsp), 01606 &yystacksize); 01607 01608 yyss = yyss1; 01609 yyvs = yyvs1; 01610 } 01611 #else /* no yyoverflow */ 01612 # ifndef YYSTACK_RELOCATE 01613 goto yyexhaustedlab; 01614 # else 01615 /* Extend the stack our own way. */ 01616 if (YYMAXDEPTH <= yystacksize) 01617 goto yyexhaustedlab; 01618 yystacksize *= 2; 01619 if (YYMAXDEPTH < yystacksize) 01620 yystacksize = YYMAXDEPTH; 01621 01622 { 01623 yytype_int16 *yyss1 = yyss; 01624 union yyalloc *yyptr = 01625 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); 01626 if (! yyptr) 01627 goto yyexhaustedlab; 01628 YYSTACK_RELOCATE (yyss_alloc, yyss); 01629 YYSTACK_RELOCATE (yyvs_alloc, yyvs); 01630 # undef YYSTACK_RELOCATE 01631 if (yyss1 != yyssa) 01632 YYSTACK_FREE (yyss1); 01633 } 01634 # endif 01635 #endif /* no yyoverflow */ 01636 01637 yyssp = yyss + yysize - 1; 01638 yyvsp = yyvs + yysize - 1; 01639 01640 YYDPRINTF ((stderr, "Stack size increased to %lu\n", 01641 (unsigned long int) yystacksize)); 01642 01643 if (yyss + yystacksize - 1 <= yyssp) 01644 YYABORT; 01645 } 01646 01647 YYDPRINTF ((stderr, "Entering state %d\n", yystate)); 01648 01649 if (yystate == YYFINAL) 01650 YYACCEPT; 01651 01652 goto yybackup; 01653 01654 /*-----------. 01655 | yybackup. | 01656 `-----------*/ 01657 yybackup: 01658 01659 /* Do appropriate processing given the current state. Read a 01660 lookahead token if we need one and don't already have one. */ 01661 01662 /* First try to decide what to do without reference to lookahead token. */ 01663 yyn = yypact[yystate]; 01664 if (yypact_value_is_default (yyn)) 01665 goto yydefault; 01666 01667 /* Not known => get a lookahead token if don't already have one. */ 01668 01669 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ 01670 if (yychar == YYEMPTY) 01671 { 01672 YYDPRINTF ((stderr, "Reading a token: ")); 01673 yychar = YYLEX; 01674 } 01675 01676 if (yychar <= YYEOF) 01677 { 01678 yychar = yytoken = YYEOF; 01679 YYDPRINTF ((stderr, "Now at end of input.\n")); 01680 } 01681 else 01682 { 01683 yytoken = YYTRANSLATE (yychar); 01684 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); 01685 } 01686 01687 /* If the proper action on seeing token YYTOKEN is to reduce or to 01688 detect an error, take that action. */ 01689 yyn += yytoken; 01690 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) 01691 goto yydefault; 01692 yyn = yytable[yyn]; 01693 if (yyn <= 0) 01694 { 01695 if (yytable_value_is_error (yyn)) 01696 goto yyerrlab; 01697 yyn = -yyn; 01698 goto yyreduce; 01699 } 01700 01701 /* Count tokens shifted since error; after three, turn off error 01702 status. */ 01703 if (yyerrstatus) 01704 yyerrstatus--; 01705 01706 /* Shift the lookahead token. */ 01707 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); 01708 01709 /* Discard the shifted token. */ 01710 yychar = YYEMPTY; 01711 01712 yystate = yyn; 01713 *++yyvsp = yylval; 01714 01715 goto yynewstate; 01716 01717 01718 /*-----------------------------------------------------------. 01719 | yydefault -- do the default action for the current state. | 01720 `-----------------------------------------------------------*/ 01721 yydefault: 01722 yyn = yydefact[yystate]; 01723 if (yyn == 0) 01724 goto yyerrlab; 01725 goto yyreduce; 01726 01727 01728 /*-----------------------------. 01729 | yyreduce -- Do a reduction. | 01730 `-----------------------------*/ 01731 yyreduce: 01732 /* yyn is the number of a rule to reduce with. */ 01733 yylen = yyr2[yyn]; 01734 01735 /* If YYLEN is nonzero, implement the default value of the action: 01736 `$$ = $1'. 01737 01738 Otherwise, the following line sets YYVAL to garbage. 01739 This behavior is undocumented and Bison 01740 users should not rely upon it. Assigning to YYVAL 01741 unconditionally makes the parser a bit smaller, and it avoids a 01742 GCC warning that YYVAL may be used uninitialized. */ 01743 yyval = yyvsp[1-yylen]; 01744 01745 01746 YY_REDUCE_PRINT (yyn); 01747 switch (yyn) 01748 { 01749 case 2: 01750 01751 /* Line 1806 of yacc.c */ 01752 #line 327 "../../lib/graph/parser.y" 01753 {if (begin_graph((yyvsp[(2) - (2)].str))) YYABORT; agstrfree((yyvsp[(2) - (2)].str));} 01754 break; 01755 01756 case 3: 01757 01758 /* Line 1806 of yacc.c */ 01759 #line 329 "../../lib/graph/parser.y" 01760 {AG.accepting_state = TRUE; if (!end_graph()) YYABORT;} 01761 break; 01762 01763 case 4: 01764 01765 /* Line 1806 of yacc.c */ 01766 #line 331 "../../lib/graph/parser.y" 01767 { 01768 if (AG.parsed_g) 01769 agclose(AG.parsed_g); 01770 AG.parsed_g = NULL; 01771 } 01772 break; 01773 01774 case 5: 01775 01776 /* Line 1806 of yacc.c */ 01777 #line 336 "../../lib/graph/parser.y" 01778 {AG.parsed_g = NULL;} 01779 break; 01780 01781 case 6: 01782 01783 /* Line 1806 of yacc.c */ 01784 #line 339 "../../lib/graph/parser.y" 01785 {(yyval.str)=(yyvsp[(1) - (1)].str);} 01786 break; 01787 01788 case 7: 01789 01790 /* Line 1806 of yacc.c */ 01791 #line 339 "../../lib/graph/parser.y" 01792 {(yyval.str)=0;} 01793 break; 01794 01795 case 8: 01796 01797 /* Line 1806 of yacc.c */ 01798 #line 343 "../../lib/graph/parser.y" 01799 {Agraph_type = AGRAPH; AG.edge_op = "--";} 01800 break; 01801 01802 case 9: 01803 01804 /* Line 1806 of yacc.c */ 01805 #line 345 "../../lib/graph/parser.y" 01806 {Agraph_type = AGRAPHSTRICT; AG.edge_op = "--";} 01807 break; 01808 01809 case 10: 01810 01811 /* Line 1806 of yacc.c */ 01812 #line 347 "../../lib/graph/parser.y" 01813 {Agraph_type = AGDIGRAPH; AG.edge_op = "->";} 01814 break; 01815 01816 case 11: 01817 01818 /* Line 1806 of yacc.c */ 01819 #line 349 "../../lib/graph/parser.y" 01820 {Agraph_type = AGDIGRAPHSTRICT; AG.edge_op = "->";} 01821 break; 01822 01823 case 12: 01824 01825 /* Line 1806 of yacc.c */ 01826 #line 353 "../../lib/graph/parser.y" 01827 {Current_class = TAG_GRAPH;} 01828 break; 01829 01830 case 13: 01831 01832 /* Line 1806 of yacc.c */ 01833 #line 355 "../../lib/graph/parser.y" 01834 {Current_class = TAG_NODE; N = G->proto->n;} 01835 break; 01836 01837 case 14: 01838 01839 /* Line 1806 of yacc.c */ 01840 #line 357 "../../lib/graph/parser.y" 01841 {Current_class = TAG_EDGE; E = G->proto->e;} 01842 break; 01843 01844 case 23: 01845 01846 /* Line 1806 of yacc.c */ 01847 #line 379 "../../lib/graph/parser.y" 01848 {attr_set((yyvsp[(1) - (3)].str),(yyvsp[(3) - (3)].str)); agstrfree((yyvsp[(1) - (3)].str)); agstrfree((yyvsp[(3) - (3)].str));} 01849 break; 01850 01851 case 25: 01852 01853 /* Line 1806 of yacc.c */ 01854 #line 384 "../../lib/graph/parser.y" 01855 {attr_set((yyvsp[(1) - (1)].str),"true"); agstrfree((yyvsp[(1) - (1)].str)); } 01856 break; 01857 01858 case 32: 01859 01860 /* Line 1806 of yacc.c */ 01861 #line 397 "../../lib/graph/parser.y" 01862 {agerror("syntax error, statement skipped");} 01863 break; 01864 01865 case 36: 01866 01867 /* Line 1806 of yacc.c */ 01868 #line 403 "../../lib/graph/parser.y" 01869 {} 01870 break; 01871 01872 case 37: 01873 01874 /* Line 1806 of yacc.c */ 01875 #line 407 "../../lib/graph/parser.y" 01876 {Current_class = TAG_GRAPH; /* reset */} 01877 break; 01878 01879 case 38: 01880 01881 /* Line 1806 of yacc.c */ 01882 #line 409 "../../lib/graph/parser.y" 01883 {Current_class = TAG_GRAPH;} 01884 break; 01885 01886 case 39: 01887 01888 /* Line 1806 of yacc.c */ 01889 #line 413 "../../lib/graph/parser.y" 01890 { 01891 objport_t rv; 01892 rv.obj = (yyvsp[(1) - (2)].n); 01893 rv.port = Port; 01894 Port = NULL; 01895 (yyval.obj) = rv; 01896 } 01897 break; 01898 01899 case 40: 01900 01901 /* Line 1806 of yacc.c */ 01902 #line 422 "../../lib/graph/parser.y" 01903 {(yyval.n) = bind_node((yyvsp[(1) - (1)].str)); agstrfree((yyvsp[(1) - (1)].str));} 01904 break; 01905 01906 case 42: 01907 01908 /* Line 1806 of yacc.c */ 01909 #line 426 "../../lib/graph/parser.y" 01910 { Port=(yyvsp[(2) - (2)].str);} 01911 break; 01912 01913 case 43: 01914 01915 /* Line 1806 of yacc.c */ 01916 #line 427 "../../lib/graph/parser.y" 01917 {Port=concat3((yyvsp[(2) - (4)].str),":",(yyvsp[(4) - (4)].str));agstrfree((yyvsp[(2) - (4)].str)); agstrfree((yyvsp[(4) - (4)].str));} 01918 break; 01919 01920 case 44: 01921 01922 /* Line 1806 of yacc.c */ 01923 #line 431 "../../lib/graph/parser.y" 01924 {Current_class = TAG_NODE; N = (Agnode_t*)((yyvsp[(1) - (1)].obj).obj);} 01925 break; 01926 01927 case 45: 01928 01929 /* Line 1806 of yacc.c */ 01930 #line 433 "../../lib/graph/parser.y" 01931 {agstrfree((yyvsp[(1) - (3)].obj).port);Current_class = TAG_GRAPH; /* reset */} 01932 break; 01933 01934 case 46: 01935 01936 /* Line 1806 of yacc.c */ 01937 #line 437 "../../lib/graph/parser.y" 01938 {begin_edgestmt((yyvsp[(1) - (1)].obj));} 01939 break; 01940 01941 case 47: 01942 01943 /* Line 1806 of yacc.c */ 01944 #line 439 "../../lib/graph/parser.y" 01945 { E = SP->subg->proto->e; 01946 Current_class = TAG_EDGE; } 01947 break; 01948 01949 case 48: 01950 01951 /* Line 1806 of yacc.c */ 01952 #line 442 "../../lib/graph/parser.y" 01953 {if(end_edgestmt()) YYABORT;} 01954 break; 01955 01956 case 49: 01957 01958 /* Line 1806 of yacc.c */ 01959 #line 444 "../../lib/graph/parser.y" 01960 {begin_edgestmt((yyvsp[(1) - (1)].obj));} 01961 break; 01962 01963 case 50: 01964 01965 /* Line 1806 of yacc.c */ 01966 #line 446 "../../lib/graph/parser.y" 01967 { E = SP->subg->proto->e; 01968 Current_class = TAG_EDGE; } 01969 break; 01970 01971 case 51: 01972 01973 /* Line 1806 of yacc.c */ 01974 #line 449 "../../lib/graph/parser.y" 01975 {if(end_edgestmt()) YYABORT;} 01976 break; 01977 01978 case 52: 01979 01980 /* Line 1806 of yacc.c */ 01981 #line 452 "../../lib/graph/parser.y" 01982 {mid_edgestmt((yyvsp[(2) - (2)].obj));} 01983 break; 01984 01985 case 53: 01986 01987 /* Line 1806 of yacc.c */ 01988 #line 454 "../../lib/graph/parser.y" 01989 {mid_edgestmt((yyvsp[(2) - (2)].obj));} 01990 break; 01991 01992 case 55: 01993 01994 /* Line 1806 of yacc.c */ 01995 #line 457 "../../lib/graph/parser.y" 01996 {mid_edgestmt((yyvsp[(2) - (2)].obj));} 01997 break; 01998 01999 case 56: 02000 02001 /* Line 1806 of yacc.c */ 02002 #line 459 "../../lib/graph/parser.y" 02003 {mid_edgestmt((yyvsp[(2) - (2)].obj));} 02004 break; 02005 02006 case 58: 02007 02008 /* Line 1806 of yacc.c */ 02009 #line 464 "../../lib/graph/parser.y" 02010 {(yyval.obj) = pop_gobj(); if (!(yyval.obj).obj) YYABORT;} 02011 break; 02012 02013 case 59: 02014 02015 /* Line 1806 of yacc.c */ 02016 #line 465 "../../lib/graph/parser.y" 02017 { if(anonsubg()) YYABORT; } 02018 break; 02019 02020 case 60: 02021 02022 /* Line 1806 of yacc.c */ 02023 #line 465 "../../lib/graph/parser.y" 02024 {(yyval.obj) = pop_gobj(); if (!(yyval.obj).obj) YYABORT;} 02025 break; 02026 02027 case 61: 02028 02029 /* Line 1806 of yacc.c */ 02030 #line 466 "../../lib/graph/parser.y" 02031 { if(anonsubg()) YYABORT; } 02032 break; 02033 02034 case 62: 02035 02036 /* Line 1806 of yacc.c */ 02037 #line 466 "../../lib/graph/parser.y" 02038 {(yyval.obj) = pop_gobj(); if (!(yyval.obj).obj) YYABORT;} 02039 break; 02040 02041 case 63: 02042 02043 /* Line 1806 of yacc.c */ 02044 #line 467 "../../lib/graph/parser.y" 02045 {subgraph_warn(); (yyval.obj) = pop_gobj(); if (!(yyval.obj).obj) YYABORT;} 02046 break; 02047 02048 case 64: 02049 02050 /* Line 1806 of yacc.c */ 02051 #line 471 "../../lib/graph/parser.y" 02052 { Agraph_t *subg; 02053 if ((subg = agfindsubg(AG.parsed_g,(yyvsp[(2) - (2)].str)))) aginsert(G,subg); 02054 else subg = agsubg(G,(yyvsp[(2) - (2)].str)); 02055 push_subg(subg); 02056 In_decl = FALSE; 02057 agstrfree((yyvsp[(2) - (2)].str)); 02058 } 02059 break; 02060 02061 case 65: 02062 02063 /* Line 1806 of yacc.c */ 02064 #line 480 "../../lib/graph/parser.y" 02065 {(yyval.str) = (yyvsp[(1) - (1)].str); } 02066 break; 02067 02068 case 66: 02069 02070 /* Line 1806 of yacc.c */ 02071 #line 481 "../../lib/graph/parser.y" 02072 {(yyval.str) = (yyvsp[(1) - (1)].str); } 02073 break; 02074 02075 case 67: 02076 02077 /* Line 1806 of yacc.c */ 02078 #line 484 "../../lib/graph/parser.y" 02079 {(yyval.str) = (yyvsp[(1) - (1)].str); } 02080 break; 02081 02082 case 68: 02083 02084 /* Line 1806 of yacc.c */ 02085 #line 485 "../../lib/graph/parser.y" 02086 {(yyval.str) = concat((yyvsp[(1) - (3)].str),(yyvsp[(3) - (3)].str)); agstrfree((yyvsp[(1) - (3)].str)); agstrfree((yyvsp[(3) - (3)].str));} 02087 break; 02088 02089 02090 02091 /* Line 1806 of yacc.c */ 02092 #line 2093 "y.tab.c" 02093 default: break; 02094 } 02095 /* User semantic actions sometimes alter yychar, and that requires 02096 that yytoken be updated with the new translation. We take the 02097 approach of translating immediately before every use of yytoken. 02098 One alternative is translating here after every semantic action, 02099 but that translation would be missed if the semantic action invokes 02100 YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or 02101 if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an 02102 incorrect destructor might then be invoked immediately. In the 02103 case of YYERROR or YYBACKUP, subsequent parser actions might lead 02104 to an incorrect destructor call or verbose syntax error message 02105 before the lookahead is translated. */ 02106 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); 02107 02108 YYPOPSTACK (yylen); 02109 yylen = 0; 02110 YY_STACK_PRINT (yyss, yyssp); 02111 02112 *++yyvsp = yyval; 02113 02114 /* Now `shift' the result of the reduction. Determine what state 02115 that goes to, based on the state we popped back to and the rule 02116 number reduced by. */ 02117 02118 yyn = yyr1[yyn]; 02119 02120 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; 02121 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) 02122 yystate = yytable[yystate]; 02123 else 02124 yystate = yydefgoto[yyn - YYNTOKENS]; 02125 02126 goto yynewstate; 02127 02128 02129 /*------------------------------------. 02130 | yyerrlab -- here on detecting error | 02131 `------------------------------------*/ 02132 yyerrlab: 02133 /* Make sure we have latest lookahead translation. See comments at 02134 user semantic actions for why this is necessary. */ 02135 yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); 02136 02137 /* If not already recovering from an error, report this error. */ 02138 if (!yyerrstatus) 02139 { 02140 ++yynerrs; 02141 #if ! YYERROR_VERBOSE 02142 yyerror (YY_("syntax error")); 02143 #else 02144 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ 02145 yyssp, yytoken) 02146 { 02147 char const *yymsgp = YY_("syntax error"); 02148 int yysyntax_error_status; 02149 yysyntax_error_status = YYSYNTAX_ERROR; 02150 if (yysyntax_error_status == 0) 02151 yymsgp = yymsg; 02152 else if (yysyntax_error_status == 1) 02153 { 02154 if (yymsg != yymsgbuf) 02155 YYSTACK_FREE (yymsg); 02156 yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); 02157 if (!yymsg) 02158 { 02159 yymsg = yymsgbuf; 02160 yymsg_alloc = sizeof yymsgbuf; 02161 yysyntax_error_status = 2; 02162 } 02163 else 02164 { 02165 yysyntax_error_status = YYSYNTAX_ERROR; 02166 yymsgp = yymsg; 02167 } 02168 } 02169 yyerror (yymsgp); 02170 if (yysyntax_error_status == 2) 02171 goto yyexhaustedlab; 02172 } 02173 # undef YYSYNTAX_ERROR 02174 #endif 02175 } 02176 02177 02178 02179 if (yyerrstatus == 3) 02180 { 02181 /* If just tried and failed to reuse lookahead token after an 02182 error, discard it. */ 02183 02184 if (yychar <= YYEOF) 02185 { 02186 /* Return failure if at end of input. */ 02187 if (yychar == YYEOF) 02188 YYABORT; 02189 } 02190 else 02191 { 02192 yydestruct ("Error: discarding", 02193 yytoken, &yylval); 02194 yychar = YYEMPTY; 02195 } 02196 } 02197 02198 /* Else will try to reuse lookahead token after shifting the error 02199 token. */ 02200 goto yyerrlab1; 02201 02202 02203 /*---------------------------------------------------. 02204 | yyerrorlab -- error raised explicitly by YYERROR. | 02205 `---------------------------------------------------*/ 02206 yyerrorlab: 02207 02208 /* Pacify compilers like GCC when the user code never invokes 02209 YYERROR and the label yyerrorlab therefore never appears in user 02210 code. */ 02211 if (/*CONSTCOND*/ 0) 02212 goto yyerrorlab; 02213 02214 /* Do not reclaim the symbols of the rule which action triggered 02215 this YYERROR. */ 02216 YYPOPSTACK (yylen); 02217 yylen = 0; 02218 YY_STACK_PRINT (yyss, yyssp); 02219 yystate = *yyssp; 02220 goto yyerrlab1; 02221 02222 02223 /*-------------------------------------------------------------. 02224 | yyerrlab1 -- common code for both syntax error and YYERROR. | 02225 `-------------------------------------------------------------*/ 02226 yyerrlab1: 02227 yyerrstatus = 3; /* Each real token shifted decrements this. */ 02228 02229 for (;;) 02230 { 02231 yyn = yypact[yystate]; 02232 if (!yypact_value_is_default (yyn)) 02233 { 02234 yyn += YYTERROR; 02235 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) 02236 { 02237 yyn = yytable[yyn]; 02238 if (0 < yyn) 02239 break; 02240 } 02241 } 02242 02243 /* Pop the current state because it cannot handle the error token. */ 02244 if (yyssp == yyss) 02245 YYABORT; 02246 02247 02248 yydestruct ("Error: popping", 02249 yystos[yystate], yyvsp); 02250 YYPOPSTACK (1); 02251 yystate = *yyssp; 02252 YY_STACK_PRINT (yyss, yyssp); 02253 } 02254 02255 *++yyvsp = yylval; 02256 02257 02258 /* Shift the error token. */ 02259 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); 02260 02261 yystate = yyn; 02262 goto yynewstate; 02263 02264 02265 /*-------------------------------------. 02266 | yyacceptlab -- YYACCEPT comes here. | 02267 `-------------------------------------*/ 02268 yyacceptlab: 02269 yyresult = 0; 02270 goto yyreturn; 02271 02272 /*-----------------------------------. 02273 | yyabortlab -- YYABORT comes here. | 02274 `-----------------------------------*/ 02275 yyabortlab: 02276 yyresult = 1; 02277 goto yyreturn; 02278 02279 #if !defined(yyoverflow) || YYERROR_VERBOSE 02280 /*-------------------------------------------------. 02281 | yyexhaustedlab -- memory exhaustion comes here. | 02282 `-------------------------------------------------*/ 02283 yyexhaustedlab: 02284 yyerror (YY_("memory exhausted")); 02285 yyresult = 2; 02286 /* Fall through. */ 02287 #endif 02288 02289 yyreturn: 02290 if (yychar != YYEMPTY) 02291 { 02292 /* Make sure we have latest lookahead translation. See comments at 02293 user semantic actions for why this is necessary. */ 02294 yytoken = YYTRANSLATE (yychar); 02295 yydestruct ("Cleanup: discarding lookahead", 02296 yytoken, &yylval); 02297 } 02298 /* Do not reclaim the symbols of the rule which action triggered 02299 this YYABORT or YYACCEPT. */ 02300 YYPOPSTACK (yylen); 02301 YY_STACK_PRINT (yyss, yyssp); 02302 while (yyssp != yyss) 02303 { 02304 yydestruct ("Cleanup: popping", 02305 yystos[*yyssp], yyvsp); 02306 YYPOPSTACK (1); 02307 } 02308 #ifndef yyoverflow 02309 if (yyss != yyssa) 02310 YYSTACK_FREE (yyss); 02311 #endif 02312 #if YYERROR_VERBOSE 02313 if (yymsg != yymsgbuf) 02314 YYSTACK_FREE (yymsg); 02315 #endif 02316 /* Make sure YYID is used. */ 02317 return YYID (yyresult); 02318 } 02319 02320 02321 02322 /* Line 2067 of yacc.c */ 02323 #line 487 "../../lib/graph/parser.y" 02324 02325 #ifdef UNUSED 02326 /* grammar allowing port variants */ 02327 /* at present, these are not used, so we remove them from the grammar */ 02328 /* NOTE: If used, these should be rewritten to take into account the */ 02329 /* move away from using ':' in the string and that symbols come from */ 02330 /* agstrdup and need to be freed. */ 02331 node_port : /* empty */ 02332 | port_location 02333 | port_angle /* undocumented */ 02334 | port_angle port_location /* undocumented */ 02335 | port_location port_angle /* undocumented */ 02336 ; 02337 02338 port_location : ':' symbol {strcat(Port,":"); strcat(Port,$2);} 02339 | ':' '(' symbol {Symbol = strdup($3);} ',' symbol ')' 02340 { char buf[SMALLBUF]; 02341 sprintf(buf,":(%s,%s)",Symbol,$6); 02342 strcat(Port,buf); free(Symbol); 02343 } 02344 ; 02345 02346 port_angle : '@' symbol 02347 { char buf[SMALLBUF]; 02348 sprintf(buf,"@%s",$2); 02349 strcat(Port,buf); 02350 } 02351 ; 02352 02353 #endif 02354
1.7.5