#include "parser.h"
#include "basics.h"
#include "dfa.h"
+#include "smart_ptr.h"
#define YYMALLOC malloc
#define YYFREE free
/* Line 268 of yacc.c */
-#line 201 "parser.cc"
+#line 202 "parser.cc"
/* Enabling traces. */
#ifndef YYDEBUG
{
/* Line 293 of yacc.c */
-#line 132 "parser.y"
+#line 133 "parser.y"
re2c::Symbol *symbol;
re2c::RegExp *regexp;
/* Line 293 of yacc.c */
-#line 280 "parser.cc"
+#line 281 "parser.cc"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
/* Line 343 of yacc.c */
-#line 292 "parser.cc"
+#line 293 "parser.cc"
#ifdef short
# undef short
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 161, 161, 163, 167, 171, 179, 187, 191, 195,
- 201, 209, 218, 222, 227, 232, 238, 246, 254, 259,
- 265, 277, 289, 295, 303, 306, 313, 318, 327, 330,
- 338, 341, 348, 352, 359, 363, 374, 378, 385, 389,
- 404, 411, 415, 419, 423, 430, 438, 442, 446
+ 0, 162, 162, 164, 168, 172, 180, 188, 192, 196,
+ 202, 210, 219, 223, 228, 233, 239, 247, 255, 260,
+ 266, 278, 290, 296, 304, 307, 314, 319, 328, 331,
+ 339, 342, 349, 353, 360, 364, 375, 379, 386, 390,
+ 405, 412, 416, 420, 424, 431, 439, 443, 447
};
#endif
case 2:
/* Line 1806 of yacc.c */
-#line 161 "parser.y"
+#line 162 "parser.y"
{
}
break;
case 3:
/* Line 1806 of yacc.c */
-#line 164 "parser.y"
+#line 165 "parser.y"
{
foundRules = true;
}
case 5:
/* Line 1806 of yacc.c */
-#line 172 "parser.y"
+#line 173 "parser.y"
{
if ((yyvsp[(1) - (4)].symbol)->re)
{
case 6:
/* Line 1806 of yacc.c */
-#line 180 "parser.y"
+#line 181 "parser.y"
{
if ((yyvsp[(1) - (2)].symbol)->re)
{
case 7:
/* Line 1806 of yacc.c */
-#line 188 "parser.y"
+#line 189 "parser.y"
{
in->fatal("trailing contexts are not allowed in named definitions");
}
case 8:
/* Line 1806 of yacc.c */
-#line 192 "parser.y"
+#line 193 "parser.y"
{
in->fatal("trailing contexts are not allowed in named definitions");
}
case 9:
/* Line 1806 of yacc.c */
-#line 196 "parser.y"
+#line 197 "parser.y"
{
in->config(*(yyvsp[(1) - (4)].str), *(yyvsp[(3) - (4)].str));
delete (yyvsp[(1) - (4)].str);
case 10:
/* Line 1806 of yacc.c */
-#line 202 "parser.y"
+#line 203 "parser.y"
{
in->config(*(yyvsp[(1) - (4)].str), (yyvsp[(3) - (4)].number));
delete (yyvsp[(1) - (4)].str);
case 11:
/* Line 1806 of yacc.c */
-#line 210 "parser.y"
+#line 211 "parser.y"
{
if (cFlag)
{
case 12:
/* Line 1806 of yacc.c */
-#line 219 "parser.y"
+#line 220 "parser.y"
{
context_rule((yyvsp[(2) - (7)].clist), (yyvsp[(4) - (7)].regexp), (yyvsp[(5) - (7)].regexp), (yyvsp[(6) - (7)].str), (yyvsp[(7) - (7)].token));
}
case 13:
/* Line 1806 of yacc.c */
-#line 223 "parser.y"
+#line 224 "parser.y"
{
assert((yyvsp[(7) - (7)].str));
context_rule((yyvsp[(2) - (7)].clist), (yyvsp[(4) - (7)].regexp), (yyvsp[(5) - (7)].regexp), (yyvsp[(7) - (7)].str), NULL);
case 14:
/* Line 1806 of yacc.c */
-#line 228 "parser.y"
+#line 229 "parser.y"
{
context_none((yyvsp[(2) - (6)].clist));
delete (yyvsp[(5) - (6)].str);
case 15:
/* Line 1806 of yacc.c */
-#line 233 "parser.y"
+#line 234 "parser.y"
{
assert((yyvsp[(6) - (6)].str));
context_none((yyvsp[(2) - (6)].clist));
case 16:
/* Line 1806 of yacc.c */
-#line 239 "parser.y"
+#line 240 "parser.y"
{
context_check(NULL);
Token *token = new Token((yyvsp[(7) - (7)].token), (yyvsp[(7) - (7)].token)->source, (yyvsp[(7) - (7)].token)->line, (yyvsp[(6) - (7)].str));
case 17:
/* Line 1806 of yacc.c */
-#line 247 "parser.y"
+#line 248 "parser.y"
{
assert((yyvsp[(7) - (7)].str));
context_check(NULL);
case 18:
/* Line 1806 of yacc.c */
-#line 255 "parser.y"
+#line 256 "parser.y"
{
context_none(NULL);
delete (yyvsp[(5) - (6)].str);
case 19:
/* Line 1806 of yacc.c */
-#line 260 "parser.y"
+#line 261 "parser.y"
{
assert((yyvsp[(6) - (6)].str));
context_none(NULL);
case 20:
/* Line 1806 of yacc.c */
-#line 266 "parser.y"
+#line 267 "parser.y"
{
context_check(NULL);
if (specNone)
case 21:
/* Line 1806 of yacc.c */
-#line 278 "parser.y"
+#line 279 "parser.y"
{
assert((yyvsp[(3) - (3)].str));
context_check(NULL);
case 22:
/* Line 1806 of yacc.c */
-#line 290 "parser.y"
+#line 291 "parser.y"
{
CondList *clist = new CondList();
clist->insert("*");
case 23:
/* Line 1806 of yacc.c */
-#line 296 "parser.y"
+#line 297 "parser.y"
{
setup_rule((yyvsp[(2) - (4)].clist), (yyvsp[(4) - (4)].token));
}
case 24:
/* Line 1806 of yacc.c */
-#line 303 "parser.y"
+#line 304 "parser.y"
{
in->fatal("unnamed condition not supported");
}
case 25:
/* Line 1806 of yacc.c */
-#line 307 "parser.y"
+#line 308 "parser.y"
{
(yyval.clist) = (yyvsp[(1) - (1)].clist);
}
case 26:
/* Line 1806 of yacc.c */
-#line 314 "parser.y"
+#line 315 "parser.y"
{
(yyval.clist) = new CondList();
(yyval.clist)->insert((yyvsp[(1) - (1)].symbol)->GetName().to_string());
case 27:
/* Line 1806 of yacc.c */
-#line 319 "parser.y"
+#line 320 "parser.y"
{
(yyvsp[(1) - (3)].clist)->insert((yyvsp[(3) - (3)].symbol)->GetName().to_string());
(yyval.clist) = (yyvsp[(1) - (3)].clist);
case 28:
/* Line 1806 of yacc.c */
-#line 327 "parser.y"
+#line 328 "parser.y"
{
(yyval.str) = NULL;
}
case 29:
/* Line 1806 of yacc.c */
-#line 331 "parser.y"
+#line 332 "parser.y"
{
(yyval.str) = new Str((yyvsp[(3) - (3)].symbol)->GetName().to_string().c_str());
}
case 30:
/* Line 1806 of yacc.c */
-#line 338 "parser.y"
+#line 339 "parser.y"
{
(yyval.regexp) = new NullOp;
}
case 31:
/* Line 1806 of yacc.c */
-#line 342 "parser.y"
+#line 343 "parser.y"
{
(yyval.regexp) = (yyvsp[(2) - (2)].regexp);
}
case 32:
/* Line 1806 of yacc.c */
-#line 349 "parser.y"
+#line 350 "parser.y"
{
(yyval.regexp) = (yyvsp[(1) - (1)].regexp);
}
case 33:
/* Line 1806 of yacc.c */
-#line 353 "parser.y"
+#line 354 "parser.y"
{
(yyval.regexp) = mkAlt((yyvsp[(1) - (3)].regexp), (yyvsp[(3) - (3)].regexp));
}
case 34:
/* Line 1806 of yacc.c */
-#line 360 "parser.y"
+#line 361 "parser.y"
{
(yyval.regexp) = (yyvsp[(1) - (1)].regexp);
}
case 35:
/* Line 1806 of yacc.c */
-#line 364 "parser.y"
+#line 365 "parser.y"
{
(yyval.regexp) = mkDiff((yyvsp[(1) - (3)].regexp), (yyvsp[(3) - (3)].regexp));
if(!(yyval.regexp))
case 36:
/* Line 1806 of yacc.c */
-#line 375 "parser.y"
+#line 376 "parser.y"
{
(yyval.regexp) = (yyvsp[(1) - (1)].regexp);
}
case 37:
/* Line 1806 of yacc.c */
-#line 379 "parser.y"
+#line 380 "parser.y"
{
(yyval.regexp) = new CatOp((yyvsp[(1) - (2)].regexp), (yyvsp[(2) - (2)].regexp));
}
case 38:
/* Line 1806 of yacc.c */
-#line 386 "parser.y"
+#line 387 "parser.y"
{
(yyval.regexp) = (yyvsp[(1) - (1)].regexp);
}
case 39:
/* Line 1806 of yacc.c */
-#line 390 "parser.y"
+#line 391 "parser.y"
{
switch((yyvsp[(2) - (2)].op))
{
case 40:
/* Line 1806 of yacc.c */
-#line 405 "parser.y"
+#line 406 "parser.y"
{
(yyval.regexp) = new CloseVOp((yyvsp[(1) - (2)].regexp), (yyvsp[(2) - (2)].extop).minsize, (yyvsp[(2) - (2)].extop).maxsize);
}
case 41:
/* Line 1806 of yacc.c */
-#line 412 "parser.y"
+#line 413 "parser.y"
{
(yyval.op) = (yyvsp[(1) - (1)].op);
}
case 42:
/* Line 1806 of yacc.c */
-#line 416 "parser.y"
+#line 417 "parser.y"
{
(yyval.op) = (yyvsp[(1) - (1)].op);
}
case 43:
/* Line 1806 of yacc.c */
-#line 420 "parser.y"
+#line 421 "parser.y"
{
(yyval.op) = ((yyvsp[(1) - (2)].op) == (yyvsp[(2) - (2)].op)) ? (yyvsp[(1) - (2)].op) : '*';
}
case 44:
/* Line 1806 of yacc.c */
-#line 424 "parser.y"
+#line 425 "parser.y"
{
(yyval.op) = ((yyvsp[(1) - (2)].op) == (yyvsp[(2) - (2)].op)) ? (yyvsp[(1) - (2)].op) : '*';
}
case 45:
/* Line 1806 of yacc.c */
-#line 431 "parser.y"
+#line 432 "parser.y"
{
if(!(yyvsp[(1) - (1)].symbol)->re)
{
case 46:
/* Line 1806 of yacc.c */
-#line 439 "parser.y"
+#line 440 "parser.y"
{
(yyval.regexp) = (yyvsp[(1) - (1)].regexp);
}
case 47:
/* Line 1806 of yacc.c */
-#line 443 "parser.y"
+#line 444 "parser.y"
{
(yyval.regexp) = (yyvsp[(1) - (1)].regexp);
}
case 48:
/* Line 1806 of yacc.c */
-#line 447 "parser.y"
+#line 448 "parser.y"
{
(yyval.regexp) = (yyvsp[(2) - (3)].regexp);
}
/* Line 1806 of yacc.c */
-#line 2072 "parser.cc"
+#line 2073 "parser.cc"
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
/* Line 2067 of yacc.c */
-#line 452 "parser.y"
+#line 453 "parser.y"
extern "C" {
void parse(Scanner& i, std::ostream& o, std::ostream* h)
{
- std::map<std::string, DFA*> dfa_map;
+ std::map<std::string, smart_ptr<DFA>> dfa_map;
ScannerState rules_state;
in = &i;