2
0
mirror of https://github.com/boostorg/graph.git synced 2026-02-01 20:42:11 +00:00

Fix (or rather workaround) the bug which caused second reading

of graphviz file to fail. Looks like the parser is not reenterant.

Patch from anynymous user.


[SVN r21951]
This commit is contained in:
Vladimir Prus
2004-01-26 09:16:16 +00:00
parent 547cd77748
commit a11e93caa4
3 changed files with 76 additions and 64 deletions

View File

@@ -531,11 +531,11 @@ static const yysigned_char yyrhs[] =
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const unsigned short yyrline[] =
{
0, 254, 254, 257, 260, 270, 270, 273, 273, 276,
276, 279, 279, 282, 283, 286, 293, 294, 295, 298,
298, 301, 311, 311, 311, 314, 314, 314, 314, 317,
325, 336, 336, 339, 354, 357, 376, 421, 425, 425,
428, 437, 448, 456, 456, 470, 491, 491
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
@@ -1282,6 +1282,10 @@ yyreduce:
case 4:
#line 261 "graphviz_parser.yy"
{
graphviz::vlist.clear();
graphviz::attributes.clear();
graphviz::subgraphs.clear();
graphviz::nodes.clear();
std::string* name = static_cast<std::string*>(yyvsp[0].ptr);
graphviz::previous_graph = static_cast<graphviz::Subgraph*>(g);
graphviz::current_graph = static_cast<graphviz::Subgraph*>(g);
@@ -1291,17 +1295,17 @@ yyreduce:
break;
case 7:
#line 273 "graphviz_parser.yy"
#line 277 "graphviz_parser.yy"
{yyval.ptr = yyvsp[0].ptr; ;}
break;
case 8:
#line 273 "graphviz_parser.yy"
#line 277 "graphviz_parser.yy"
{yyval.ptr=(void*)(new std::string("G")); ;}
break;
case 15:
#line 287 "graphviz_parser.yy"
#line 291 "graphviz_parser.yy"
{
graphviz::set_attribute(*graphviz::current_graph,
graphviz::attribute_state);
@@ -1309,22 +1313,22 @@ yyreduce:
break;
case 16:
#line 293 "graphviz_parser.yy"
#line 297 "graphviz_parser.yy"
{ graphviz::attribute_state = GRAPH_GRAPH_A; ;}
break;
case 17:
#line 294 "graphviz_parser.yy"
#line 298 "graphviz_parser.yy"
{ graphviz::attribute_state = GRAPH_NODE_A; ;}
break;
case 18:
#line 295 "graphviz_parser.yy"
#line 299 "graphviz_parser.yy"
{ graphviz::attribute_state = GRAPH_EDGE_A; ;}
break;
case 21:
#line 302 "graphviz_parser.yy"
#line 306 "graphviz_parser.yy"
{
std::string* name = static_cast<std::string*>(yyvsp[-2].ptr);
std::string* value = static_cast<std::string*>(yyvsp[0].ptr);
@@ -1335,12 +1339,12 @@ yyreduce:
break;
case 28:
#line 314 "graphviz_parser.yy"
#line 318 "graphviz_parser.yy"
{ yyval.i = 0; ;}
break;
case 29:
#line 318 "graphviz_parser.yy"
#line 322 "graphviz_parser.yy"
{
graphviz::set_attribute(
*static_cast<graphviz::Subgraph*>(graphviz::current_graph),
@@ -1349,7 +1353,7 @@ yyreduce:
break;
case 30:
#line 326 "graphviz_parser.yy"
#line 330 "graphviz_parser.yy"
{
graphviz::Vertex* temp = static_cast<graphviz::Vertex*>(yyvsp[-1].ptr);
graphviz::current_vertex = *temp;
@@ -1361,17 +1365,17 @@ yyreduce:
break;
case 31:
#line 336 "graphviz_parser.yy"
#line 340 "graphviz_parser.yy"
{ yyval.i=0; ;}
break;
case 32:
#line 336 "graphviz_parser.yy"
#line 340 "graphviz_parser.yy"
{ yyval.i=0; ;}
break;
case 33:
#line 340 "graphviz_parser.yy"
#line 344 "graphviz_parser.yy"
{
std::string* name = static_cast<std::string*>(yyvsp[0].ptr);
std::pair<graphviz::Iter, bool> result = graphviz::lookup(*name);
@@ -1389,12 +1393,12 @@ yyreduce:
break;
case 34:
#line 354 "graphviz_parser.yy"
#line 358 "graphviz_parser.yy"
{ yyval.ptr=yyvsp[0].ptr; ;}
break;
case 35:
#line 358 "graphviz_parser.yy"
#line 362 "graphviz_parser.yy"
{
//consider port as a special properties ?? --need work here
std::string* name = static_cast<std::string*>(yyvsp[-2].ptr);
@@ -1414,7 +1418,7 @@ yyreduce:
break;
case 36:
#line 377 "graphviz_parser.yy"
#line 381 "graphviz_parser.yy"
{
typedef std::pair<void*, bool>* Ptr;
@@ -1460,12 +1464,12 @@ yyreduce:
break;
case 37:
#line 422 "graphviz_parser.yy"
#line 426 "graphviz_parser.yy"
{ graphviz::vlist.push_back(static_cast<std::pair<void*, bool>*>(yyvsp[0].ptr)); ;}
break;
case 40:
#line 429 "graphviz_parser.yy"
#line 433 "graphviz_parser.yy"
{
std::pair<void*, bool>* temp = new std::pair<void*, bool>;
temp->first = yyvsp[0].ptr;
@@ -1477,7 +1481,7 @@ yyreduce:
break;
case 41:
#line 438 "graphviz_parser.yy"
#line 442 "graphviz_parser.yy"
{
std::pair<void*, bool>* temp = new std::pair<void*, bool>;
temp->first = yyvsp[0].ptr;
@@ -1489,7 +1493,7 @@ yyreduce:
break;
case 42:
#line 449 "graphviz_parser.yy"
#line 453 "graphviz_parser.yy"
{
if ( yyvsp[0].i )
graphviz::current_graph = &graphviz::current_graph->parent();
@@ -1499,7 +1503,7 @@ yyreduce:
break;
case 43:
#line 456 "graphviz_parser.yy"
#line 460 "graphviz_parser.yy"
{
graphviz::previous_graph = graphviz::current_graph;
std::string name = graphviz::random_string();
@@ -1512,14 +1516,14 @@ yyreduce:
break;
case 44:
#line 465 "graphviz_parser.yy"
#line 469 "graphviz_parser.yy"
{
graphviz::current_graph = &graphviz::current_graph->parent();
;}
break;
case 45:
#line 471 "graphviz_parser.yy"
#line 475 "graphviz_parser.yy"
{
//lookup ID_T if it is already in the subgraph,
//if it is not, add a new subgraph
@@ -1541,12 +1545,12 @@ yyreduce:
break;
case 46:
#line 491 "graphviz_parser.yy"
#line 495 "graphviz_parser.yy"
{yyval.i = 1; ;}
break;
case 47:
#line 491 "graphviz_parser.yy"
#line 495 "graphviz_parser.yy"
{ yyval.i = 0; ;}
break;
@@ -1554,7 +1558,7 @@ yyreduce:
}
/* Line 999 of yacc.c. */
#line 1558 "graphviz_digraph_parser.cpp"
#line 1562 "graphviz_digraph_parser.cpp"
yyvsp -= yylen;
yyssp -= yylen;
@@ -1748,7 +1752,7 @@ yyreturn:
}
#line 493 "graphviz_parser.yy"
#line 497 "graphviz_parser.yy"
namespace boost {