? graphviz_digraph_parser.cpp.h ? graphviz_digraph_parser.cpp.output ? graphviz_graph_parser.cpp.h ? graphviz_graph_parser.cpp.output Index: graphviz_digraph_parser.cpp =================================================================== RCS file: /cvsroot/boost/boost/libs/graph/src/graphviz_digraph_parser.cpp,v retrieving revision 1.10.4.2 retrieving revision 1.13 diff -u -r1.10.4.2 -r1.13 --- graphviz_digraph_parser.cpp 29 Oct 2004 12:44:12 -0000 1.10.4.2 +++ graphviz_digraph_parser.cpp 8 Feb 2005 14:52:28 -0000 1.13 @@ -1,3 +1,26 @@ + +/* A Bison parser, made from graphviz_parser.yy + by GNU Bison version 1.28 */ + +#define YYBISON 1 /* Identify Bison output. */ + +#define yyparse bgl_dir_parse +#define yylex bgl_dir_lex +#define yyerror bgl_dir_error +#define yylval bgl_dir_lval +#define yychar bgl_dir_char +#define yydebug bgl_dir_debug +#define yynerrs bgl_dir_nerrs +#define GRAPH_T 257 +#define NODE_T 258 +#define EDGE_T 259 +#define DIGRAPH_T 260 +#define EDGEOP_T 261 +#define SUBGRAPH_T 262 +#define ID_T 263 + +#line 1 "graphviz_parser.yy" + //======================================================================= // Copyright 2001 University of Notre Dame. // Author: Lie-Quan Lee @@ -23,59 +46,6 @@ // OR OTHER RIGHTS. //======================================================================= -/* Identify Bison output. */ -#define YYBISON 1 - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 1 - -/* Using locations. */ -#define YYLSP_NEEDED 0 - -/* If NAME_PREFIX is specified substitute the variables and functions - names. */ -#define yyparse bgl_dir_parse -#define yylex bgl_dir_lex -#define yyerror bgl_dir_error -#define yylval bgl_dir_lval -#define yychar bgl_dir_char -#define yydebug bgl_dir_debug -#define yynerrs bgl_dir_nerrs - - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - GRAPH_T = 258, - NODE_T = 259, - EDGE_T = 260, - DIGRAPH_T = 261, - EDGEOP_T = 262, - SUBGRAPH_T = 263, - ID_T = 264 - }; -#endif -#define GRAPH_T 258 -#define NODE_T 259 -#define EDGE_T 260 -#define DIGRAPH_T 261 -#define EDGEOP_T 262 -#define SUBGRAPH_T 263 -#define ID_T 264 - - - - -/* Copy the first part of user declarations. */ -#line 1 "graphviz_parser.yy" - - #include #include #include @@ -140,7 +110,7 @@ static const std::string& get_graph_name(const Subgraph& g) { const boost::graph_property::type& - name = boost::get_property(g, boost::graph_name); + name = boost::get_property(g, boost::graph_name); return name; } @@ -157,7 +127,7 @@ //set the label of vertex, it could be overwritten later. boost::property_map::type - va = boost::get(boost::vertex_attribute, g); + va = boost::get(boost::vertex_attribute, g); va[v]["label"] = name; //add v into the map so next time we will find it. @@ -181,85 +151,85 @@ static void set_attribute(GraphvizAttrList& p, - const GraphvizAttrList& attr) { + const GraphvizAttrList& attr) { GraphvizAttrList::const_iterator i, end; for ( i=attr.begin(), end=attr.end(); i!=end; ++i) - p[i->first]=i->second; + p[i->first]=i->second; } static void set_attribute(Subgraph& g, - AttrState s, bool clear_attribute = true) { + AttrState s, bool clear_attribute = true) { typedef Subgraph Graph; switch ( s ) { case GRAPH_GRAPH_A: - { - boost::graph_property::type& - gga = boost::get_property(g, boost::graph_graph_attribute); - set_attribute(gga, attributes); - } - break; + { + boost::graph_property::type& + gga = boost::get_property(g, boost::graph_graph_attribute); + set_attribute(gga, attributes); + } + break; case GRAPH_NODE_A: - { - boost::graph_property::type& - gna = boost::get_property(g, boost::graph_vertex_attribute); - set_attribute(gna, attributes); - } - break; + { + boost::graph_property::type& + gna = boost::get_property(g, boost::graph_vertex_attribute); + set_attribute(gna, attributes); + } + break; case GRAPH_EDGE_A: - { - boost::graph_property::type& - gea = boost::get_property(g, boost::graph_edge_attribute); - set_attribute(gea, attributes); - } - break; + { + boost::graph_property::type& + gea = boost::get_property(g, boost::graph_edge_attribute); + set_attribute(gea, attributes); + } + break; case NODE_A: - { - boost::property_map::type - va = boost::get(boost::vertex_attribute, g); //va[v] - set_attribute(va[current_vertex], attributes); - } - break; + { + boost::property_map::type + va = boost::get(boost::vertex_attribute, g); //va[v] + set_attribute(va[current_vertex], attributes); + } + break; case EDGE_A: - { - boost::property_map::type - ea = boost::get(boost::edge_attribute, g); //ea[e] - set_attribute(ea[current_edge], attributes); - } - break; + { + boost::property_map::type + ea = boost::get(boost::edge_attribute, g); //ea[e] + set_attribute(ea[current_edge], attributes); + } + break; } if ( clear_attribute ) - attributes.clear(); + attributes.clear(); } static void add_edges(const Vertex& u, - const Vertex& v, GRAPHVIZ_GRAPH& g) { + const Vertex& v, GRAPHVIZ_GRAPH& g) { graphviz::current_edge = boost::add_edge(u, v, g).first; graphviz::set_attribute(g, EDGE_A, false); } static void add_edges(Subgraph* G1, Subgraph* G2, - GRAPHVIZ_GRAPH& g) { + GRAPHVIZ_GRAPH& g) { boost::graph_traits::vertex_iterator i, j, m, n; for ( boost::tie(i, j) = boost::vertices(*G1); i != j; ++i) { - for ( boost::tie(m, n) = boost::vertices(*G2); m != n; ++m) { - graphviz::add_edges(G1->local_to_global(*i), - G2->local_to_global(*m), g); - } + for ( boost::tie(m, n) = boost::vertices(*G2); m != n; ++m) { + graphviz::add_edges(G1->local_to_global(*i), + G2->local_to_global(*m), g); + } } } static void add_edges(Subgraph* G, const Vertex& v, GRAPHVIZ_GRAPH& g) { boost::graph_traits::vertex_iterator i, j; for ( boost::tie(i, j) = boost::vertices(*G); i != j; ++i) { - graphviz::add_edges(G->local_to_global(*i), v, g); + graphviz::add_edges(G->local_to_global(*i), v, g); } } static void add_edges(const Vertex& u, Subgraph* G, GRAPHVIZ_GRAPH& g) { boost::graph_traits::vertex_iterator i, j; for ( boost::tie(i, j) = boost::vertices(*G); i != j; ++i) { - graphviz::add_edges(u, G->local_to_global(*i), g); + graphviz::add_edges(u, G->local_to_global(*i), g); } } @@ -282,866 +252,587 @@ static void set_graph_name(const std::string& name) { boost::graph_property::type& - gea = boost::get_property(*current_graph, boost::graph_name); + gea = boost::get_property(*current_graph, boost::graph_name); gea = name; } } //namespace detail { +#include - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 +#ifndef __cplusplus +#ifndef __STDC__ +#define const #endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 #endif -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -typedef int YYSTYPE; -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - - - -/* Copy the second part of user declarations. */ - -/* Line 214 of yacc.c. */ -#line 354 "graphviz_digraph_parser.cpp" -#if ! defined (yyoverflow) || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# if YYSTACK_USE_ALLOCA -# define YYSTACK_ALLOC alloca -# else -# ifndef YYSTACK_USE_ALLOCA -# if defined (alloca) || defined (_ALLOCA_H) -# define YYSTACK_ALLOC alloca -# else -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# else -# if defined (__STDC__) || defined (__cplusplus) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -# define YYSTACK_ALLOC malloc -# define YYSTACK_FREE free -# endif -#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ - - -#if (! defined (yyoverflow) \ - && (! defined (__cplusplus) \ - || (YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - short yyss; - YYSTYPE yyvs; - }; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - register YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (0) -# endif -# endif - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) - -#endif - -#if defined (__STDC__) || defined (__cplusplus) - typedef signed char yysigned_char; -#else - typedef short yysigned_char; -#endif - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 6 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 58 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 18 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 28 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 47 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 66 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 264 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const unsigned char yytranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 17, 12, - 2, 15, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 13, 2, 14, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 10, 2, 11, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9 +#define YYFINAL 67 +#define YYFLAG -32768 +#define YYNTBASE 18 + +#define YYTRANSLATE(x) ((unsigned)(x) <= 263 ? yytranslate[x] : 46) + +static const char yytranslate[] = { 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 17, 12, 2, + 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 13, 2, 14, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 10, 2, 11, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 3, 4, 5, 6, + 7, 8, 9 }; -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const unsigned char yyprhs[] = -{ - 0, 0, 3, 6, 10, 13, 15, 17, 19, 20, - 23, 25, 27, 28, 31, 34, 39, 41, 43, 45, - 47, 51, 55, 57, 59, 60, 62, 64, 66, 68, - 70, 73, 77, 78, 80, 82, 86, 90, 93, 95, - 98, 100, 102, 105, 106, 109, 112, 114 +#if YYDEBUG != 0 +static const short yyprhs[] = { 0, + 0, 3, 7, 10, 12, 14, 16, 17, 20, 22, + 24, 25, 28, 31, 36, 38, 40, 42, 44, 45, + 47, 51, 55, 57, 59, 60, 62, 64, 66, 68, + 70, 73, 77, 78, 80, 82, 86, 90, 93, 95, + 98, 100, 102, 105, 106, 109, 112, 114 }; -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yysigned_char yyrhs[] = -{ - 19, 0, -1, 21, 20, -1, 10, 24, 11, -1, - 22, 23, -1, 3, -1, 6, -1, 9, -1, -1, - 24, 26, -1, 26, -1, 12, -1, -1, 27, 25, - -1, 32, 25, -1, 28, 13, 29, 14, -1, 3, - -1, 4, -1, 5, -1, 30, -1, 29, 31, 30, - -1, 9, 15, 9, -1, 12, -1, 16, -1, -1, - 34, -1, 38, -1, 33, -1, 42, -1, 30, -1, - 36, 35, -1, 13, 29, 14, -1, -1, 9, -1, - 37, -1, 9, 17, 9, -1, 41, 40, 35, -1, - 7, 41, -1, 39, -1, 40, 39, -1, 36, -1, - 42, -1, 44, 45, -1, -1, 43, 20, -1, 8, - 9, -1, 20, -1, -1 +static const short yyrhs[] = { 20, + 19, 0, 10, 23, 11, 0, 21, 22, 0, 3, + 0, 6, 0, 9, 0, 0, 23, 25, 0, 25, + 0, 12, 0, 0, 26, 24, 0, 32, 24, 0, + 27, 13, 28, 14, 0, 3, 0, 4, 0, 5, + 0, 29, 0, 0, 30, 0, 29, 31, 30, 0, + 9, 15, 9, 0, 12, 0, 16, 0, 0, 34, + 0, 38, 0, 33, 0, 42, 0, 30, 0, 36, + 35, 0, 13, 28, 14, 0, 0, 9, 0, 37, + 0, 9, 17, 9, 0, 41, 40, 35, 0, 7, + 41, 0, 39, 0, 40, 39, 0, 36, 0, 42, + 0, 44, 45, 0, 0, 43, 19, 0, 8, 9, + 0, 19, 0, 0 }; -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const unsigned short yyrline[] = -{ - 0, 254, 254, 257, 260, 274, 274, 277, 277, 280, - 280, 283, 283, 286, 287, 290, 297, 298, 299, 302, - 302, 305, 315, 315, 315, 318, 318, 318, 318, 321, - 329, 340, 340, 343, 358, 361, 380, 425, 429, 429, - 432, 441, 452, 460, 460, 474, 495, 495 -}; #endif -#if YYDEBUG || YYERROR_VERBOSE -/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "$end", "error", "$undefined", "GRAPH_T", "NODE_T", "EDGE_T", "DIGRAPH_T", - "EDGEOP_T", "SUBGRAPH_T", "ID_T", "'{'", "'}'", "';'", "'['", "']'", - "'='", "','", "':'", "$accept", "graph", "graph_body", "graph_header", - "graph_type", "graph_name", "stmt_list", "semicolon", "stmt", - "attr_stmt", "attr_header", "attr_list", "attr", "attr_separator", - "compound_stmt", "graph_attr", "node_stmt", "opt_attr", "node_id", - "node_port", "edge_stmt", "edge_rhs_one", "edge_rhs", "edge_endpoint", - "subgraph", "@1", "subgraph_header", "opt_graph_body", 0 +#if YYDEBUG != 0 +static const short yyrline[] = { 0, + 255, 258, 261, 275, 275, 278, 278, 281, 281, 284, + 284, 287, 287, 291, 298, 299, 300, 303, 303, 306, + 306, 309, 319, 319, 319, 322, 322, 322, 322, 325, + 333, 344, 344, 347, 362, 365, 384, 429, 433, 433, + 436, 445, 456, 463, 473, 478, 499, 499 }; #endif -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const unsigned short yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 123, 125, 59, 91, 93, 61, 44, 58 -}; -# endif -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const unsigned char yyr1[] = -{ - 0, 18, 19, 20, 21, 22, 22, 23, 23, 24, - 24, 25, 25, 26, 26, 27, 28, 28, 28, 29, - 29, 30, 31, 31, 31, 32, 32, 32, 32, 33, - 34, 35, 35, 36, 36, 37, 38, 39, 40, 40, - 41, 41, 42, 43, 42, 44, 45, 45 -}; +#if YYDEBUG != 0 || defined (YYERROR_VERBOSE) -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const unsigned char yyr2[] = -{ - 0, 2, 2, 3, 2, 1, 1, 1, 0, 2, - 1, 1, 0, 2, 2, 4, 1, 1, 1, 1, - 3, 3, 1, 1, 0, 1, 1, 1, 1, 1, - 2, 3, 0, 1, 1, 3, 3, 2, 1, 2, - 1, 1, 2, 0, 2, 2, 1, 0 +static const char * const yytname[] = { "$","error","$undefined.","GRAPH_T", +"NODE_T","EDGE_T","DIGRAPH_T","EDGEOP_T","SUBGRAPH_T","ID_T","'{'","'}'","';'", +"'['","']'","'='","','","':'","graph","graph_body","graph_header","graph_type", +"graph_name","stmt_list","semicolon","stmt","attr_stmt","attr_header","attr_list", +"nonempty_attr_list","attr","attr_separator","compound_stmt","graph_attr","node_stmt", +"opt_attr","node_id","node_port","edge_stmt","edge_rhs_one","edge_rhs","edge_endpoint", +"subgraph","@1","subgraph_header","opt_graph_body", NULL }; +#endif -/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state - STATE-NUM when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const unsigned char yydefact[] = -{ - 0, 5, 6, 0, 0, 8, 1, 43, 2, 7, - 4, 16, 17, 18, 0, 33, 43, 10, 12, 0, - 29, 12, 27, 25, 32, 34, 26, 0, 28, 0, - 47, 45, 0, 0, 3, 9, 11, 13, 0, 14, - 0, 30, 43, 38, 32, 44, 46, 42, 21, 35, - 0, 24, 19, 24, 33, 40, 37, 41, 36, 39, - 22, 15, 23, 0, 31, 20 +static const short yyr1[] = { 0, + 18, 19, 20, 21, 21, 22, 22, 23, 23, 24, + 24, 25, 25, 26, 27, 27, 27, 28, 28, 29, + 29, 30, 31, 31, 31, 32, 32, 32, 32, 33, + 34, 35, 35, 36, 36, 37, 38, 39, 40, 40, + 41, 41, 42, 43, 42, 44, 45, 45 }; -/* YYDEFGOTO[NTERM-NUM]. */ -static const yysigned_char yydefgoto[] = -{ - -1, 3, 8, 4, 5, 10, 16, 37, 17, 18, - 19, 51, 20, 63, 21, 22, 23, 41, 24, 25, - 26, 43, 44, 27, 28, 29, 30, 47 +static const short yyr2[] = { 0, + 2, 3, 2, 1, 1, 1, 0, 2, 1, 1, + 0, 2, 2, 4, 1, 1, 1, 1, 0, 1, + 3, 3, 1, 1, 0, 1, 1, 1, 1, 1, + 2, 3, 0, 1, 1, 3, 3, 2, 1, 2, + 1, 1, 2, 0, 2, 2, 1, 0 }; -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -39 -static const yysigned_char yypact[] = -{ - 23, -39, -39, 6, 17, 22, -39, 9, -39, -39, - -39, -39, -39, -39, 27, 13, 0, -39, 25, 2, - -39, 25, -39, -39, -6, -39, -39, 31, 32, 17, - 17, -39, 33, 34, -39, -39, -39, -39, 35, -39, - 35, -39, 24, -39, 3, -39, -39, -39, -39, -39, - 26, 7, -39, 8, 28, -39, -39, -39, -39, -39, - -39, -39, -39, 35, -39, -39 +static const short yydefact[] = { 0, + 4, 5, 0, 7, 44, 1, 6, 3, 15, 16, + 17, 0, 34, 44, 9, 11, 0, 30, 11, 28, + 26, 33, 35, 27, 0, 29, 0, 48, 46, 0, + 0, 2, 8, 10, 12, 19, 13, 19, 31, 44, + 39, 33, 45, 47, 43, 22, 36, 0, 0, 18, + 20, 0, 34, 41, 38, 42, 37, 40, 14, 23, + 24, 0, 32, 21, 0, 0, 0 }; -/* YYPGOTO[NTERM-NUM]. */ -static const yysigned_char yypgoto[] = -{ - -39, -39, 5, -39, -39, -39, -39, 19, 30, -39, - -39, 10, -38, -39, -39, -39, -39, 4, 11, -39, - -39, 12, -39, 15, 16, -39, -39, -39 +static const short yydefgoto[] = { 65, + 6, 3, 4, 8, 14, 35, 15, 16, 17, 49, + 50, 18, 62, 19, 20, 21, 39, 22, 23, 24, + 41, 42, 25, 26, 27, 28, 45 }; -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If zero, do what YYDEFACT says. - If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -42 -static const yysigned_char yytable[] = -{ - 52, -40, 52, 11, 12, 13, 6, 40, 14, 15, - 42, 34, 11, 12, 13, 38, 40, 14, 15, 60, - 60, 61, 64, 62, 62, 65, 1, 7, 32, 2, - 33, 9, 14, 54, 45, 46, 31, 36, 42, -41, - 39, 32, 48, 49, 50, 33, 35, 0, 58, 0, - 53, 0, 0, 55, 0, 0, 59, 56, 57 +static const short yypact[] = { 19, +-32768,-32768, -9, 9, 12,-32768,-32768,-32768,-32768,-32768, +-32768, 18, 13, 0,-32768, 17, 20,-32768, 17,-32768, +-32768, -1,-32768,-32768, 27, 28, -9, -9,-32768, 29, + 30,-32768,-32768,-32768,-32768, 31,-32768, 31,-32768, 15, +-32768, 6,-32768,-32768,-32768,-32768,-32768, 21, 23, -2, +-32768, 32, 24,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, 31,-32768,-32768, 42, 43,-32768 }; -static const yysigned_char yycheck[] = -{ - 38, 7, 40, 3, 4, 5, 0, 13, 8, 9, - 7, 11, 3, 4, 5, 13, 13, 8, 9, 12, - 12, 14, 14, 16, 16, 63, 3, 10, 15, 6, - 17, 9, 8, 9, 29, 30, 9, 12, 7, 7, - 21, 15, 9, 9, 9, 17, 16, -1, 44, -1, - 40, -1, -1, 42, -1, -1, 44, 42, 42 +static const short yypgoto[] = {-32768, + 4,-32768,-32768,-32768,-32768, 25, 33,-32768,-32768, 7, +-32768, -36,-32768,-32768,-32768,-32768, 8, 11,-32768,-32768, + 10,-32768, 14, 16,-32768,-32768,-32768 }; -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const unsigned char yystos[] = -{ - 0, 3, 6, 19, 21, 22, 0, 10, 20, 9, - 23, 3, 4, 5, 8, 9, 24, 26, 27, 28, - 30, 32, 33, 34, 36, 37, 38, 41, 42, 43, - 44, 9, 15, 17, 11, 26, 12, 25, 13, 25, - 13, 35, 7, 39, 40, 20, 20, 45, 9, 9, - 9, 29, 30, 29, 9, 36, 41, 42, 35, 39, - 12, 14, 16, 31, 14, 30 -}; -#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) -# define YYSIZE_T __SIZE_TYPE__ -#endif -#if ! defined (YYSIZE_T) && defined (size_t) -# define YYSIZE_T size_t -#endif -#if ! defined (YYSIZE_T) -# if defined (__STDC__) || defined (__cplusplus) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -#endif -#if ! defined (YYSIZE_T) -# define YYSIZE_T unsigned int -#endif +#define YYLAST 56 -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrlab1 +static const short yytable[] = { 51, + 5, 51, 9, 10, 11, -41, -25, 12, 13, 60, + 32, 38, 40, 61, 9, 10, 11, 7, 38, 12, + 13, 1, 12, 53, 2, 64, 29, 30, 34, 31, + 43, 44, 36, 40, -42, 30, 59, 46, 47, 48, + 31, 66, 67, 37, 52, 63, 33, 0, 0, 57, + 54, 58, 0, 55, 0, 56 +}; +static const short yycheck[] = { 36, + 10, 38, 3, 4, 5, 7, 9, 8, 9, 12, + 11, 13, 7, 16, 3, 4, 5, 9, 13, 8, + 9, 3, 8, 9, 6, 62, 9, 15, 12, 17, + 27, 28, 13, 7, 7, 15, 14, 9, 9, 9, + 17, 0, 0, 19, 38, 14, 14, -1, -1, 42, + 40, 42, -1, 40, -1, 40 +}; +#define YYPURE 1 -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ +/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ +#line 3 "/usr/share/bison.simple" +/* This file comes from bison-1.28. */ + +/* Skeleton output parser for bison, + Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* This is the parser code that is written into each bison parser + when the %semantic_parser declaration is not specified in the grammar. + It was written by Richard Stallman by simplifying the hairy parser + used when %semantic_parser is specified. */ + +#ifndef YYSTACK_USE_ALLOCA +#ifdef alloca +#define YYSTACK_USE_ALLOCA +#else /* alloca not defined */ +#ifdef __GNUC__ +#define YYSTACK_USE_ALLOCA +#define alloca __builtin_alloca +#else /* not GNU C. */ +#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) +#define YYSTACK_USE_ALLOCA +#include +#else /* not sparc */ +/* We think this test detects Watcom and Microsoft C. */ +/* This used to test MSDOS, but that is a bad idea + since that symbol is in the user namespace. */ +#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) +#if 0 /* No need for malloc.h, which pollutes the namespace; + instead, just don't use alloca. */ +#include +#endif +#else /* not MSDOS, or __TURBOC__ */ +#if defined(_AIX) +/* I don't know what this was needed for, but it pollutes the namespace. + So I turned it off. rms, 2 May 1997. */ +/* #include */ + #pragma alloca +#define YYSTACK_USE_ALLOCA +#else /* not MSDOS, or __TURBOC__, or _AIX */ +#if 0 +#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up, + and on HPUX 10. Eventually we can turn this on. */ +#define YYSTACK_USE_ALLOCA +#define alloca __builtin_alloca +#endif /* __hpux */ +#endif +#endif /* not _AIX */ +#endif /* not MSDOS, or __TURBOC__ */ +#endif /* not sparc */ +#endif /* not GNU C */ +#endif /* alloca not defined */ +#endif /* YYSTACK_USE_ALLOCA not defined */ -#define YYFAIL goto yyerrlab +#ifdef YYSTACK_USE_ALLOCA +#define YYSTACK_ALLOC alloca +#else +#define YYSTACK_ALLOC malloc +#endif +/* Note: there must be only one dollar sign in this file. + It is replaced by the list of actions, each action + as one case of the switch. */ + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY -2 +#define YYEOF 0 +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrlab1 +/* Like YYERROR except do call yyerror. + This remains here temporarily to ease the + transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ +#define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yytoken = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror ("syntax error: cannot back up");\ - YYERROR; \ - } \ +#define YYBACKUP(token, value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { yychar = (token), yylval = (value); \ + yychar1 = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { yyerror ("syntax error: cannot back up"); YYERROR; } \ while (0) -#define YYTERROR 1 -#define YYERRCODE 256 - -/* YYLLOC_DEFAULT -- Compute the default location (before the actions - are run). */ +#define YYTERROR 1 +#define YYERRCODE 256 -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - Current.first_line = Rhs[1].first_line; \ - Current.first_column = Rhs[1].first_column; \ - Current.last_line = Rhs[N].last_line; \ - Current.last_column = Rhs[N].last_column; +#ifndef YYPURE +#define YYLEX yylex() #endif -/* YYLEX -- calling `yylex' with the right arguments. */ - +#ifdef YYPURE +#ifdef YYLSP_NEEDED #ifdef YYLEX_PARAM -# define YYLEX yylex (&yylval, YYLEX_PARAM) +#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) #else -# define YYLEX yylex (&yylval) +#define YYLEX yylex(&yylval, &yylloc) +#endif +#else /* not YYLSP_NEEDED */ +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, YYLEX_PARAM) +#else +#define YYLEX yylex(&yylval) +#endif +#endif /* not YYLSP_NEEDED */ #endif -/* Enable debugging if requested. */ -#if YYDEBUG +/* If nonreentrant, generate the variables here */ -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - -# define YYDSYMPRINT(Args) \ -do { \ - if (yydebug) \ - yysymprint Args; \ -} while (0) - -# define YYDSYMPRINTF(Title, Token, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yysymprint (stderr, \ - Token, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (cinluded). | -`------------------------------------------------------------------*/ +#ifndef YYPURE -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_stack_print (short *bottom, short *top) -#else -static void -yy_stack_print (bottom, top) - short *bottom; - short *top; +int yychar; /* the lookahead symbol */ +YYSTYPE yylval; /* the semantic value of the */ + /* lookahead symbol */ + +#ifdef YYLSP_NEEDED +YYLTYPE yylloc; /* location data for the lookahead */ + /* symbol */ #endif -{ - YYFPRINTF (stderr, "Stack now"); - for (/* Nothing. */; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); - YYFPRINTF (stderr, "\n"); -} -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) +int yynerrs; /* number of parse errors so far */ +#endif /* not YYPURE */ +#if YYDEBUG != 0 +int yydebug; /* nonzero means print parse trace */ +/* Since this is uninitialized, it does not stop multiple parsers + from coexisting. */ +#endif -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ +/* YYINITDEPTH indicates the initial size of the parser's stacks */ -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_reduce_print (int yyrule) -#else -static void -yy_reduce_print (yyrule) - int yyrule; +#ifndef YYINITDEPTH +#define YYINITDEPTH 200 #endif -{ - int yyi; - unsigned int yylineno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", - yyrule - 1, yylineno); - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) - YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); - YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); -} -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (Rule); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YYDSYMPRINT(Args) -# define YYDSYMPRINTF(Title, Token, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ +/* YYMAXDEPTH is the maximum size the stacks can grow to + (effective only if the built-in stack extension method is used). */ #if YYMAXDEPTH == 0 -# undef YYMAXDEPTH +#undef YYMAXDEPTH #endif #ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 +#define YYMAXDEPTH 10000 #endif - +/* Define __yy_memcpy. Note that the size argument + should be passed with type unsigned int, because that is what the non-GCC + definitions require. With GCC, __builtin_memcpy takes an arg + of type size_t, but it can handle unsigned int. */ + +#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ +#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) +#else /* not GNU C or C++ */ +#ifndef __cplusplus -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined (__GLIBC__) && defined (_STRING_H) -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -# if defined (__STDC__) || defined (__cplusplus) -yystrlen (const char *yystr) -# else -yystrlen (yystr) - const char *yystr; -# endif -{ - register const char *yys = yystr; - - while (*yys++ != '\0') - continue; - - return yys - yystr - 1; -} -# endif -# endif - -# ifndef yystpcpy -# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -# if defined (__STDC__) || defined (__cplusplus) -yystpcpy (char *yydest, const char *yysrc) -# else -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -# endif -{ - register char *yyd = yydest; - register const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_memcpy (to, from, count) + char *to; + char *from; + unsigned int count; +{ + register char *f = from; + register char *t = to; + register int i = count; - return yyd - 1; + while (i-- > 0) + *t++ = *f++; } -# endif -# endif -#endif /* !YYERROR_VERBOSE */ - - +#else /* __cplusplus */ -#if YYDEBUG -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) -#else +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ static void -yysymprint (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE *yyvaluep; -#endif +__yy_memcpy (char *to, char *from, unsigned int count) { - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; + register char *t = to; + register char *f = from; + register int i = count; - if (yytype < YYNTOKENS) - { - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); -# ifdef YYPRINT - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# endif - } - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - - switch (yytype) - { - default: - break; - } - YYFPRINTF (yyoutput, ")"); + while (i-- > 0) + *t++ = *f++; } -#endif /* ! YYDEBUG */ -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yydestruct (int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yytype, yyvaluep) - int yytype; - YYSTYPE *yyvaluep; #endif -{ - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - switch (yytype) - { - - default: - break; - } -} +#endif +#line 217 "/usr/share/bison.simple" -/* Prevent warnings from -Wmissing-prototypes. */ +/* The user can define YYPARSE_PARAM as the name of an argument to be passed + into yyparse. The argument should have type void *. + It should actually point to an object. + Grammar actions can access the variable by casting it + to the proper pointer type. */ #ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM); -# else -int yyparse (); -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - - - - - - -/*----------. -| yyparse. | -`----------*/ +#ifdef __cplusplus +#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM +#define YYPARSE_PARAM_DECL +#else /* not __cplusplus */ +#define YYPARSE_PARAM_ARG YYPARSE_PARAM +#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; +#endif /* not __cplusplus */ +#else /* not YYPARSE_PARAM */ +#define YYPARSE_PARAM_ARG +#define YYPARSE_PARAM_DECL +#endif /* not YYPARSE_PARAM */ +/* Prevent warning if -Wstrict-prototypes. */ +#ifdef __GNUC__ #ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM) -# else -int yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int -yyparse (void) +int yyparse (void *); #else -int -yyparse () - +int yyparse (void); #endif #endif -{ - /* The lookahead symbol. */ -int yychar; - -/* The semantic value of the lookahead symbol. */ -YYSTYPE yylval; - -/* Number of syntax errors so far. */ -int yynerrs; +int +yyparse(YYPARSE_PARAM_ARG) + YYPARSE_PARAM_DECL +{ register int yystate; register int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; - - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - short yyssa[YYINITDEPTH]; - short *yyss = yyssa; register short *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; register YYSTYPE *yyvsp; + int yyerrstatus; /* number of tokens to shift before error messages enabled */ + int yychar1 = 0; /* lookahead token as an internal (translated) token number */ + short yyssa[YYINITDEPTH]; /* the state stack */ + YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ + short *yyss = yyssa; /* refer to the stacks thru separate pointers */ + YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ +#ifdef YYLSP_NEEDED + YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp; + +#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) +#else #define YYPOPSTACK (yyvsp--, yyssp--) +#endif - YYSIZE_T yystacksize = YYINITDEPTH; + int yystacksize = YYINITDEPTH; + int yyfree_stacks = 0; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; +#ifdef YYPURE + int yychar; + YYSTYPE yylval; + int yynerrs; +#ifdef YYLSP_NEEDED + YYLTYPE yylloc; +#endif +#endif + YYSTYPE yyval; /* the variable used to return */ + /* semantic values from the action */ + /* routines */ - /* When reducing, the number of symbols on the RHS of the reduced - rule. */ int yylen; - YYDPRINTF ((stderr, "Starting parse\n")); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Starting parse\n"); +#endif yystate = 0; yyerrstatus = 0; yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ + yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ - yyssp = yyss; + yyssp = yyss - 1; yyvsp = yyvs; +#ifdef YYLSP_NEEDED + yylsp = yyls; +#endif - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. - */ - yyssp++; +/* Push a new state, which is found in yystate . */ +/* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. */ +yynewstate: - yysetstate: - *yyssp = yystate; + *++yyssp = yystate; - if (yyss + yystacksize - 1 <= yyssp) + if (yyssp >= yyss + yystacksize - 1) { + /* Give user a chance to reallocate the stack */ + /* Use copies of these so that the &'s don't force the real ones into memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; +#ifdef YYLSP_NEEDED + YYLTYPE *yyls1 = yyls; +#endif + /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; + int size = yyssp - yyss + 1; #ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - short *yyss1 = yyss; - - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow ("parser stack overflow", - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - - &yystacksize); + /* Each stack pointer address is followed by the size of + the data in use in that stack, in bytes. */ +#ifdef YYLSP_NEEDED + /* This used to be a conditional around just the two extra args, + but that might be undefined if yyoverflow is a macro. */ + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yyls1, size * sizeof (*yylsp), + &yystacksize); +#else + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yystacksize); +#endif - yyss = yyss1; - yyvs = yyvs1; - } + yyss = yyss1; yyvs = yyvs1; +#ifdef YYLSP_NEEDED + yyls = yyls1; +#endif #else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyoverflowlab; -# else /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyoverflowlab; + if (yystacksize >= YYMAXDEPTH) + { + yyerror("parser stack overflow"); + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); +#endif + } + return 2; + } yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - short *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyoverflowlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif + if (yystacksize > YYMAXDEPTH) + yystacksize = YYMAXDEPTH; +#ifndef YYSTACK_USE_ALLOCA + yyfree_stacks = 1; +#endif + yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); + __yy_memcpy ((char *)yyss, (char *)yyss1, + size * (unsigned int) sizeof (*yyssp)); + yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); + __yy_memcpy ((char *)yyvs, (char *)yyvs1, + size * (unsigned int) sizeof (*yyvsp)); +#ifdef YYLSP_NEEDED + yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); + __yy_memcpy ((char *)yyls, (char *)yyls1, + size * (unsigned int) sizeof (*yylsp)); +#endif #endif /* no yyoverflow */ - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - + yyssp = yyss + size - 1; + yyvsp = yyvs + size - 1; +#ifdef YYLSP_NEEDED + yylsp = yyls + size - 1; +#endif - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Stack size increased to %d\n", yystacksize); +#endif - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; + if (yyssp >= yyss + yystacksize - 1) + YYABORT; } - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Entering state %d\n", yystate); +#endif goto yybackup; - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: + yybackup: /* Do appropriate processing given the current state. */ /* Read a lookahead token if we need one and don't already have one. */ @@ -1150,104 +841,139 @@ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) + if (yyn == YYFLAG) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + /* yychar is either YYEMPTY or YYEOF + or a valid token in external form. */ + if (yychar == YYEMPTY) { - YYDPRINTF ((stderr, "Reading a token: ")); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Reading a token: "); +#endif yychar = YYLEX; } - if (yychar <= YYEOF) + /* Convert token to internal form (in yychar1) for indexing tables with */ + + if (yychar <= 0) /* This means end of input. */ { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); + yychar1 = 0; + yychar = YYEOF; /* Don't call YYLEX any more */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Now at end of input.\n"); +#endif } else { - yytoken = YYTRANSLATE (yychar); - YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); + yychar1 = YYTRANSLATE(yychar); + +#if YYDEBUG != 0 + if (yydebug) + { + fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); + /* Give the individual parser a way to print the precise meaning + of a token, for further debugging info. */ +#ifdef YYPRINT + YYPRINT (stderr, yychar, yylval); +#endif + fprintf (stderr, ")\n"); + } +#endif } - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + yyn += yychar1; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) goto yydefault; + yyn = yytable[yyn]; - if (yyn <= 0) + + /* yyn is what to do for this token type in this state. + Negative => reduce, -yyn is rule number. + Positive => shift, yyn is new state. + New state is final state => don't bother to shift, + just return success. + 0, or most negative number => error. */ + + if (yyn < 0) { - if (yyn == 0 || yyn == YYTABLE_NINF) - goto yyerrlab; + if (yyn == YYFLAG) + goto yyerrlab; yyn = -yyn; goto yyreduce; } + else if (yyn == 0) + goto yyerrlab; if (yyn == YYFINAL) YYACCEPT; /* Shift the lookahead token. */ - YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); +#endif /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; + /* count tokens shifted since error; after three, turn off error status. */ + if (yyerrstatus) yyerrstatus--; yystate = yyn; goto yynewstate; - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ +/* Do the default action for the current state. */ yydefault: + yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; - goto yyreduce; - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ +/* Do a reduction. yyn is the number of a rule to reduce with. */ yyreduce: - /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; + if (yylen > 0) + yyval = yyvsp[1-yylen]; /* implement default value of the action */ + +#if YYDEBUG != 0 + if (yydebug) + { + int i; - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. + fprintf (stderr, "Reducing via rule %d (line %d), ", + yyn, yyrline[yyn]); - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; + /* Print the symbols being reduced, and their result. */ + for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) + fprintf (stderr, "%s ", yytname[yyrhs[i]]); + fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); + } +#endif - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 3: -#line 257 "graphviz_parser.yy" - {yyval.i=0;;} - break; + switch (yyn) { - case 4: -#line 261 "graphviz_parser.yy" - { +case 2: +#line 258 "graphviz_parser.yy" +{yyval.i=0;; + break;} +case 3: +#line 262 "graphviz_parser.yy" +{ graphviz::vlist.clear(); graphviz::attributes.clear(); graphviz::subgraphs.clear(); @@ -1257,115 +983,104 @@ graphviz::current_graph = static_cast(g); graphviz::set_graph_name(*name); delete name; - ;} - break; - - case 7: -#line 277 "graphviz_parser.yy" - {yyval.ptr = yyvsp[0].ptr; ;} - break; - - case 8: -#line 277 "graphviz_parser.yy" - {yyval.ptr=(void*)(new std::string("G")); ;} - break; - - case 15: -#line 291 "graphviz_parser.yy" - { + ; + break;} +case 6: +#line 278 "graphviz_parser.yy" +{yyval.ptr = yyvsp[0].ptr; ; + break;} +case 7: +#line 278 "graphviz_parser.yy" +{yyval.ptr=(void*)(new std::string("G")); ; + break;} +case 14: +#line 292 "graphviz_parser.yy" +{ graphviz::set_attribute(*graphviz::current_graph, - graphviz::attribute_state); - ;} - break; - - case 16: -#line 297 "graphviz_parser.yy" - { graphviz::attribute_state = GRAPH_GRAPH_A; ;} - break; - - case 17: + graphviz::attribute_state); + ; + break;} +case 15: #line 298 "graphviz_parser.yy" - { graphviz::attribute_state = GRAPH_NODE_A; ;} - break; - - case 18: +{ graphviz::attribute_state = GRAPH_GRAPH_A; ; + break;} +case 16: #line 299 "graphviz_parser.yy" - { graphviz::attribute_state = GRAPH_EDGE_A; ;} - break; - - case 21: -#line 306 "graphviz_parser.yy" - { +{ graphviz::attribute_state = GRAPH_NODE_A; ; + break;} +case 17: +#line 300 "graphviz_parser.yy" +{ graphviz::attribute_state = GRAPH_EDGE_A; ; + break;} +case 19: +#line 303 "graphviz_parser.yy" +{; + break;} +case 22: +#line 310 "graphviz_parser.yy" +{ std::string* name = static_cast(yyvsp[-2].ptr); std::string* value = static_cast(yyvsp[0].ptr); graphviz::attributes[*name] = *value; delete name; delete value; - ;} - break; - - case 28: -#line 318 "graphviz_parser.yy" - { yyval.i = 0; ;} - break; - - case 29: + ; + break;} +case 29: #line 322 "graphviz_parser.yy" - { +{ yyval.i = 0; ; + break;} +case 30: +#line 326 "graphviz_parser.yy" +{ graphviz::set_attribute( *static_cast(graphviz::current_graph), - GRAPH_GRAPH_A); - ;} - break; - - case 30: -#line 330 "graphviz_parser.yy" - { + GRAPH_GRAPH_A); + ; + break;} +case 31: +#line 334 "graphviz_parser.yy" +{ graphviz::Vertex* temp = static_cast(yyvsp[-1].ptr); graphviz::current_vertex = *temp; graphviz::set_attribute(*static_cast(YYPARSE_PARAM), - NODE_A); + NODE_A); delete temp; yyval.i = 0; - ;} - break; - - case 31: -#line 340 "graphviz_parser.yy" - { yyval.i=0; ;} - break; - - case 32: -#line 340 "graphviz_parser.yy" - { yyval.i=0; ;} - break; - - case 33: + ; + break;} +case 32: #line 344 "graphviz_parser.yy" - { +{ yyval.i=0; ; + break;} +case 33: +#line 344 "graphviz_parser.yy" +{ yyval.i=0; ; + break;} +case 34: +#line 348 "graphviz_parser.yy" +{ std::string* name = static_cast(yyvsp[0].ptr); std::pair result = graphviz::lookup(*name); if (result.second) { graphviz::current_vertex = result.first->second; if (! graphviz::current_graph->is_root()) - boost::add_vertex(graphviz::current_vertex, *graphviz::current_graph); + boost::add_vertex(graphviz::current_vertex, *graphviz::current_graph); } else graphviz::current_vertex = graphviz::add_name(*name, *static_cast(YYPARSE_PARAM)) ; graphviz::Vertex* temp = new graphviz::Vertex(graphviz::current_vertex); yyval.ptr = (void *)temp; graphviz::attribute_state = NODE_A; delete name; - ;} - break; - - case 34: -#line 358 "graphviz_parser.yy" - { yyval.ptr=yyvsp[0].ptr; ;} - break; - - case 35: + ; + break;} +case 35: #line 362 "graphviz_parser.yy" - { +{ yyval.ptr=yyvsp[0].ptr; ; + break;} +case 36: +#line 366 "graphviz_parser.yy" +{ //consider port as a special properties ?? --need work here std::string* name = static_cast(yyvsp[-2].ptr); std::string* port = static_cast(yyvsp[0].ptr); @@ -1380,38 +1095,37 @@ graphviz::attribute_state = NODE_A; delete name; delete port; - ;} - break; - - case 36: -#line 381 "graphviz_parser.yy" - { + ; + break;} +case 37: +#line 385 "graphviz_parser.yy" +{ typedef std::pair* Ptr; Ptr source = static_cast(yyvsp[-2].ptr); for (std::vector::iterator it=graphviz::vlist.begin(); - it !=graphviz::vlist.end(); ++it) { + it !=graphviz::vlist.end(); ++it) { if ( source->second ) { - if ( (*it)->second ) - graphviz::add_edges(static_cast(source->first), - static_cast((*it)->first), - *static_cast(YYPARSE_PARAM)); - else - graphviz::add_edges(static_cast(source->first), - *static_cast((*it)->first), - *static_cast(YYPARSE_PARAM)); + if ( (*it)->second ) + graphviz::add_edges(static_cast(source->first), + static_cast((*it)->first), + *static_cast(YYPARSE_PARAM)); + else + graphviz::add_edges(static_cast(source->first), + *static_cast((*it)->first), + *static_cast(YYPARSE_PARAM)); } else { - graphviz::Vertex* temp = static_cast(source->first); - if ( (*it)->second ) - graphviz::add_edges(*temp, - static_cast((*it)->first), - *static_cast(YYPARSE_PARAM)); - else - graphviz::add_edges(*temp, - *static_cast((*it)->first), - *static_cast(YYPARSE_PARAM)); - delete temp; + graphviz::Vertex* temp = static_cast(source->first); + if ( (*it)->second ) + graphviz::add_edges(*temp, + static_cast((*it)->first), + *static_cast(YYPARSE_PARAM)); + else + graphviz::add_edges(*temp, + *static_cast((*it)->first), + *static_cast(YYPARSE_PARAM)); + delete temp; } delete source; @@ -1426,51 +1140,46 @@ graphviz::attributes.clear(); graphviz::vlist.clear(); - ;} - break; - - case 37: -#line 426 "graphviz_parser.yy" - { graphviz::vlist.push_back(static_cast*>(yyvsp[0].ptr)); ;} - break; - - case 40: -#line 433 "graphviz_parser.yy" - { + ; + break;} +case 38: +#line 430 "graphviz_parser.yy" +{ graphviz::vlist.push_back(static_cast*>(yyvsp[0].ptr)); ; + break;} +case 41: +#line 437 "graphviz_parser.yy" +{ std::pair* temp = new std::pair; temp->first = yyvsp[0].ptr; temp->second = false; yyval.ptr = (void*)temp; graphviz::attribute_state = EDGE_A; - ;} - break; - - case 41: -#line 442 "graphviz_parser.yy" - { + ; + break;} +case 42: +#line 446 "graphviz_parser.yy" +{ std::pair* temp = new std::pair; temp->first = yyvsp[0].ptr; temp->second = true; yyval.ptr = (void*)temp; graphviz::attribute_state = EDGE_A; - ;} - break; - - case 42: -#line 453 "graphviz_parser.yy" - { + ; + break;} +case 43: +#line 457 "graphviz_parser.yy" +{ if ( yyvsp[0].i ) graphviz::current_graph = &graphviz::current_graph->parent(); else graphviz::current_graph = graphviz::previous_graph; - ;} - break; - - case 43: -#line 460 "graphviz_parser.yy" - { + ; + break;} +case 44: +#line 464 "graphviz_parser.yy" +{ graphviz::previous_graph = graphviz::current_graph; std::string name = graphviz::random_string(); graphviz::Subgraph* temp = graphviz::create_subgraph(name); @@ -1478,19 +1187,17 @@ graphviz::set_graph_name(name); yyval.ptr = (void *) graphviz::current_graph; - ;} - break; - - case 44: -#line 469 "graphviz_parser.yy" - { + ; + break;} +case 45: +#line 473 "graphviz_parser.yy" +{ graphviz::current_graph = &graphviz::current_graph->parent(); - ;} - break; - - case 45: -#line 475 "graphviz_parser.yy" - { + ; + break;} +case 46: +#line 479 "graphviz_parser.yy" +{ //lookup ID_T if it is already in the subgraph, //if it is not, add a new subgraph std::string* name = static_cast(yyvsp[0].ptr); @@ -1507,218 +1214,239 @@ yyval.ptr = (void *) graphviz::current_graph; delete name; - ;} - break; - - case 46: -#line 495 "graphviz_parser.yy" - {yyval.i = 1; ;} - break; - - case 47: -#line 495 "graphviz_parser.yy" - { yyval.i = 0; ;} - break; - - - } - -/* Line 999 of yacc.c. */ -#line 1562 "graphviz_digraph_parser.cpp" + ; + break;} +case 47: +#line 499 "graphviz_parser.yy" +{yyval.i = 1; ; + break;} +case 48: +#line 499 "graphviz_parser.yy" +{ yyval.i = 0; ; + break;} +} + /* the action file gets copied in in place of this dollarsign */ +#line 543 "/usr/share/bison.simple" yyvsp -= yylen; yyssp -= yylen; +#ifdef YYLSP_NEEDED + yylsp -= yylen; +#endif - - YY_STACK_PRINT (yyss, yyssp); +#if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif *++yyvsp = yyval; +#ifdef YYLSP_NEEDED + yylsp++; + if (yylen == 0) + { + yylsp->first_line = yylloc.first_line; + yylsp->first_column = yylloc.first_column; + yylsp->last_line = (yylsp-1)->last_line; + yylsp->last_column = (yylsp-1)->last_column; + yylsp->text = 0; + } + else + { + yylsp->last_line = (yylsp+yylen-1)->last_line; + yylsp->last_column = (yylsp+yylen-1)->last_column; + } +#endif - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ + /* Now "shift" the result of the reduction. + Determine what state that goes to, + based on the state we popped back to + and the rule number reduced by. */ yyn = yyr1[yyn]; - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yypgoto[yyn - YYNTBASE] + *yyssp; + if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else - yystate = yydefgoto[yyn - YYNTOKENS]; + yystate = yydefgoto[yyn - YYNTBASE]; goto yynewstate; +yyerrlab: /* here on detecting error */ -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ -yyerrlab: - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) + if (! yyerrstatus) + /* If not already recovering from an error, report this error. */ { ++yynerrs; -#if YYERROR_VERBOSE + +#ifdef YYERROR_VERBOSE yyn = yypact[yystate]; - if (YYPACT_NINF < yyn && yyn < YYLAST) - { - YYSIZE_T yysize = 0; - int yytype = YYTRANSLATE (yychar); - char *yymsg; - int yyx, yycount; - - yycount = 0; - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - for (yyx = yyn < 0 ? -yyn : 0; - yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - yysize += yystrlen (yytname[yyx]) + 15, yycount++; - yysize += yystrlen ("syntax error, unexpected ") + 1; - yysize += yystrlen (yytname[yytype]); - yymsg = (char *) YYSTACK_ALLOC (yysize); - if (yymsg != 0) - { - char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); - yyp = yystpcpy (yyp, yytname[yytype]); - - if (yycount < 5) - { - yycount = 0; - for (yyx = yyn < 0 ? -yyn : 0; - yyx < (int) (sizeof (yytname) / sizeof (char *)); - yyx++) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - const char *yyq = ! yycount ? ", expecting " : " or "; - yyp = yystpcpy (yyp, yyq); - yyp = yystpcpy (yyp, yytname[yyx]); - yycount++; - } - } - yyerror (yymsg); - YYSTACK_FREE (yymsg); - } - else - yyerror ("syntax error; also virtual memory exhausted"); - } + if (yyn > YYFLAG && yyn < YYLAST) + { + int size = 0; + char *msg; + int x, count; + + count = 0; + /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + size += strlen(yytname[x]) + 15, count++; + msg = (char *) malloc(size + 15); + if (msg != 0) + { + strcpy(msg, "parse error"); + + if (count < 5) + { + count = 0; + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + { + strcat(msg, count == 0 ? ", expecting `" : " or `"); + strcat(msg, yytname[x]); + strcat(msg, "'"); + count++; + } + } + yyerror(msg); + free(msg); + } + else + yyerror ("parse error; also virtual memory exceeded"); + } else #endif /* YYERROR_VERBOSE */ - yyerror ("syntax error"); + yyerror("parse error"); } - + goto yyerrlab1; +yyerrlab1: /* here on error raised explicitly by an action */ if (yyerrstatus == 3) { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ + /* if just tried and failed to reuse lookahead token after an error, discard it. */ - /* Return failure if at end of input. */ + /* return failure if at end of input */ if (yychar == YYEOF) - { - /* Pop the error token. */ - YYPOPSTACK; - /* Pop the rest of the stack. */ - while (yyss < yyssp) - { - YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); - yydestruct (yystos[*yyssp], yyvsp); - YYPOPSTACK; - } - YYABORT; - } + YYABORT; - YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); - yydestruct (yytoken, &yylval); - yychar = YYEMPTY; +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); +#endif + yychar = YYEMPTY; } - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto yyerrlab1; + /* Else will try to reuse lookahead token + after shifting the error token. */ + + yyerrstatus = 3; /* Each real token shifted decrements this */ + goto yyerrhandle; -/*----------------------------------------------------. -| yyerrlab1 -- error raised explicitly by an action. | -`----------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ +yyerrdefault: /* current state does not do anything special for the error token. */ - for (;;) +#if 0 + /* This is wrong; only states that explicitly want error tokens + should shift them. */ + yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ + if (yyn) goto yydefault; +#endif + +yyerrpop: /* pop the current state because it cannot handle the error token */ + + if (yyssp == yyss) YYABORT; + yyvsp--; + yystate = *--yyssp; +#ifdef YYLSP_NEEDED + yylsp--; +#endif + +#if YYDEBUG != 0 + if (yydebug) { - yyn = yypact[yystate]; - if (yyn != YYPACT_NINF) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); - yydestruct (yystos[yystate], yyvsp); - yyvsp--; - yystate = *--yyssp; + short *ssp1 = yyss - 1; + fprintf (stderr, "Error: state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + +yyerrhandle: - YY_STACK_PRINT (yyss, yyssp); + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yyerrdefault; + + yyn += YYTERROR; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) + goto yyerrdefault; + + yyn = yytable[yyn]; + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrpop; + yyn = -yyn; + goto yyreduce; } + else if (yyn == 0) + goto yyerrpop; if (yyn == YYFINAL) YYACCEPT; - YYDPRINTF ((stderr, "Shifting error token, ")); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting error token, "); +#endif *++yyvsp = yylval; - +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif yystate = yyn; goto yynewstate; + yyacceptlab: + /* YYACCEPT comes here. */ + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); +#endif + } + return 0; -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -#ifndef yyoverflow -/*----------------------------------------------. -| yyoverflowlab -- parser overflow comes here. | -`----------------------------------------------*/ -yyoverflowlab: - yyerror ("parser stack overflow"); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); + yyabortlab: + /* YYABORT comes here. */ + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); #endif - return yyresult; + } + return 1; } - - -#line 497 "graphviz_parser.yy" +#line 501 "graphviz_parser.yy" namespace boost { @@ -1738,4 +1466,3 @@ } - Index: graphviz_digraph_parser.hpp =================================================================== RCS file: /cvsroot/boost/boost/libs/graph/src/graphviz_digraph_parser.hpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- graphviz_digraph_parser.hpp 26 Jan 2004 08:58:39 -0000 1.1 +++ graphviz_digraph_parser.hpp 8 Feb 2005 14:52:29 -0000 1.2 @@ -1,62 +1,8 @@ -/* A Bison parser, made by GNU Bison 1.875a. */ - -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - GRAPH_T = 258, - NODE_T = 259, - EDGE_T = 260, - DIGRAPH_T = 261, - EDGEOP_T = 262, - SUBGRAPH_T = 263, - ID_T = 264 - }; -#endif -#define GRAPH_T 258 -#define NODE_T 259 -#define EDGE_T 260 -#define DIGRAPH_T 261 -#define EDGEOP_T 262 -#define SUBGRAPH_T 263 -#define ID_T 264 - - - - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -typedef int YYSTYPE; -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - - - - +#define GRAPH_T 257 +#define NODE_T 258 +#define EDGE_T 259 +#define DIGRAPH_T 260 +#define EDGEOP_T 261 +#define SUBGRAPH_T 262 +#define ID_T 263 Index: graphviz_graph_parser.cpp =================================================================== RCS file: /cvsroot/boost/boost/libs/graph/src/graphviz_graph_parser.cpp,v retrieving revision 1.10.4.2 retrieving revision 1.13 diff -u -r1.10.4.2 -r1.13 --- graphviz_graph_parser.cpp 29 Oct 2004 12:44:12 -0000 1.10.4.2 +++ graphviz_graph_parser.cpp 8 Feb 2005 14:52:29 -0000 1.13 @@ -1,3 +1,26 @@ + +/* A Bison parser, made from graphviz_parser.yy + by GNU Bison version 1.28 */ + +#define YYBISON 1 /* Identify Bison output. */ + +#define yyparse bgl_undir_parse +#define yylex bgl_undir_lex +#define yyerror bgl_undir_error +#define yylval bgl_undir_lval +#define yychar bgl_undir_char +#define yydebug bgl_undir_debug +#define yynerrs bgl_undir_nerrs +#define GRAPH_T 257 +#define NODE_T 258 +#define EDGE_T 259 +#define DIGRAPH_T 260 +#define EDGEOP_T 261 +#define SUBGRAPH_T 262 +#define ID_T 263 + +#line 1 "graphviz_parser.yy" + //======================================================================= // Copyright 2001 University of Notre Dame. // Author: Lie-Quan Lee @@ -23,59 +46,6 @@ // OR OTHER RIGHTS. //======================================================================= -/* Identify Bison output. */ -#define YYBISON 1 - -/* Skeleton name. */ -#define YYSKELETON_NAME "yacc.c" - -/* Pure parsers. */ -#define YYPURE 1 - -/* Using locations. */ -#define YYLSP_NEEDED 0 - -/* If NAME_PREFIX is specified substitute the variables and functions - names. */ -#define yyparse bgl_undir_parse -#define yylex bgl_undir_lex -#define yyerror bgl_undir_error -#define yylval bgl_undir_lval -#define yychar bgl_undir_char -#define yydebug bgl_undir_debug -#define yynerrs bgl_undir_nerrs - - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - GRAPH_T = 258, - NODE_T = 259, - EDGE_T = 260, - DIGRAPH_T = 261, - EDGEOP_T = 262, - SUBGRAPH_T = 263, - ID_T = 264 - }; -#endif -#define GRAPH_T 258 -#define NODE_T 259 -#define EDGE_T 260 -#define DIGRAPH_T 261 -#define EDGEOP_T 262 -#define SUBGRAPH_T 263 -#define ID_T 264 - - - - -/* Copy the first part of user declarations. */ -#line 1 "graphviz_parser.yy" - - #include #include #include @@ -140,7 +110,7 @@ static const std::string& get_graph_name(const Subgraph& g) { const boost::graph_property::type& - name = boost::get_property(g, boost::graph_name); + name = boost::get_property(g, boost::graph_name); return name; } @@ -157,7 +127,7 @@ //set the label of vertex, it could be overwritten later. boost::property_map::type - va = boost::get(boost::vertex_attribute, g); + va = boost::get(boost::vertex_attribute, g); va[v]["label"] = name; //add v into the map so next time we will find it. @@ -181,85 +151,85 @@ static void set_attribute(GraphvizAttrList& p, - const GraphvizAttrList& attr) { + const GraphvizAttrList& attr) { GraphvizAttrList::const_iterator i, end; for ( i=attr.begin(), end=attr.end(); i!=end; ++i) - p[i->first]=i->second; + p[i->first]=i->second; } static void set_attribute(Subgraph& g, - AttrState s, bool clear_attribute = true) { + AttrState s, bool clear_attribute = true) { typedef Subgraph Graph; switch ( s ) { case GRAPH_GRAPH_A: - { - boost::graph_property::type& - gga = boost::get_property(g, boost::graph_graph_attribute); - set_attribute(gga, attributes); - } - break; + { + boost::graph_property::type& + gga = boost::get_property(g, boost::graph_graph_attribute); + set_attribute(gga, attributes); + } + break; case GRAPH_NODE_A: - { - boost::graph_property::type& - gna = boost::get_property(g, boost::graph_vertex_attribute); - set_attribute(gna, attributes); - } - break; + { + boost::graph_property::type& + gna = boost::get_property(g, boost::graph_vertex_attribute); + set_attribute(gna, attributes); + } + break; case GRAPH_EDGE_A: - { - boost::graph_property::type& - gea = boost::get_property(g, boost::graph_edge_attribute); - set_attribute(gea, attributes); - } - break; + { + boost::graph_property::type& + gea = boost::get_property(g, boost::graph_edge_attribute); + set_attribute(gea, attributes); + } + break; case NODE_A: - { - boost::property_map::type - va = boost::get(boost::vertex_attribute, g); //va[v] - set_attribute(va[current_vertex], attributes); - } - break; + { + boost::property_map::type + va = boost::get(boost::vertex_attribute, g); //va[v] + set_attribute(va[current_vertex], attributes); + } + break; case EDGE_A: - { - boost::property_map::type - ea = boost::get(boost::edge_attribute, g); //ea[e] - set_attribute(ea[current_edge], attributes); - } - break; + { + boost::property_map::type + ea = boost::get(boost::edge_attribute, g); //ea[e] + set_attribute(ea[current_edge], attributes); + } + break; } if ( clear_attribute ) - attributes.clear(); + attributes.clear(); } static void add_edges(const Vertex& u, - const Vertex& v, GRAPHVIZ_GRAPH& g) { + const Vertex& v, GRAPHVIZ_GRAPH& g) { graphviz::current_edge = boost::add_edge(u, v, g).first; graphviz::set_attribute(g, EDGE_A, false); } static void add_edges(Subgraph* G1, Subgraph* G2, - GRAPHVIZ_GRAPH& g) { + GRAPHVIZ_GRAPH& g) { boost::graph_traits::vertex_iterator i, j, m, n; for ( boost::tie(i, j) = boost::vertices(*G1); i != j; ++i) { - for ( boost::tie(m, n) = boost::vertices(*G2); m != n; ++m) { - graphviz::add_edges(G1->local_to_global(*i), - G2->local_to_global(*m), g); - } + for ( boost::tie(m, n) = boost::vertices(*G2); m != n; ++m) { + graphviz::add_edges(G1->local_to_global(*i), + G2->local_to_global(*m), g); + } } } static void add_edges(Subgraph* G, const Vertex& v, GRAPHVIZ_GRAPH& g) { boost::graph_traits::vertex_iterator i, j; for ( boost::tie(i, j) = boost::vertices(*G); i != j; ++i) { - graphviz::add_edges(G->local_to_global(*i), v, g); + graphviz::add_edges(G->local_to_global(*i), v, g); } } static void add_edges(const Vertex& u, Subgraph* G, GRAPHVIZ_GRAPH& g) { boost::graph_traits::vertex_iterator i, j; for ( boost::tie(i, j) = boost::vertices(*G); i != j; ++i) { - graphviz::add_edges(u, G->local_to_global(*i), g); + graphviz::add_edges(u, G->local_to_global(*i), g); } } @@ -282,866 +252,587 @@ static void set_graph_name(const std::string& name) { boost::graph_property::type& - gea = boost::get_property(*current_graph, boost::graph_name); + gea = boost::get_property(*current_graph, boost::graph_name); gea = name; } } //namespace detail { +#include - -/* Enabling traces. */ -#ifndef YYDEBUG -# define YYDEBUG 0 +#ifndef __cplusplus +#ifndef __STDC__ +#define const #endif - -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 0 #endif -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -typedef int YYSTYPE; -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - - - -/* Copy the second part of user declarations. */ - -/* Line 214 of yacc.c. */ -#line 354 "graphviz_graph_parser.cpp" -#if ! defined (yyoverflow) || YYERROR_VERBOSE - -/* The parser invokes alloca or malloc; define the necessary symbols. */ - -# if YYSTACK_USE_ALLOCA -# define YYSTACK_ALLOC alloca -# else -# ifndef YYSTACK_USE_ALLOCA -# if defined (alloca) || defined (_ALLOCA_H) -# define YYSTACK_ALLOC alloca -# else -# ifdef __GNUC__ -# define YYSTACK_ALLOC __builtin_alloca -# endif -# endif -# endif -# endif - -# ifdef YYSTACK_ALLOC - /* Pacify GCC's `empty if-body' warning. */ -# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) -# else -# if defined (__STDC__) || defined (__cplusplus) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -# define YYSTACK_ALLOC malloc -# define YYSTACK_FREE free -# endif -#endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ - - -#if (! defined (yyoverflow) \ - && (! defined (__cplusplus) \ - || (YYSTYPE_IS_TRIVIAL))) - -/* A type that is properly aligned for any stack member. */ -union yyalloc -{ - short yyss; - YYSTYPE yyvs; - }; - -/* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) - -/* The size of an array large to enough to hold all stacks, each with - N elements. */ -# define YYSTACK_BYTES(N) \ - ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ - + YYSTACK_GAP_MAXIMUM) - -/* Copy COUNT objects from FROM to TO. The source and destination do - not overlap. */ -# ifndef YYCOPY -# if 1 < __GNUC__ -# define YYCOPY(To, From, Count) \ - __builtin_memcpy (To, From, (Count) * sizeof (*(From))) -# else -# define YYCOPY(To, From, Count) \ - do \ - { \ - register YYSIZE_T yyi; \ - for (yyi = 0; yyi < (Count); yyi++) \ - (To)[yyi] = (From)[yyi]; \ - } \ - while (0) -# endif -# endif - -/* Relocate STACK from its old location to the new one. The - local variables YYSIZE and YYSTACKSIZE give the old and new number of - elements in the stack, and YYPTR gives the new location of the - stack. Advance YYPTR to a properly aligned location for the next - stack. */ -# define YYSTACK_RELOCATE(Stack) \ - do \ - { \ - YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ - } \ - while (0) - -#endif - -#if defined (__STDC__) || defined (__cplusplus) - typedef signed char yysigned_char; -#else - typedef short yysigned_char; -#endif - -/* YYFINAL -- State number of the termination state. */ -#define YYFINAL 6 -/* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 58 - -/* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 18 -/* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 28 -/* YYNRULES -- Number of rules. */ -#define YYNRULES 47 -/* YYNRULES -- Number of states. */ -#define YYNSTATES 66 - -/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 264 - -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) - -/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ -static const unsigned char yytranslate[] = -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 17, 12, - 2, 15, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 13, 2, 14, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 10, 2, 11, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9 +#define YYFINAL 67 +#define YYFLAG -32768 +#define YYNTBASE 18 + +#define YYTRANSLATE(x) ((unsigned)(x) <= 263 ? yytranslate[x] : 46) + +static const char yytranslate[] = { 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 17, 12, 2, + 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 13, 2, 14, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 10, 2, 11, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 3, 4, 5, 6, + 7, 8, 9 }; -#if YYDEBUG -/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in - YYRHS. */ -static const unsigned char yyprhs[] = -{ - 0, 0, 3, 6, 10, 13, 15, 17, 19, 20, - 23, 25, 27, 28, 31, 34, 39, 41, 43, 45, - 47, 51, 55, 57, 59, 60, 62, 64, 66, 68, - 70, 73, 77, 78, 80, 82, 86, 90, 93, 95, - 98, 100, 102, 105, 106, 109, 112, 114 +#if YYDEBUG != 0 +static const short yyprhs[] = { 0, + 0, 3, 7, 10, 12, 14, 16, 17, 20, 22, + 24, 25, 28, 31, 36, 38, 40, 42, 44, 45, + 47, 51, 55, 57, 59, 60, 62, 64, 66, 68, + 70, 73, 77, 78, 80, 82, 86, 90, 93, 95, + 98, 100, 102, 105, 106, 109, 112, 114 }; -/* YYRHS -- A `-1'-separated list of the rules' RHS. */ -static const yysigned_char yyrhs[] = -{ - 19, 0, -1, 21, 20, -1, 10, 24, 11, -1, - 22, 23, -1, 3, -1, 6, -1, 9, -1, -1, - 24, 26, -1, 26, -1, 12, -1, -1, 27, 25, - -1, 32, 25, -1, 28, 13, 29, 14, -1, 3, - -1, 4, -1, 5, -1, 30, -1, 29, 31, 30, - -1, 9, 15, 9, -1, 12, -1, 16, -1, -1, - 34, -1, 38, -1, 33, -1, 42, -1, 30, -1, - 36, 35, -1, 13, 29, 14, -1, -1, 9, -1, - 37, -1, 9, 17, 9, -1, 41, 40, 35, -1, - 7, 41, -1, 39, -1, 40, 39, -1, 36, -1, - 42, -1, 44, 45, -1, -1, 43, 20, -1, 8, - 9, -1, 20, -1, -1 +static const short yyrhs[] = { 20, + 19, 0, 10, 23, 11, 0, 21, 22, 0, 3, + 0, 6, 0, 9, 0, 0, 23, 25, 0, 25, + 0, 12, 0, 0, 26, 24, 0, 32, 24, 0, + 27, 13, 28, 14, 0, 3, 0, 4, 0, 5, + 0, 29, 0, 0, 30, 0, 29, 31, 30, 0, + 9, 15, 9, 0, 12, 0, 16, 0, 0, 34, + 0, 38, 0, 33, 0, 42, 0, 30, 0, 36, + 35, 0, 13, 28, 14, 0, 0, 9, 0, 37, + 0, 9, 17, 9, 0, 41, 40, 35, 0, 7, + 41, 0, 39, 0, 40, 39, 0, 36, 0, 42, + 0, 44, 45, 0, 0, 43, 19, 0, 8, 9, + 0, 19, 0, 0 }; -/* YYRLINE[YYN] -- source line where rule number YYN was defined. */ -static const unsigned short yyrline[] = -{ - 0, 254, 254, 257, 260, 274, 274, 277, 277, 280, - 280, 283, 283, 286, 287, 290, 297, 298, 299, 302, - 302, 305, 315, 315, 315, 318, 318, 318, 318, 321, - 329, 340, 340, 343, 358, 361, 380, 425, 429, 429, - 432, 441, 452, 460, 460, 474, 495, 495 -}; #endif -#if YYDEBUG || YYERROR_VERBOSE -/* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - First, the terminals, then, starting at YYNTOKENS, nonterminals. */ -static const char *const yytname[] = -{ - "$end", "error", "$undefined", "GRAPH_T", "NODE_T", "EDGE_T", "DIGRAPH_T", - "EDGEOP_T", "SUBGRAPH_T", "ID_T", "'{'", "'}'", "';'", "'['", "']'", - "'='", "','", "':'", "$accept", "graph", "graph_body", "graph_header", - "graph_type", "graph_name", "stmt_list", "semicolon", "stmt", - "attr_stmt", "attr_header", "attr_list", "attr", "attr_separator", - "compound_stmt", "graph_attr", "node_stmt", "opt_attr", "node_id", - "node_port", "edge_stmt", "edge_rhs_one", "edge_rhs", "edge_endpoint", - "subgraph", "@1", "subgraph_header", "opt_graph_body", 0 +#if YYDEBUG != 0 +static const short yyrline[] = { 0, + 255, 258, 261, 275, 275, 278, 278, 281, 281, 284, + 284, 287, 287, 291, 298, 299, 300, 303, 303, 306, + 306, 309, 319, 319, 319, 322, 322, 322, 322, 325, + 333, 344, 344, 347, 362, 365, 384, 429, 433, 433, + 436, 445, 456, 463, 473, 478, 499, 499 }; #endif -# ifdef YYPRINT -/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to - token YYLEX-NUM. */ -static const unsigned short yytoknum[] = -{ - 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 123, 125, 59, 91, 93, 61, 44, 58 -}; -# endif -/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const unsigned char yyr1[] = -{ - 0, 18, 19, 20, 21, 22, 22, 23, 23, 24, - 24, 25, 25, 26, 26, 27, 28, 28, 28, 29, - 29, 30, 31, 31, 31, 32, 32, 32, 32, 33, - 34, 35, 35, 36, 36, 37, 38, 39, 40, 40, - 41, 41, 42, 43, 42, 44, 45, 45 -}; +#if YYDEBUG != 0 || defined (YYERROR_VERBOSE) -/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ -static const unsigned char yyr2[] = -{ - 0, 2, 2, 3, 2, 1, 1, 1, 0, 2, - 1, 1, 0, 2, 2, 4, 1, 1, 1, 1, - 3, 3, 1, 1, 0, 1, 1, 1, 1, 1, - 2, 3, 0, 1, 1, 3, 3, 2, 1, 2, - 1, 1, 2, 0, 2, 2, 1, 0 +static const char * const yytname[] = { "$","error","$undefined.","GRAPH_T", +"NODE_T","EDGE_T","DIGRAPH_T","EDGEOP_T","SUBGRAPH_T","ID_T","'{'","'}'","';'", +"'['","']'","'='","','","':'","graph","graph_body","graph_header","graph_type", +"graph_name","stmt_list","semicolon","stmt","attr_stmt","attr_header","attr_list", +"nonempty_attr_list","attr","attr_separator","compound_stmt","graph_attr","node_stmt", +"opt_attr","node_id","node_port","edge_stmt","edge_rhs_one","edge_rhs","edge_endpoint", +"subgraph","@1","subgraph_header","opt_graph_body", NULL }; +#endif -/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state - STATE-NUM when YYTABLE doesn't specify something else to do. Zero - means the default is an error. */ -static const unsigned char yydefact[] = -{ - 0, 5, 6, 0, 0, 8, 1, 43, 2, 7, - 4, 16, 17, 18, 0, 33, 43, 10, 12, 0, - 29, 12, 27, 25, 32, 34, 26, 0, 28, 0, - 47, 45, 0, 0, 3, 9, 11, 13, 0, 14, - 0, 30, 43, 38, 32, 44, 46, 42, 21, 35, - 0, 24, 19, 24, 33, 40, 37, 41, 36, 39, - 22, 15, 23, 0, 31, 20 +static const short yyr1[] = { 0, + 18, 19, 20, 21, 21, 22, 22, 23, 23, 24, + 24, 25, 25, 26, 27, 27, 27, 28, 28, 29, + 29, 30, 31, 31, 31, 32, 32, 32, 32, 33, + 34, 35, 35, 36, 36, 37, 38, 39, 40, 40, + 41, 41, 42, 43, 42, 44, 45, 45 }; -/* YYDEFGOTO[NTERM-NUM]. */ -static const yysigned_char yydefgoto[] = -{ - -1, 3, 8, 4, 5, 10, 16, 37, 17, 18, - 19, 51, 20, 63, 21, 22, 23, 41, 24, 25, - 26, 43, 44, 27, 28, 29, 30, 47 +static const short yyr2[] = { 0, + 2, 3, 2, 1, 1, 1, 0, 2, 1, 1, + 0, 2, 2, 4, 1, 1, 1, 1, 0, 1, + 3, 3, 1, 1, 0, 1, 1, 1, 1, 1, + 2, 3, 0, 1, 1, 3, 3, 2, 1, 2, + 1, 1, 2, 0, 2, 2, 1, 0 }; -/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - STATE-NUM. */ -#define YYPACT_NINF -39 -static const yysigned_char yypact[] = -{ - 23, -39, -39, 6, 17, 22, -39, 9, -39, -39, - -39, -39, -39, -39, 27, 13, 0, -39, 25, 2, - -39, 25, -39, -39, -6, -39, -39, 31, 32, 17, - 17, -39, 33, 34, -39, -39, -39, -39, 35, -39, - 35, -39, 24, -39, 3, -39, -39, -39, -39, -39, - 26, 7, -39, 8, 28, -39, -39, -39, -39, -39, - -39, -39, -39, 35, -39, -39 +static const short yydefact[] = { 0, + 4, 5, 0, 7, 44, 1, 6, 3, 15, 16, + 17, 0, 34, 44, 9, 11, 0, 30, 11, 28, + 26, 33, 35, 27, 0, 29, 0, 48, 46, 0, + 0, 2, 8, 10, 12, 19, 13, 19, 31, 44, + 39, 33, 45, 47, 43, 22, 36, 0, 0, 18, + 20, 0, 34, 41, 38, 42, 37, 40, 14, 23, + 24, 0, 32, 21, 0, 0, 0 }; -/* YYPGOTO[NTERM-NUM]. */ -static const yysigned_char yypgoto[] = -{ - -39, -39, 5, -39, -39, -39, -39, 19, 30, -39, - -39, 10, -38, -39, -39, -39, -39, 4, 11, -39, - -39, 12, -39, 15, 16, -39, -39, -39 +static const short yydefgoto[] = { 65, + 6, 3, 4, 8, 14, 35, 15, 16, 17, 49, + 50, 18, 62, 19, 20, 21, 39, 22, 23, 24, + 41, 42, 25, 26, 27, 28, 45 }; -/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If - positive, shift that token. If negative, reduce the rule which - number is the opposite. If zero, do what YYDEFACT says. - If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -42 -static const yysigned_char yytable[] = -{ - 52, -40, 52, 11, 12, 13, 6, 40, 14, 15, - 42, 34, 11, 12, 13, 38, 40, 14, 15, 60, - 60, 61, 64, 62, 62, 65, 1, 7, 32, 2, - 33, 9, 14, 54, 45, 46, 31, 36, 42, -41, - 39, 32, 48, 49, 50, 33, 35, 0, 58, 0, - 53, 0, 0, 55, 0, 0, 59, 56, 57 +static const short yypact[] = { 19, +-32768,-32768, -9, 9, 12,-32768,-32768,-32768,-32768,-32768, +-32768, 18, 13, 0,-32768, 17, 20,-32768, 17,-32768, +-32768, -1,-32768,-32768, 27, 28, -9, -9,-32768, 29, + 30,-32768,-32768,-32768,-32768, 31,-32768, 31,-32768, 15, +-32768, 6,-32768,-32768,-32768,-32768,-32768, 21, 23, -2, +-32768, 32, 24,-32768,-32768,-32768,-32768,-32768,-32768,-32768, +-32768, 31,-32768,-32768, 42, 43,-32768 }; -static const yysigned_char yycheck[] = -{ - 38, 7, 40, 3, 4, 5, 0, 13, 8, 9, - 7, 11, 3, 4, 5, 13, 13, 8, 9, 12, - 12, 14, 14, 16, 16, 63, 3, 10, 15, 6, - 17, 9, 8, 9, 29, 30, 9, 12, 7, 7, - 21, 15, 9, 9, 9, 17, 16, -1, 44, -1, - 40, -1, -1, 42, -1, -1, 44, 42, 42 +static const short yypgoto[] = {-32768, + 4,-32768,-32768,-32768,-32768, 25, 33,-32768,-32768, 7, +-32768, -36,-32768,-32768,-32768,-32768, 8, 11,-32768,-32768, + 10,-32768, 14, 16,-32768,-32768,-32768 }; -/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const unsigned char yystos[] = -{ - 0, 3, 6, 19, 21, 22, 0, 10, 20, 9, - 23, 3, 4, 5, 8, 9, 24, 26, 27, 28, - 30, 32, 33, 34, 36, 37, 38, 41, 42, 43, - 44, 9, 15, 17, 11, 26, 12, 25, 13, 25, - 13, 35, 7, 39, 40, 20, 20, 45, 9, 9, - 9, 29, 30, 29, 9, 36, 41, 42, 35, 39, - 12, 14, 16, 31, 14, 30 -}; -#if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) -# define YYSIZE_T __SIZE_TYPE__ -#endif -#if ! defined (YYSIZE_T) && defined (size_t) -# define YYSIZE_T size_t -#endif -#if ! defined (YYSIZE_T) -# if defined (__STDC__) || defined (__cplusplus) -# include /* INFRINGES ON USER NAME SPACE */ -# define YYSIZE_T size_t -# endif -#endif -#if ! defined (YYSIZE_T) -# define YYSIZE_T unsigned int -#endif +#define YYLAST 56 -#define yyerrok (yyerrstatus = 0) -#define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrlab1 +static const short yytable[] = { 51, + 5, 51, 9, 10, 11, -41, -25, 12, 13, 60, + 32, 38, 40, 61, 9, 10, 11, 7, 38, 12, + 13, 1, 12, 53, 2, 64, 29, 30, 34, 31, + 43, 44, 36, 40, -42, 30, 59, 46, 47, 48, + 31, 66, 67, 37, 52, 63, 33, 0, 0, 57, + 54, 58, 0, 55, 0, 56 +}; +static const short yycheck[] = { 36, + 10, 38, 3, 4, 5, 7, 9, 8, 9, 12, + 11, 13, 7, 16, 3, 4, 5, 9, 13, 8, + 9, 3, 8, 9, 6, 62, 9, 15, 12, 17, + 27, 28, 13, 7, 7, 15, 14, 9, 9, 9, + 17, 0, 0, 19, 38, 14, 14, -1, -1, 42, + 40, 42, -1, 40, -1, 40 +}; +#define YYPURE 1 -/* Like YYERROR except do call yyerror. This remains here temporarily - to ease the transition to the new meaning of YYERROR, for GCC. - Once GCC version 2 has supplanted version 1, this can go. */ +/* -*-C-*- Note some compilers choke on comments on `#line' lines. */ +#line 3 "/usr/share/bison.simple" +/* This file comes from bison-1.28. */ + +/* Skeleton output parser for bison, + Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* As a special exception, when this file is copied by Bison into a + Bison output file, you may use that output file without restriction. + This special exception was added by the Free Software Foundation + in version 1.24 of Bison. */ + +/* This is the parser code that is written into each bison parser + when the %semantic_parser declaration is not specified in the grammar. + It was written by Richard Stallman by simplifying the hairy parser + used when %semantic_parser is specified. */ + +#ifndef YYSTACK_USE_ALLOCA +#ifdef alloca +#define YYSTACK_USE_ALLOCA +#else /* alloca not defined */ +#ifdef __GNUC__ +#define YYSTACK_USE_ALLOCA +#define alloca __builtin_alloca +#else /* not GNU C. */ +#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386)) +#define YYSTACK_USE_ALLOCA +#include +#else /* not sparc */ +/* We think this test detects Watcom and Microsoft C. */ +/* This used to test MSDOS, but that is a bad idea + since that symbol is in the user namespace. */ +#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__) +#if 0 /* No need for malloc.h, which pollutes the namespace; + instead, just don't use alloca. */ +#include +#endif +#else /* not MSDOS, or __TURBOC__ */ +#if defined(_AIX) +/* I don't know what this was needed for, but it pollutes the namespace. + So I turned it off. rms, 2 May 1997. */ +/* #include */ + #pragma alloca +#define YYSTACK_USE_ALLOCA +#else /* not MSDOS, or __TURBOC__, or _AIX */ +#if 0 +#ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up, + and on HPUX 10. Eventually we can turn this on. */ +#define YYSTACK_USE_ALLOCA +#define alloca __builtin_alloca +#endif /* __hpux */ +#endif +#endif /* not _AIX */ +#endif /* not MSDOS, or __TURBOC__ */ +#endif /* not sparc */ +#endif /* not GNU C */ +#endif /* alloca not defined */ +#endif /* YYSTACK_USE_ALLOCA not defined */ -#define YYFAIL goto yyerrlab +#ifdef YYSTACK_USE_ALLOCA +#define YYSTACK_ALLOC alloca +#else +#define YYSTACK_ALLOC malloc +#endif +/* Note: there must be only one dollar sign in this file. + It is replaced by the list of actions, each action + as one case of the switch. */ + +#define yyerrok (yyerrstatus = 0) +#define yyclearin (yychar = YYEMPTY) +#define YYEMPTY -2 +#define YYEOF 0 +#define YYACCEPT goto yyacceptlab +#define YYABORT goto yyabortlab +#define YYERROR goto yyerrlab1 +/* Like YYERROR except do call yyerror. + This remains here temporarily to ease the + transition to the new meaning of YYERROR, for GCC. + Once GCC version 2 has supplanted version 1, this can go. */ +#define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) - -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY && yylen == 1) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - yytoken = YYTRANSLATE (yychar); \ - YYPOPSTACK; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror ("syntax error: cannot back up");\ - YYERROR; \ - } \ +#define YYBACKUP(token, value) \ +do \ + if (yychar == YYEMPTY && yylen == 1) \ + { yychar = (token), yylval = (value); \ + yychar1 = YYTRANSLATE (yychar); \ + YYPOPSTACK; \ + goto yybackup; \ + } \ + else \ + { yyerror ("syntax error: cannot back up"); YYERROR; } \ while (0) -#define YYTERROR 1 -#define YYERRCODE 256 - -/* YYLLOC_DEFAULT -- Compute the default location (before the actions - are run). */ +#define YYTERROR 1 +#define YYERRCODE 256 -#ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - Current.first_line = Rhs[1].first_line; \ - Current.first_column = Rhs[1].first_column; \ - Current.last_line = Rhs[N].last_line; \ - Current.last_column = Rhs[N].last_column; +#ifndef YYPURE +#define YYLEX yylex() #endif -/* YYLEX -- calling `yylex' with the right arguments. */ - +#ifdef YYPURE +#ifdef YYLSP_NEEDED #ifdef YYLEX_PARAM -# define YYLEX yylex (&yylval, YYLEX_PARAM) +#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM) #else -# define YYLEX yylex (&yylval) +#define YYLEX yylex(&yylval, &yylloc) +#endif +#else /* not YYLSP_NEEDED */ +#ifdef YYLEX_PARAM +#define YYLEX yylex(&yylval, YYLEX_PARAM) +#else +#define YYLEX yylex(&yylval) +#endif +#endif /* not YYLSP_NEEDED */ #endif -/* Enable debugging if requested. */ -#if YYDEBUG +/* If nonreentrant, generate the variables here */ -# ifndef YYFPRINTF -# include /* INFRINGES ON USER NAME SPACE */ -# define YYFPRINTF fprintf -# endif - -# define YYDPRINTF(Args) \ -do { \ - if (yydebug) \ - YYFPRINTF Args; \ -} while (0) - -# define YYDSYMPRINT(Args) \ -do { \ - if (yydebug) \ - yysymprint Args; \ -} while (0) - -# define YYDSYMPRINTF(Title, Token, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yysymprint (stderr, \ - Token, Value); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) - -/*------------------------------------------------------------------. -| yy_stack_print -- Print the state stack from its BOTTOM up to its | -| TOP (cinluded). | -`------------------------------------------------------------------*/ +#ifndef YYPURE -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_stack_print (short *bottom, short *top) -#else -static void -yy_stack_print (bottom, top) - short *bottom; - short *top; +int yychar; /* the lookahead symbol */ +YYSTYPE yylval; /* the semantic value of the */ + /* lookahead symbol */ + +#ifdef YYLSP_NEEDED +YYLTYPE yylloc; /* location data for the lookahead */ + /* symbol */ #endif -{ - YYFPRINTF (stderr, "Stack now"); - for (/* Nothing. */; bottom <= top; ++bottom) - YYFPRINTF (stderr, " %d", *bottom); - YYFPRINTF (stderr, "\n"); -} -# define YY_STACK_PRINT(Bottom, Top) \ -do { \ - if (yydebug) \ - yy_stack_print ((Bottom), (Top)); \ -} while (0) +int yynerrs; /* number of parse errors so far */ +#endif /* not YYPURE */ +#if YYDEBUG != 0 +int yydebug; /* nonzero means print parse trace */ +/* Since this is uninitialized, it does not stop multiple parsers + from coexisting. */ +#endif -/*------------------------------------------------. -| Report that the YYRULE is going to be reduced. | -`------------------------------------------------*/ +/* YYINITDEPTH indicates the initial size of the parser's stacks */ -#if defined (__STDC__) || defined (__cplusplus) -static void -yy_reduce_print (int yyrule) -#else -static void -yy_reduce_print (yyrule) - int yyrule; +#ifndef YYINITDEPTH +#define YYINITDEPTH 200 #endif -{ - int yyi; - unsigned int yylineno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", - yyrule - 1, yylineno); - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) - YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); - YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); -} -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (Rule); \ -} while (0) - -/* Nonzero means print parse trace. It is left uninitialized so that - multiple parsers can coexist. */ -int yydebug; -#else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YYDSYMPRINT(Args) -# define YYDSYMPRINTF(Title, Token, Value, Location) -# define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) -#endif /* !YYDEBUG */ - - -/* YYINITDEPTH -- initial size of the parser's stacks. */ -#ifndef YYINITDEPTH -# define YYINITDEPTH 200 -#endif - -/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only - if the built-in stack extension method is used). - - Do not make this value too large; the results are undefined if - SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) - evaluated with infinite-precision integer arithmetic. */ +/* YYMAXDEPTH is the maximum size the stacks can grow to + (effective only if the built-in stack extension method is used). */ #if YYMAXDEPTH == 0 -# undef YYMAXDEPTH +#undef YYMAXDEPTH #endif #ifndef YYMAXDEPTH -# define YYMAXDEPTH 10000 +#define YYMAXDEPTH 10000 #endif - +/* Define __yy_memcpy. Note that the size argument + should be passed with type unsigned int, because that is what the non-GCC + definitions require. With GCC, __builtin_memcpy takes an arg + of type size_t, but it can handle unsigned int. */ + +#if __GNUC__ > 1 /* GNU C and GNU C++ define this. */ +#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT) +#else /* not GNU C or C++ */ +#ifndef __cplusplus -#if YYERROR_VERBOSE - -# ifndef yystrlen -# if defined (__GLIBC__) && defined (_STRING_H) -# define yystrlen strlen -# else -/* Return the length of YYSTR. */ -static YYSIZE_T -# if defined (__STDC__) || defined (__cplusplus) -yystrlen (const char *yystr) -# else -yystrlen (yystr) - const char *yystr; -# endif -{ - register const char *yys = yystr; - - while (*yys++ != '\0') - continue; - - return yys - yystr - 1; -} -# endif -# endif - -# ifndef yystpcpy -# if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) -# define yystpcpy stpcpy -# else -/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in - YYDEST. */ -static char * -# if defined (__STDC__) || defined (__cplusplus) -yystpcpy (char *yydest, const char *yysrc) -# else -yystpcpy (yydest, yysrc) - char *yydest; - const char *yysrc; -# endif -{ - register char *yyd = yydest; - register const char *yys = yysrc; - - while ((*yyd++ = *yys++) != '\0') - continue; +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ +static void +__yy_memcpy (to, from, count) + char *to; + char *from; + unsigned int count; +{ + register char *f = from; + register char *t = to; + register int i = count; - return yyd - 1; + while (i-- > 0) + *t++ = *f++; } -# endif -# endif -#endif /* !YYERROR_VERBOSE */ - - +#else /* __cplusplus */ -#if YYDEBUG -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) -#else +/* This is the most reliable way to avoid incompatibilities + in available built-in functions on various systems. */ static void -yysymprint (yyoutput, yytype, yyvaluep) - FILE *yyoutput; - int yytype; - YYSTYPE *yyvaluep; -#endif +__yy_memcpy (char *to, char *from, unsigned int count) { - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; + register char *t = to; + register char *f = from; + register int i = count; - if (yytype < YYNTOKENS) - { - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); -# ifdef YYPRINT - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); -# endif - } - else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - - switch (yytype) - { - default: - break; - } - YYFPRINTF (yyoutput, ")"); + while (i-- > 0) + *t++ = *f++; } -#endif /* ! YYDEBUG */ -/*-----------------------------------------------. -| Release the memory associated to this symbol. | -`-----------------------------------------------*/ - -#if defined (__STDC__) || defined (__cplusplus) -static void -yydestruct (int yytype, YYSTYPE *yyvaluep) -#else -static void -yydestruct (yytype, yyvaluep) - int yytype; - YYSTYPE *yyvaluep; #endif -{ - /* Pacify ``unused variable'' warnings. */ - (void) yyvaluep; - - switch (yytype) - { - - default: - break; - } -} +#endif +#line 217 "/usr/share/bison.simple" -/* Prevent warnings from -Wmissing-prototypes. */ +/* The user can define YYPARSE_PARAM as the name of an argument to be passed + into yyparse. The argument should have type void *. + It should actually point to an object. + Grammar actions can access the variable by casting it + to the proper pointer type. */ #ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM); -# else -int yyparse (); -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int yyparse (void); -#else -int yyparse (); -#endif -#endif /* ! YYPARSE_PARAM */ - - - - - - -/*----------. -| yyparse. | -`----------*/ +#ifdef __cplusplus +#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM +#define YYPARSE_PARAM_DECL +#else /* not __cplusplus */ +#define YYPARSE_PARAM_ARG YYPARSE_PARAM +#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM; +#endif /* not __cplusplus */ +#else /* not YYPARSE_PARAM */ +#define YYPARSE_PARAM_ARG +#define YYPARSE_PARAM_DECL +#endif /* not YYPARSE_PARAM */ +/* Prevent warning if -Wstrict-prototypes. */ +#ifdef __GNUC__ #ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) -int yyparse (void *YYPARSE_PARAM) -# else -int yyparse (YYPARSE_PARAM) - void *YYPARSE_PARAM; -# endif -#else /* ! YYPARSE_PARAM */ -#if defined (__STDC__) || defined (__cplusplus) -int -yyparse (void) +int yyparse (void *); #else -int -yyparse () - +int yyparse (void); #endif #endif -{ - /* The lookahead symbol. */ -int yychar; - -/* The semantic value of the lookahead symbol. */ -YYSTYPE yylval; - -/* Number of syntax errors so far. */ -int yynerrs; +int +yyparse(YYPARSE_PARAM_ARG) + YYPARSE_PARAM_DECL +{ register int yystate; register int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; - - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - short yyssa[YYINITDEPTH]; - short *yyss = yyssa; register short *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; register YYSTYPE *yyvsp; + int yyerrstatus; /* number of tokens to shift before error messages enabled */ + int yychar1 = 0; /* lookahead token as an internal (translated) token number */ + short yyssa[YYINITDEPTH]; /* the state stack */ + YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */ + short *yyss = yyssa; /* refer to the stacks thru separate pointers */ + YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */ +#ifdef YYLSP_NEEDED + YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */ + YYLTYPE *yyls = yylsa; + YYLTYPE *yylsp; + +#define YYPOPSTACK (yyvsp--, yyssp--, yylsp--) +#else #define YYPOPSTACK (yyvsp--, yyssp--) +#endif - YYSIZE_T yystacksize = YYINITDEPTH; + int yystacksize = YYINITDEPTH; + int yyfree_stacks = 0; - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; +#ifdef YYPURE + int yychar; + YYSTYPE yylval; + int yynerrs; +#ifdef YYLSP_NEEDED + YYLTYPE yylloc; +#endif +#endif + YYSTYPE yyval; /* the variable used to return */ + /* semantic values from the action */ + /* routines */ - /* When reducing, the number of symbols on the RHS of the reduced - rule. */ int yylen; - YYDPRINTF ((stderr, "Starting parse\n")); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Starting parse\n"); +#endif yystate = 0; yyerrstatus = 0; yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ + yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ - yyssp = yyss; + yyssp = yyss - 1; yyvsp = yyvs; +#ifdef YYLSP_NEEDED + yylsp = yyls; +#endif - goto yysetstate; - -/*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | -`------------------------------------------------------------*/ - yynewstate: - /* In all cases, when you get here, the value and location stacks - have just been pushed. so pushing a state here evens the stacks. - */ - yyssp++; +/* Push a new state, which is found in yystate . */ +/* In all cases, when you get here, the value and location stacks + have just been pushed. so pushing a state here evens the stacks. */ +yynewstate: - yysetstate: - *yyssp = yystate; + *++yyssp = yystate; - if (yyss + yystacksize - 1 <= yyssp) + if (yyssp >= yyss + yystacksize - 1) { + /* Give user a chance to reallocate the stack */ + /* Use copies of these so that the &'s don't force the real ones into memory. */ + YYSTYPE *yyvs1 = yyvs; + short *yyss1 = yyss; +#ifdef YYLSP_NEEDED + YYLTYPE *yyls1 = yyls; +#endif + /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; + int size = yyssp - yyss + 1; #ifdef yyoverflow - { - /* Give user a chance to reallocate the stack. Use copies of - these so that the &'s don't force the real ones into - memory. */ - YYSTYPE *yyvs1 = yyvs; - short *yyss1 = yyss; - - - /* Each stack pointer address is followed by the size of the - data in use in that stack, in bytes. This used to be a - conditional around just the two extra args, but that might - be undefined if yyoverflow is a macro. */ - yyoverflow ("parser stack overflow", - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), - - &yystacksize); + /* Each stack pointer address is followed by the size of + the data in use in that stack, in bytes. */ +#ifdef YYLSP_NEEDED + /* This used to be a conditional around just the two extra args, + but that might be undefined if yyoverflow is a macro. */ + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yyls1, size * sizeof (*yylsp), + &yystacksize); +#else + yyoverflow("parser stack overflow", + &yyss1, size * sizeof (*yyssp), + &yyvs1, size * sizeof (*yyvsp), + &yystacksize); +#endif - yyss = yyss1; - yyvs = yyvs1; - } + yyss = yyss1; yyvs = yyvs1; +#ifdef YYLSP_NEEDED + yyls = yyls1; +#endif #else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyoverflowlab; -# else /* Extend the stack our own way. */ - if (YYMAXDEPTH <= yystacksize) - goto yyoverflowlab; + if (yystacksize >= YYMAXDEPTH) + { + yyerror("parser stack overflow"); + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); +#endif + } + return 2; + } yystacksize *= 2; - if (YYMAXDEPTH < yystacksize) - yystacksize = YYMAXDEPTH; - - { - short *yyss1 = yyss; - union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); - if (! yyptr) - goto yyoverflowlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); - -# undef YYSTACK_RELOCATE - if (yyss1 != yyssa) - YYSTACK_FREE (yyss1); - } -# endif + if (yystacksize > YYMAXDEPTH) + yystacksize = YYMAXDEPTH; +#ifndef YYSTACK_USE_ALLOCA + yyfree_stacks = 1; +#endif + yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp)); + __yy_memcpy ((char *)yyss, (char *)yyss1, + size * (unsigned int) sizeof (*yyssp)); + yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp)); + __yy_memcpy ((char *)yyvs, (char *)yyvs1, + size * (unsigned int) sizeof (*yyvsp)); +#ifdef YYLSP_NEEDED + yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp)); + __yy_memcpy ((char *)yyls, (char *)yyls1, + size * (unsigned int) sizeof (*yylsp)); +#endif #endif /* no yyoverflow */ - yyssp = yyss + yysize - 1; - yyvsp = yyvs + yysize - 1; - + yyssp = yyss + size - 1; + yyvsp = yyvs + size - 1; +#ifdef YYLSP_NEEDED + yylsp = yyls + size - 1; +#endif - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Stack size increased to %d\n", yystacksize); +#endif - if (yyss + yystacksize - 1 <= yyssp) - YYABORT; + if (yyssp >= yyss + yystacksize - 1) + YYABORT; } - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Entering state %d\n", yystate); +#endif goto yybackup; - -/*-----------. -| yybackup. | -`-----------*/ -yybackup: + yybackup: /* Do appropriate processing given the current state. */ /* Read a lookahead token if we need one and don't already have one. */ @@ -1150,104 +841,139 @@ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) + if (yyn == YYFLAG) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + /* yychar is either YYEMPTY or YYEOF + or a valid token in external form. */ + if (yychar == YYEMPTY) { - YYDPRINTF ((stderr, "Reading a token: ")); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Reading a token: "); +#endif yychar = YYLEX; } - if (yychar <= YYEOF) + /* Convert token to internal form (in yychar1) for indexing tables with */ + + if (yychar <= 0) /* This means end of input. */ { - yychar = yytoken = YYEOF; - YYDPRINTF ((stderr, "Now at end of input.\n")); + yychar1 = 0; + yychar = YYEOF; /* Don't call YYLEX any more */ + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Now at end of input.\n"); +#endif } else { - yytoken = YYTRANSLATE (yychar); - YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); + yychar1 = YYTRANSLATE(yychar); + +#if YYDEBUG != 0 + if (yydebug) + { + fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]); + /* Give the individual parser a way to print the precise meaning + of a token, for further debugging info. */ +#ifdef YYPRINT + YYPRINT (stderr, yychar, yylval); +#endif + fprintf (stderr, ")\n"); + } +#endif } - /* If the proper action on seeing token YYTOKEN is to reduce or to - detect an error, take that action. */ - yyn += yytoken; - if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) + yyn += yychar1; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1) goto yydefault; + yyn = yytable[yyn]; - if (yyn <= 0) + + /* yyn is what to do for this token type in this state. + Negative => reduce, -yyn is rule number. + Positive => shift, yyn is new state. + New state is final state => don't bother to shift, + just return success. + 0, or most negative number => error. */ + + if (yyn < 0) { - if (yyn == 0 || yyn == YYTABLE_NINF) - goto yyerrlab; + if (yyn == YYFLAG) + goto yyerrlab; yyn = -yyn; goto yyreduce; } + else if (yyn == 0) + goto yyerrlab; if (yyn == YYFINAL) YYACCEPT; /* Shift the lookahead token. */ - YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); + +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]); +#endif /* Discard the token being shifted unless it is eof. */ if (yychar != YYEOF) yychar = YYEMPTY; *++yyvsp = yylval; +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif - - /* Count tokens shifted since error; after three, turn off error - status. */ - if (yyerrstatus) - yyerrstatus--; + /* count tokens shifted since error; after three, turn off error status. */ + if (yyerrstatus) yyerrstatus--; yystate = yyn; goto yynewstate; - -/*-----------------------------------------------------------. -| yydefault -- do the default action for the current state. | -`-----------------------------------------------------------*/ +/* Do the default action for the current state. */ yydefault: + yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; - goto yyreduce; - -/*-----------------------------. -| yyreduce -- Do a reduction. | -`-----------------------------*/ +/* Do a reduction. yyn is the number of a rule to reduce with. */ yyreduce: - /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; + if (yylen > 0) + yyval = yyvsp[1-yylen]; /* implement default value of the action */ + +#if YYDEBUG != 0 + if (yydebug) + { + int i; - /* If YYLEN is nonzero, implement the default value of the action: - `$$ = $1'. + fprintf (stderr, "Reducing via rule %d (line %d), ", + yyn, yyrline[yyn]); - Otherwise, the following line sets YYVAL to garbage. - This behavior is undocumented and Bison - users should not rely upon it. Assigning to YYVAL - unconditionally makes the parser a bit smaller, and it avoids a - GCC warning that YYVAL may be used uninitialized. */ - yyval = yyvsp[1-yylen]; + /* Print the symbols being reduced, and their result. */ + for (i = yyprhs[yyn]; yyrhs[i] > 0; i++) + fprintf (stderr, "%s ", yytname[yyrhs[i]]); + fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]); + } +#endif - YY_REDUCE_PRINT (yyn); - switch (yyn) - { - case 3: -#line 257 "graphviz_parser.yy" - {yyval.i=0;;} - break; + switch (yyn) { - case 4: -#line 261 "graphviz_parser.yy" - { +case 2: +#line 258 "graphviz_parser.yy" +{yyval.i=0;; + break;} +case 3: +#line 262 "graphviz_parser.yy" +{ graphviz::vlist.clear(); graphviz::attributes.clear(); graphviz::subgraphs.clear(); @@ -1257,115 +983,104 @@ graphviz::current_graph = static_cast(g); graphviz::set_graph_name(*name); delete name; - ;} - break; - - case 7: -#line 277 "graphviz_parser.yy" - {yyval.ptr = yyvsp[0].ptr; ;} - break; - - case 8: -#line 277 "graphviz_parser.yy" - {yyval.ptr=(void*)(new std::string("G")); ;} - break; - - case 15: -#line 291 "graphviz_parser.yy" - { + ; + break;} +case 6: +#line 278 "graphviz_parser.yy" +{yyval.ptr = yyvsp[0].ptr; ; + break;} +case 7: +#line 278 "graphviz_parser.yy" +{yyval.ptr=(void*)(new std::string("G")); ; + break;} +case 14: +#line 292 "graphviz_parser.yy" +{ graphviz::set_attribute(*graphviz::current_graph, - graphviz::attribute_state); - ;} - break; - - case 16: -#line 297 "graphviz_parser.yy" - { graphviz::attribute_state = GRAPH_GRAPH_A; ;} - break; - - case 17: + graphviz::attribute_state); + ; + break;} +case 15: #line 298 "graphviz_parser.yy" - { graphviz::attribute_state = GRAPH_NODE_A; ;} - break; - - case 18: +{ graphviz::attribute_state = GRAPH_GRAPH_A; ; + break;} +case 16: #line 299 "graphviz_parser.yy" - { graphviz::attribute_state = GRAPH_EDGE_A; ;} - break; - - case 21: -#line 306 "graphviz_parser.yy" - { +{ graphviz::attribute_state = GRAPH_NODE_A; ; + break;} +case 17: +#line 300 "graphviz_parser.yy" +{ graphviz::attribute_state = GRAPH_EDGE_A; ; + break;} +case 19: +#line 303 "graphviz_parser.yy" +{; + break;} +case 22: +#line 310 "graphviz_parser.yy" +{ std::string* name = static_cast(yyvsp[-2].ptr); std::string* value = static_cast(yyvsp[0].ptr); graphviz::attributes[*name] = *value; delete name; delete value; - ;} - break; - - case 28: -#line 318 "graphviz_parser.yy" - { yyval.i = 0; ;} - break; - - case 29: + ; + break;} +case 29: #line 322 "graphviz_parser.yy" - { +{ yyval.i = 0; ; + break;} +case 30: +#line 326 "graphviz_parser.yy" +{ graphviz::set_attribute( *static_cast(graphviz::current_graph), - GRAPH_GRAPH_A); - ;} - break; - - case 30: -#line 330 "graphviz_parser.yy" - { + GRAPH_GRAPH_A); + ; + break;} +case 31: +#line 334 "graphviz_parser.yy" +{ graphviz::Vertex* temp = static_cast(yyvsp[-1].ptr); graphviz::current_vertex = *temp; graphviz::set_attribute(*static_cast(YYPARSE_PARAM), - NODE_A); + NODE_A); delete temp; yyval.i = 0; - ;} - break; - - case 31: -#line 340 "graphviz_parser.yy" - { yyval.i=0; ;} - break; - - case 32: -#line 340 "graphviz_parser.yy" - { yyval.i=0; ;} - break; - - case 33: + ; + break;} +case 32: #line 344 "graphviz_parser.yy" - { +{ yyval.i=0; ; + break;} +case 33: +#line 344 "graphviz_parser.yy" +{ yyval.i=0; ; + break;} +case 34: +#line 348 "graphviz_parser.yy" +{ std::string* name = static_cast(yyvsp[0].ptr); std::pair result = graphviz::lookup(*name); if (result.second) { graphviz::current_vertex = result.first->second; if (! graphviz::current_graph->is_root()) - boost::add_vertex(graphviz::current_vertex, *graphviz::current_graph); + boost::add_vertex(graphviz::current_vertex, *graphviz::current_graph); } else graphviz::current_vertex = graphviz::add_name(*name, *static_cast(YYPARSE_PARAM)) ; graphviz::Vertex* temp = new graphviz::Vertex(graphviz::current_vertex); yyval.ptr = (void *)temp; graphviz::attribute_state = NODE_A; delete name; - ;} - break; - - case 34: -#line 358 "graphviz_parser.yy" - { yyval.ptr=yyvsp[0].ptr; ;} - break; - - case 35: + ; + break;} +case 35: #line 362 "graphviz_parser.yy" - { +{ yyval.ptr=yyvsp[0].ptr; ; + break;} +case 36: +#line 366 "graphviz_parser.yy" +{ //consider port as a special properties ?? --need work here std::string* name = static_cast(yyvsp[-2].ptr); std::string* port = static_cast(yyvsp[0].ptr); @@ -1380,38 +1095,37 @@ graphviz::attribute_state = NODE_A; delete name; delete port; - ;} - break; - - case 36: -#line 381 "graphviz_parser.yy" - { + ; + break;} +case 37: +#line 385 "graphviz_parser.yy" +{ typedef std::pair* Ptr; Ptr source = static_cast(yyvsp[-2].ptr); for (std::vector::iterator it=graphviz::vlist.begin(); - it !=graphviz::vlist.end(); ++it) { + it !=graphviz::vlist.end(); ++it) { if ( source->second ) { - if ( (*it)->second ) - graphviz::add_edges(static_cast(source->first), - static_cast((*it)->first), - *static_cast(YYPARSE_PARAM)); - else - graphviz::add_edges(static_cast(source->first), - *static_cast((*it)->first), - *static_cast(YYPARSE_PARAM)); + if ( (*it)->second ) + graphviz::add_edges(static_cast(source->first), + static_cast((*it)->first), + *static_cast(YYPARSE_PARAM)); + else + graphviz::add_edges(static_cast(source->first), + *static_cast((*it)->first), + *static_cast(YYPARSE_PARAM)); } else { - graphviz::Vertex* temp = static_cast(source->first); - if ( (*it)->second ) - graphviz::add_edges(*temp, - static_cast((*it)->first), - *static_cast(YYPARSE_PARAM)); - else - graphviz::add_edges(*temp, - *static_cast((*it)->first), - *static_cast(YYPARSE_PARAM)); - delete temp; + graphviz::Vertex* temp = static_cast(source->first); + if ( (*it)->second ) + graphviz::add_edges(*temp, + static_cast((*it)->first), + *static_cast(YYPARSE_PARAM)); + else + graphviz::add_edges(*temp, + *static_cast((*it)->first), + *static_cast(YYPARSE_PARAM)); + delete temp; } delete source; @@ -1426,51 +1140,46 @@ graphviz::attributes.clear(); graphviz::vlist.clear(); - ;} - break; - - case 37: -#line 426 "graphviz_parser.yy" - { graphviz::vlist.push_back(static_cast*>(yyvsp[0].ptr)); ;} - break; - - case 40: -#line 433 "graphviz_parser.yy" - { + ; + break;} +case 38: +#line 430 "graphviz_parser.yy" +{ graphviz::vlist.push_back(static_cast*>(yyvsp[0].ptr)); ; + break;} +case 41: +#line 437 "graphviz_parser.yy" +{ std::pair* temp = new std::pair; temp->first = yyvsp[0].ptr; temp->second = false; yyval.ptr = (void*)temp; graphviz::attribute_state = EDGE_A; - ;} - break; - - case 41: -#line 442 "graphviz_parser.yy" - { + ; + break;} +case 42: +#line 446 "graphviz_parser.yy" +{ std::pair* temp = new std::pair; temp->first = yyvsp[0].ptr; temp->second = true; yyval.ptr = (void*)temp; graphviz::attribute_state = EDGE_A; - ;} - break; - - case 42: -#line 453 "graphviz_parser.yy" - { + ; + break;} +case 43: +#line 457 "graphviz_parser.yy" +{ if ( yyvsp[0].i ) graphviz::current_graph = &graphviz::current_graph->parent(); else graphviz::current_graph = graphviz::previous_graph; - ;} - break; - - case 43: -#line 460 "graphviz_parser.yy" - { + ; + break;} +case 44: +#line 464 "graphviz_parser.yy" +{ graphviz::previous_graph = graphviz::current_graph; std::string name = graphviz::random_string(); graphviz::Subgraph* temp = graphviz::create_subgraph(name); @@ -1478,19 +1187,17 @@ graphviz::set_graph_name(name); yyval.ptr = (void *) graphviz::current_graph; - ;} - break; - - case 44: -#line 469 "graphviz_parser.yy" - { + ; + break;} +case 45: +#line 473 "graphviz_parser.yy" +{ graphviz::current_graph = &graphviz::current_graph->parent(); - ;} - break; - - case 45: -#line 475 "graphviz_parser.yy" - { + ; + break;} +case 46: +#line 479 "graphviz_parser.yy" +{ //lookup ID_T if it is already in the subgraph, //if it is not, add a new subgraph std::string* name = static_cast(yyvsp[0].ptr); @@ -1507,218 +1214,239 @@ yyval.ptr = (void *) graphviz::current_graph; delete name; - ;} - break; - - case 46: -#line 495 "graphviz_parser.yy" - {yyval.i = 1; ;} - break; - - case 47: -#line 495 "graphviz_parser.yy" - { yyval.i = 0; ;} - break; - - - } - -/* Line 999 of yacc.c. */ -#line 1562 "graphviz_graph_parser.cpp" + ; + break;} +case 47: +#line 499 "graphviz_parser.yy" +{yyval.i = 1; ; + break;} +case 48: +#line 499 "graphviz_parser.yy" +{ yyval.i = 0; ; + break;} +} + /* the action file gets copied in in place of this dollarsign */ +#line 543 "/usr/share/bison.simple" yyvsp -= yylen; yyssp -= yylen; +#ifdef YYLSP_NEEDED + yylsp -= yylen; +#endif - - YY_STACK_PRINT (yyss, yyssp); +#if YYDEBUG != 0 + if (yydebug) + { + short *ssp1 = yyss - 1; + fprintf (stderr, "state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif *++yyvsp = yyval; +#ifdef YYLSP_NEEDED + yylsp++; + if (yylen == 0) + { + yylsp->first_line = yylloc.first_line; + yylsp->first_column = yylloc.first_column; + yylsp->last_line = (yylsp-1)->last_line; + yylsp->last_column = (yylsp-1)->last_column; + yylsp->text = 0; + } + else + { + yylsp->last_line = (yylsp+yylen-1)->last_line; + yylsp->last_column = (yylsp+yylen-1)->last_column; + } +#endif - /* Now `shift' the result of the reduction. Determine what state - that goes to, based on the state we popped back to and the rule - number reduced by. */ + /* Now "shift" the result of the reduction. + Determine what state that goes to, + based on the state we popped back to + and the rule number reduced by. */ yyn = yyr1[yyn]; - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) + yystate = yypgoto[yyn - YYNTBASE] + *yyssp; + if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else - yystate = yydefgoto[yyn - YYNTOKENS]; + yystate = yydefgoto[yyn - YYNTBASE]; goto yynewstate; +yyerrlab: /* here on detecting error */ -/*------------------------------------. -| yyerrlab -- here on detecting error | -`------------------------------------*/ -yyerrlab: - /* If not already recovering from an error, report this error. */ - if (!yyerrstatus) + if (! yyerrstatus) + /* If not already recovering from an error, report this error. */ { ++yynerrs; -#if YYERROR_VERBOSE + +#ifdef YYERROR_VERBOSE yyn = yypact[yystate]; - if (YYPACT_NINF < yyn && yyn < YYLAST) - { - YYSIZE_T yysize = 0; - int yytype = YYTRANSLATE (yychar); - char *yymsg; - int yyx, yycount; - - yycount = 0; - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ - for (yyx = yyn < 0 ? -yyn : 0; - yyx < (int) (sizeof (yytname) / sizeof (char *)); yyx++) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - yysize += yystrlen (yytname[yyx]) + 15, yycount++; - yysize += yystrlen ("syntax error, unexpected ") + 1; - yysize += yystrlen (yytname[yytype]); - yymsg = (char *) YYSTACK_ALLOC (yysize); - if (yymsg != 0) - { - char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); - yyp = yystpcpy (yyp, yytname[yytype]); - - if (yycount < 5) - { - yycount = 0; - for (yyx = yyn < 0 ? -yyn : 0; - yyx < (int) (sizeof (yytname) / sizeof (char *)); - yyx++) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) - { - const char *yyq = ! yycount ? ", expecting " : " or "; - yyp = yystpcpy (yyp, yyq); - yyp = yystpcpy (yyp, yytname[yyx]); - yycount++; - } - } - yyerror (yymsg); - YYSTACK_FREE (yymsg); - } - else - yyerror ("syntax error; also virtual memory exhausted"); - } + if (yyn > YYFLAG && yyn < YYLAST) + { + int size = 0; + char *msg; + int x, count; + + count = 0; + /* Start X at -yyn if nec to avoid negative indexes in yycheck. */ + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + size += strlen(yytname[x]) + 15, count++; + msg = (char *) malloc(size + 15); + if (msg != 0) + { + strcpy(msg, "parse error"); + + if (count < 5) + { + count = 0; + for (x = (yyn < 0 ? -yyn : 0); + x < (sizeof(yytname) / sizeof(char *)); x++) + if (yycheck[x + yyn] == x) + { + strcat(msg, count == 0 ? ", expecting `" : " or `"); + strcat(msg, yytname[x]); + strcat(msg, "'"); + count++; + } + } + yyerror(msg); + free(msg); + } + else + yyerror ("parse error; also virtual memory exceeded"); + } else #endif /* YYERROR_VERBOSE */ - yyerror ("syntax error"); + yyerror("parse error"); } - + goto yyerrlab1; +yyerrlab1: /* here on error raised explicitly by an action */ if (yyerrstatus == 3) { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ + /* if just tried and failed to reuse lookahead token after an error, discard it. */ - /* Return failure if at end of input. */ + /* return failure if at end of input */ if (yychar == YYEOF) - { - /* Pop the error token. */ - YYPOPSTACK; - /* Pop the rest of the stack. */ - while (yyss < yyssp) - { - YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); - yydestruct (yystos[*yyssp], yyvsp); - YYPOPSTACK; - } - YYABORT; - } + YYABORT; - YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); - yydestruct (yytoken, &yylval); - yychar = YYEMPTY; +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]); +#endif + yychar = YYEMPTY; } - /* Else will try to reuse lookahead token after shifting the error - token. */ - goto yyerrlab1; + /* Else will try to reuse lookahead token + after shifting the error token. */ + + yyerrstatus = 3; /* Each real token shifted decrements this */ + goto yyerrhandle; -/*----------------------------------------------------. -| yyerrlab1 -- error raised explicitly by an action. | -`----------------------------------------------------*/ -yyerrlab1: - yyerrstatus = 3; /* Each real token shifted decrements this. */ +yyerrdefault: /* current state does not do anything special for the error token. */ - for (;;) +#if 0 + /* This is wrong; only states that explicitly want error tokens + should shift them. */ + yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/ + if (yyn) goto yydefault; +#endif + +yyerrpop: /* pop the current state because it cannot handle the error token */ + + if (yyssp == yyss) YYABORT; + yyvsp--; + yystate = *--yyssp; +#ifdef YYLSP_NEEDED + yylsp--; +#endif + +#if YYDEBUG != 0 + if (yydebug) { - yyn = yypact[yystate]; - if (yyn != YYPACT_NINF) - { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) - { - yyn = yytable[yyn]; - if (0 < yyn) - break; - } - } - - /* Pop the current state because it cannot handle the error token. */ - if (yyssp == yyss) - YYABORT; - - YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); - yydestruct (yystos[yystate], yyvsp); - yyvsp--; - yystate = *--yyssp; + short *ssp1 = yyss - 1; + fprintf (stderr, "Error: state stack now"); + while (ssp1 != yyssp) + fprintf (stderr, " %d", *++ssp1); + fprintf (stderr, "\n"); + } +#endif + +yyerrhandle: - YY_STACK_PRINT (yyss, yyssp); + yyn = yypact[yystate]; + if (yyn == YYFLAG) + goto yyerrdefault; + + yyn += YYTERROR; + if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR) + goto yyerrdefault; + + yyn = yytable[yyn]; + if (yyn < 0) + { + if (yyn == YYFLAG) + goto yyerrpop; + yyn = -yyn; + goto yyreduce; } + else if (yyn == 0) + goto yyerrpop; if (yyn == YYFINAL) YYACCEPT; - YYDPRINTF ((stderr, "Shifting error token, ")); +#if YYDEBUG != 0 + if (yydebug) + fprintf(stderr, "Shifting error token, "); +#endif *++yyvsp = yylval; - +#ifdef YYLSP_NEEDED + *++yylsp = yylloc; +#endif yystate = yyn; goto yynewstate; + yyacceptlab: + /* YYACCEPT comes here. */ + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); +#endif + } + return 0; -/*-------------------------------------. -| yyacceptlab -- YYACCEPT comes here. | -`-------------------------------------*/ -yyacceptlab: - yyresult = 0; - goto yyreturn; - -/*-----------------------------------. -| yyabortlab -- YYABORT comes here. | -`-----------------------------------*/ -yyabortlab: - yyresult = 1; - goto yyreturn; - -#ifndef yyoverflow -/*----------------------------------------------. -| yyoverflowlab -- parser overflow comes here. | -`----------------------------------------------*/ -yyoverflowlab: - yyerror ("parser stack overflow"); - yyresult = 2; - /* Fall through. */ -#endif - -yyreturn: -#ifndef yyoverflow - if (yyss != yyssa) - YYSTACK_FREE (yyss); + yyabortlab: + /* YYABORT comes here. */ + if (yyfree_stacks) + { + free (yyss); + free (yyvs); +#ifdef YYLSP_NEEDED + free (yyls); #endif - return yyresult; + } + return 1; } - - -#line 497 "graphviz_parser.yy" +#line 501 "graphviz_parser.yy" namespace boost { @@ -1738,4 +1466,3 @@ } - Index: graphviz_graph_parser.hpp =================================================================== RCS file: /cvsroot/boost/boost/libs/graph/src/graphviz_graph_parser.hpp,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- graphviz_graph_parser.hpp 26 Jan 2004 08:58:40 -0000 1.1 +++ graphviz_graph_parser.hpp 8 Feb 2005 14:52:29 -0000 1.2 @@ -1,62 +1,8 @@ -/* A Bison parser, made by GNU Bison 1.875a. */ - -/* Skeleton parser for Yacc-like parsing with Bison, - Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -/* As a special exception, when this file is copied by Bison into a - Bison output file, you may use that output file without restriction. - This special exception was added by the Free Software Foundation - in version 1.24 of Bison. */ - -/* Tokens. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - /* Put the tokens into the symbol table, so that GDB and other debuggers - know about them. */ - enum yytokentype { - GRAPH_T = 258, - NODE_T = 259, - EDGE_T = 260, - DIGRAPH_T = 261, - EDGEOP_T = 262, - SUBGRAPH_T = 263, - ID_T = 264 - }; -#endif -#define GRAPH_T 258 -#define NODE_T 259 -#define EDGE_T 260 -#define DIGRAPH_T 261 -#define EDGEOP_T 262 -#define SUBGRAPH_T 263 -#define ID_T 264 - - - - -#if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -typedef int YYSTYPE; -# define yystype YYSTYPE /* obsolescent; will be withdrawn */ -# define YYSTYPE_IS_DECLARED 1 -# define YYSTYPE_IS_TRIVIAL 1 -#endif - - - - +#define GRAPH_T 257 +#define NODE_T 258 +#define EDGE_T 259 +#define DIGRAPH_T 260 +#define EDGEOP_T 261 +#define SUBGRAPH_T 262 +#define ID_T 263 Index: graphviz_parser.yy =================================================================== RCS file: /cvsroot/boost/boost/libs/graph/src/graphviz_parser.yy,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- graphviz_parser.yy 26 Jan 2004 09:16:16 -0000 1.2 +++ graphviz_parser.yy 8 Feb 2005 14:52:29 -0000 1.3 @@ -245,6 +245,7 @@ %type graph graph_header graph_type stmt_list stmt attr_stmt attr_header %type attr_list attr compound_stmt node_stmt edge_stmt opt_attr %type graph_body edge_rhs_one edge_rhs graph_attr opt_graph_body +%type nonempty_attr_list %type graph_name %type edge_endpoint node_id node_port subgraph subgraph_header @@ -299,7 +300,10 @@ | EDGE_T { graphviz::attribute_state = GRAPH_EDGE_A; } ; -attr_list: attr | attr_list attr_separator attr +attr_list: nonempty_attr_list | {} + ; + +nonempty_attr_list: attr | nonempty_attr_list attr_separator attr ; attr: ID_T '=' ID_T