static const unsigned short int yyrline[] =
{
0, 92, 92, 96, 97, 101, 109, 113, 119, 127,
- 136, 159, 168, 176, 184, 200, 203, 210, 215, 224,
- 227, 234, 238, 245, 249, 260, 264, 271, 275, 290,
- 297, 301, 305, 309, 316, 324, 328, 332
+ 136, 164, 173, 181, 189, 205, 208, 215, 220, 229,
+ 232, 239, 243, 250, 254, 265, 269, 276, 280, 295,
+ 302, 306, 310, 314, 321, 329, 333, 337
};
#endif
{
// Duplicating stuff, slow but safe
(yyval.regexp) = new RuleOp((yyvsp[-2].regexp), (yyvsp[-1].regexp), new Token(*(yyvsp[0].token)), accept++);
-
+
RegExpMap::iterator itRE = specMap.find(*it);
-
+
if (itRE != specMap.end())
{
- (yyval.regexp) = mkAlt(itRE->second.second, (yyval.regexp));
+ itRE->second.second = mkAlt(itRE->second.second, (yyval.regexp));
+ }
+ else
+ {
+ size_t nIndex = specMap.size() + 1; // 0 is reserved for "0"-spec
+ specMap[*it] = std::make_pair(nIndex, (yyval.regexp));
}
- specMap[*it] = std::make_pair(specMap.size(), (yyval.regexp));
+
}
delete (yyvsp[-4].clist);
delete (yyvsp[0].token);
break;
case 11:
-#line 160 "parser.y"
+#line 165 "parser.y"
{
delete (yyvsp[-3].clist);
if (!cFlag)
break;
case 12:
-#line 169 "parser.y"
+#line 174 "parser.y"
{
if (!cFlag)
{
break;
case 13:
-#line 177 "parser.y"
+#line 182 "parser.y"
{
if (!cFlag)
{
break;
case 14:
-#line 185 "parser.y"
+#line 190 "parser.y"
{
if (!cFlag)
{
break;
case 15:
-#line 200 "parser.y"
+#line 205 "parser.y"
{
in->fatal("unnamed condition not supported");
}
break;
case 16:
-#line 204 "parser.y"
+#line 209 "parser.y"
{
(yyval.clist) = (yyvsp[0].clist);
}
break;
case 17:
-#line 211 "parser.y"
+#line 216 "parser.y"
{
(yyval.clist) = new CondList();
(yyval.clist)->insert((yyvsp[0].symbol)->GetName().to_string());
break;
case 18:
-#line 216 "parser.y"
+#line 221 "parser.y"
{
(yyvsp[-2].clist)->insert((yyvsp[0].symbol)->GetName().to_string());
(yyval.clist) = (yyvsp[-2].clist);
break;
case 19:
-#line 224 "parser.y"
+#line 229 "parser.y"
{
(yyval.regexp) = new NullOp;
}
break;
case 20:
-#line 228 "parser.y"
+#line 233 "parser.y"
{
(yyval.regexp) = (yyvsp[0].regexp);
}
break;
case 21:
-#line 235 "parser.y"
+#line 240 "parser.y"
{
(yyval.regexp) = (yyvsp[0].regexp);
}
break;
case 22:
-#line 239 "parser.y"
+#line 244 "parser.y"
{
(yyval.regexp) = mkAlt((yyvsp[-2].regexp), (yyvsp[0].regexp));
}
break;
case 23:
-#line 246 "parser.y"
+#line 251 "parser.y"
{
(yyval.regexp) = (yyvsp[0].regexp);
}
break;
case 24:
-#line 250 "parser.y"
+#line 255 "parser.y"
{
(yyval.regexp) = mkDiff((yyvsp[-2].regexp), (yyvsp[0].regexp));
if(!(yyval.regexp))
break;
case 25:
-#line 261 "parser.y"
+#line 266 "parser.y"
{
(yyval.regexp) = (yyvsp[0].regexp);
}
break;
case 26:
-#line 265 "parser.y"
+#line 270 "parser.y"
{
(yyval.regexp) = new CatOp((yyvsp[-1].regexp), (yyvsp[0].regexp));
}
break;
case 27:
-#line 272 "parser.y"
+#line 277 "parser.y"
{
(yyval.regexp) = (yyvsp[0].regexp);
}
break;
case 28:
-#line 276 "parser.y"
+#line 281 "parser.y"
{
switch((yyvsp[0].op))
{
break;
case 29:
-#line 291 "parser.y"
+#line 296 "parser.y"
{
(yyval.regexp) = new CloseVOp((yyvsp[-1].regexp), (yyvsp[0].extop).minsize, (yyvsp[0].extop).maxsize);
}
break;
case 30:
-#line 298 "parser.y"
+#line 303 "parser.y"
{
(yyval.op) = (yyvsp[0].op);
}
break;
case 31:
-#line 302 "parser.y"
+#line 307 "parser.y"
{
(yyval.op) = (yyvsp[0].op);
}
break;
case 32:
-#line 306 "parser.y"
+#line 311 "parser.y"
{
(yyval.op) = ((yyvsp[-1].op) == (yyvsp[0].op)) ? (yyvsp[-1].op) : '*';
}
break;
case 33:
-#line 310 "parser.y"
+#line 315 "parser.y"
{
(yyval.op) = ((yyvsp[-1].op) == (yyvsp[0].op)) ? (yyvsp[-1].op) : '*';
}
break;
case 34:
-#line 317 "parser.y"
+#line 322 "parser.y"
{
if(!(yyvsp[0].symbol)->re)
{
break;
case 35:
-#line 325 "parser.y"
+#line 330 "parser.y"
{
(yyval.regexp) = (yyvsp[0].regexp);
}
break;
case 36:
-#line 329 "parser.y"
+#line 334 "parser.y"
{
(yyval.regexp) = (yyvsp[0].regexp);
}
break;
case 37:
-#line 333 "parser.y"
+#line 338 "parser.y"
{
(yyval.regexp) = (yyvsp[-1].regexp);
}
}
/* Line 1126 of yacc.c. */
-#line 1541 "parser.cc"
+#line 1546 "parser.cc"
\f
yyvsp -= yylen;
yyssp -= yylen;
}
-#line 338 "parser.y"
+#line 343 "parser.y"
extern "C" {
{
// After merging star rules merge none code to specmap
// this simplifies some stuff.
- // Note that 0 inserts first, which is important.
- // Also "0" won't necessarily get index 0!
- specMap["0"] = std::make_pair(specMap.size(), specNone);
+ // Note that "0" inserts first, which is important.
+ specMap["0"] = std::make_pair(0, specNone);
}
size_t nCount = specMap.size();