]> granicus.if.org Git - re2c/commitdiff
Moved 're2c::Symbol' class to a separate header and source file.
authorUlya Trofimovich <skvadrik@gmail.com>
Wed, 13 May 2015 16:34:48 +0000 (17:34 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Wed, 13 May 2015 16:34:48 +0000 (17:34 +0100)
re2c/Makefile.am
re2c/bootstrap/parser.cc
re2c/bootstrap/scanner_lex.cc
re2c/bootstrap/y.tab.h
re2c/src/dfa/actions.cc
re2c/src/parse/parser.h
re2c/src/parse/parser.ypp
re2c/src/parse/scanner_lex.re
re2c/src/parse/symbol.cc [new file with mode: 0644]
re2c/src/parse/symbol.h [new file with mode: 0644]

index 47134af8771c3661ed6fe7faa9605e9ae2c2c5bd..14f2cabb09d89a735a3b8db37226be97f5053a9c 100644 (file)
@@ -55,6 +55,7 @@ SRC_HDR = \
        $(srcdir)/src/parse/input.h \
        $(srcdir)/src/parse/parser.h \
        $(srcdir)/src/parse/scanner.h \
+       $(srcdir)/src/parse/symbol.h \
        $(srcdir)/src/parse/token.h \
        $(srcdir)/src/util/allocate.h \
        $(srcdir)/src/util/c99_stdint.h \
@@ -94,6 +95,7 @@ SRC = \
        $(srcdir)/src/mbo_getopt.cc \
        $(srcdir)/src/parse/input.cc \
        $(srcdir)/src/parse/scanner.cc \
+       $(srcdir)/src/parse/symbol.cc \
        $(srcdir)/src/util/range.cc \
        $(srcdir)/src/util/substr.cc
 # omit SRC_PARSER here; include it in EXTRA_DIST instead
index 24e3d247422dfa7be73b80779699c73a04d1d4f5..bef481dec4c0ba32a169c4cf47cdda08d4997d68 100644 (file)
@@ -84,6 +84,7 @@
 #include "src/codegen/dfa_emit.h" // genTypes
 #include "src/globals.h"
 #include "src/parse/parser.h"
+#include "src/parse/symbol.h"
 #include "src/util/c99_stdint.h"
 #include "src/util/smart_ptr.h"
 
@@ -216,7 +217,7 @@ void default_rule(CondList *clist, Token *code)
 
 
 /* Line 189 of yacc.c  */
-#line 220 "./parser.cc"
+#line 221 "./parser.cc"
 
 /* Enabling traces.  */
 #ifndef YYDEBUG
@@ -266,7 +267,7 @@ typedef union YYSTYPE
 {
 
 /* Line 214 of yacc.c  */
-#line 150 "../src/parse/parser.ypp"
+#line 151 "../src/parse/parser.ypp"
 
        re2c::Symbol    *symbol;
        re2c::RegExp    *regexp;
@@ -280,7 +281,7 @@ typedef union YYSTYPE
 
 
 /* Line 214 of yacc.c  */
-#line 284 "./parser.cc"
+#line 285 "./parser.cc"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -292,7 +293,7 @@ typedef union YYSTYPE
 
 
 /* Line 264 of yacc.c  */
-#line 296 "./parser.cc"
+#line 297 "./parser.cc"
 
 #ifdef short
 # undef short
@@ -599,12 +600,12 @@ static const yytype_int8 yyrhs[] =
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   179,   179,   181,   185,   189,   198,   207,   211,   215,
-     221,   229,   238,   247,   251,   256,   261,   267,   271,   279,
-     287,   292,   298,   304,   316,   328,   334,   342,   345,   352,
-     357,   366,   369,   377,   380,   387,   391,   398,   402,   413,
-     417,   424,   428,   443,   450,   454,   458,   462,   469,   477,
-     481,   485
+       0,   180,   180,   182,   186,   190,   199,   208,   212,   216,
+     222,   230,   239,   248,   252,   257,   262,   268,   272,   280,
+     288,   293,   299,   305,   317,   329,   335,   343,   346,   353,
+     358,   367,   370,   378,   381,   388,   392,   399,   403,   414,
+     418,   425,   429,   444,   451,   455,   459,   463,   470,   478,
+     482,   486
 };
 #endif
 
@@ -1573,7 +1574,7 @@ yyreduce:
         case 2:
 
 /* Line 1464 of yacc.c  */
-#line 179 "../src/parse/parser.ypp"
+#line 180 "../src/parse/parser.ypp"
     {
                ;}
     break;
@@ -1581,7 +1582,7 @@ yyreduce:
   case 3:
 
 /* Line 1464 of yacc.c  */
-#line 182 "../src/parse/parser.ypp"
+#line 183 "../src/parse/parser.ypp"
     {
                        foundRules = true;
                ;}
@@ -1590,7 +1591,7 @@ yyreduce:
   case 5:
 
 /* Line 1464 of yacc.c  */
-#line 190 "../src/parse/parser.ypp"
+#line 191 "../src/parse/parser.ypp"
     {
                        if ((yyvsp[(1) - (4)].symbol)->re)
                        {
@@ -1604,7 +1605,7 @@ yyreduce:
   case 6:
 
 /* Line 1464 of yacc.c  */
-#line 199 "../src/parse/parser.ypp"
+#line 200 "../src/parse/parser.ypp"
     {
                        if ((yyvsp[(1) - (2)].symbol)->re)
                        {
@@ -1618,7 +1619,7 @@ yyreduce:
   case 7:
 
 /* Line 1464 of yacc.c  */
-#line 208 "../src/parse/parser.ypp"
+#line 209 "../src/parse/parser.ypp"
     {
                        in->fatal("trailing contexts are not allowed in named definitions");
                ;}
@@ -1627,7 +1628,7 @@ yyreduce:
   case 8:
 
 /* Line 1464 of yacc.c  */
-#line 212 "../src/parse/parser.ypp"
+#line 213 "../src/parse/parser.ypp"
     {
                        in->fatal("trailing contexts are not allowed in named definitions");
                ;}
@@ -1636,7 +1637,7 @@ yyreduce:
   case 9:
 
 /* Line 1464 of yacc.c  */
-#line 216 "../src/parse/parser.ypp"
+#line 217 "../src/parse/parser.ypp"
     {
                        in->config((yyvsp[(1) - (4)].str)->to_string (), *(yyvsp[(3) - (4)].str));
                        delete (yyvsp[(1) - (4)].str);
@@ -1647,7 +1648,7 @@ yyreduce:
   case 10:
 
 /* Line 1464 of yacc.c  */
-#line 222 "../src/parse/parser.ypp"
+#line 223 "../src/parse/parser.ypp"
     {
                        in->config((yyvsp[(1) - (4)].str)->to_string (), (yyvsp[(3) - (4)].number));
                        delete (yyvsp[(1) - (4)].str);
@@ -1657,7 +1658,7 @@ yyreduce:
   case 11:
 
 /* Line 1464 of yacc.c  */
-#line 230 "../src/parse/parser.ypp"
+#line 231 "../src/parse/parser.ypp"
     {
                        if (cFlag)
                        {
@@ -1671,7 +1672,7 @@ yyreduce:
   case 12:
 
 /* Line 1464 of yacc.c  */
-#line 239 "../src/parse/parser.ypp"
+#line 240 "../src/parse/parser.ypp"
     {
                        if (cFlag)
                                in->fatal("condition or '<*>' required when using -c switch");
@@ -1685,7 +1686,7 @@ yyreduce:
   case 13:
 
 /* Line 1464 of yacc.c  */
-#line 248 "../src/parse/parser.ypp"
+#line 249 "../src/parse/parser.ypp"
     {
                        context_rule((yyvsp[(2) - (7)].clist), (yyvsp[(4) - (7)].regexp), (yyvsp[(5) - (7)].regexp), (yyvsp[(6) - (7)].str), (yyvsp[(7) - (7)].token));
                ;}
@@ -1694,7 +1695,7 @@ yyreduce:
   case 14:
 
 /* Line 1464 of yacc.c  */
-#line 252 "../src/parse/parser.ypp"
+#line 253 "../src/parse/parser.ypp"
     {
                        assert((yyvsp[(7) - (7)].str));
                        context_rule((yyvsp[(2) - (7)].clist), (yyvsp[(4) - (7)].regexp), (yyvsp[(5) - (7)].regexp), (yyvsp[(7) - (7)].str), NULL);
@@ -1704,7 +1705,7 @@ yyreduce:
   case 15:
 
 /* Line 1464 of yacc.c  */
-#line 257 "../src/parse/parser.ypp"
+#line 258 "../src/parse/parser.ypp"
     {
                        context_none((yyvsp[(2) - (6)].clist));
                        delete (yyvsp[(5) - (6)].str);
@@ -1714,7 +1715,7 @@ yyreduce:
   case 16:
 
 /* Line 1464 of yacc.c  */
-#line 262 "../src/parse/parser.ypp"
+#line 263 "../src/parse/parser.ypp"
     {
                        assert((yyvsp[(6) - (6)].str));
                        context_none((yyvsp[(2) - (6)].clist));
@@ -1725,7 +1726,7 @@ yyreduce:
   case 17:
 
 /* Line 1464 of yacc.c  */
-#line 268 "../src/parse/parser.ypp"
+#line 269 "../src/parse/parser.ypp"
     {
                        default_rule((yyvsp[(2) - (5)].clist), (yyvsp[(5) - (5)].token));
                ;}
@@ -1734,7 +1735,7 @@ yyreduce:
   case 18:
 
 /* Line 1464 of yacc.c  */
-#line 272 "../src/parse/parser.ypp"
+#line 273 "../src/parse/parser.ypp"
     {
                        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));
@@ -1747,7 +1748,7 @@ yyreduce:
   case 19:
 
 /* Line 1464 of yacc.c  */
-#line 280 "../src/parse/parser.ypp"
+#line 281 "../src/parse/parser.ypp"
     {
                        assert((yyvsp[(7) - (7)].str));
                        context_check(NULL);
@@ -1760,7 +1761,7 @@ yyreduce:
   case 20:
 
 /* Line 1464 of yacc.c  */
-#line 288 "../src/parse/parser.ypp"
+#line 289 "../src/parse/parser.ypp"
     {
                        context_none(NULL);
                        delete (yyvsp[(5) - (6)].str);
@@ -1770,7 +1771,7 @@ yyreduce:
   case 21:
 
 /* Line 1464 of yacc.c  */
-#line 293 "../src/parse/parser.ypp"
+#line 294 "../src/parse/parser.ypp"
     {
                        assert((yyvsp[(6) - (6)].str));
                        context_none(NULL);
@@ -1781,7 +1782,7 @@ yyreduce:
   case 22:
 
 /* Line 1464 of yacc.c  */
-#line 299 "../src/parse/parser.ypp"
+#line 300 "../src/parse/parser.ypp"
     {
                        CondList *clist = new CondList();
                        clist->insert("*");
@@ -1792,7 +1793,7 @@ yyreduce:
   case 23:
 
 /* Line 1464 of yacc.c  */
-#line 305 "../src/parse/parser.ypp"
+#line 306 "../src/parse/parser.ypp"
     {
                        context_check(NULL);
                        if (specNone)
@@ -1809,7 +1810,7 @@ yyreduce:
   case 24:
 
 /* Line 1464 of yacc.c  */
-#line 317 "../src/parse/parser.ypp"
+#line 318 "../src/parse/parser.ypp"
     {
                        assert((yyvsp[(3) - (3)].str));
                        context_check(NULL);
@@ -1826,7 +1827,7 @@ yyreduce:
   case 25:
 
 /* Line 1464 of yacc.c  */
-#line 329 "../src/parse/parser.ypp"
+#line 330 "../src/parse/parser.ypp"
     {
                        CondList *clist = new CondList();
                        clist->insert("*");
@@ -1837,7 +1838,7 @@ yyreduce:
   case 26:
 
 /* Line 1464 of yacc.c  */
-#line 335 "../src/parse/parser.ypp"
+#line 336 "../src/parse/parser.ypp"
     {
                        setup_rule((yyvsp[(2) - (4)].clist), (yyvsp[(4) - (4)].token));
                ;}
@@ -1846,7 +1847,7 @@ yyreduce:
   case 27:
 
 /* Line 1464 of yacc.c  */
-#line 342 "../src/parse/parser.ypp"
+#line 343 "../src/parse/parser.ypp"
     {
                        in->fatal("unnamed condition not supported");
                ;}
@@ -1855,7 +1856,7 @@ yyreduce:
   case 28:
 
 /* Line 1464 of yacc.c  */
-#line 346 "../src/parse/parser.ypp"
+#line 347 "../src/parse/parser.ypp"
     {
                        (yyval.clist) = (yyvsp[(1) - (1)].clist);
                ;}
@@ -1864,7 +1865,7 @@ yyreduce:
   case 29:
 
 /* Line 1464 of yacc.c  */
-#line 353 "../src/parse/parser.ypp"
+#line 354 "../src/parse/parser.ypp"
     {
                        (yyval.clist) = new CondList();
                        (yyval.clist)->insert((yyvsp[(1) - (1)].symbol)->GetName().to_string());
@@ -1874,7 +1875,7 @@ yyreduce:
   case 30:
 
 /* Line 1464 of yacc.c  */
-#line 358 "../src/parse/parser.ypp"
+#line 359 "../src/parse/parser.ypp"
     {
                        (yyvsp[(1) - (3)].clist)->insert((yyvsp[(3) - (3)].symbol)->GetName().to_string());
                        (yyval.clist) = (yyvsp[(1) - (3)].clist);
@@ -1884,7 +1885,7 @@ yyreduce:
   case 31:
 
 /* Line 1464 of yacc.c  */
-#line 366 "../src/parse/parser.ypp"
+#line 367 "../src/parse/parser.ypp"
     {
                        (yyval.str) = NULL;
                ;}
@@ -1893,7 +1894,7 @@ yyreduce:
   case 32:
 
 /* Line 1464 of yacc.c  */
-#line 370 "../src/parse/parser.ypp"
+#line 371 "../src/parse/parser.ypp"
     {
                        (yyval.str) = new Str((yyvsp[(3) - (3)].symbol)->GetName().to_string().c_str());
                ;}
@@ -1902,7 +1903,7 @@ yyreduce:
   case 33:
 
 /* Line 1464 of yacc.c  */
-#line 377 "../src/parse/parser.ypp"
+#line 378 "../src/parse/parser.ypp"
     {
                        (yyval.regexp) = new NullOp;
                ;}
@@ -1911,7 +1912,7 @@ yyreduce:
   case 34:
 
 /* Line 1464 of yacc.c  */
-#line 381 "../src/parse/parser.ypp"
+#line 382 "../src/parse/parser.ypp"
     {
                        (yyval.regexp) = (yyvsp[(2) - (2)].regexp);
                ;}
@@ -1920,7 +1921,7 @@ yyreduce:
   case 35:
 
 /* Line 1464 of yacc.c  */
-#line 388 "../src/parse/parser.ypp"
+#line 389 "../src/parse/parser.ypp"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                ;}
@@ -1929,7 +1930,7 @@ yyreduce:
   case 36:
 
 /* Line 1464 of yacc.c  */
-#line 392 "../src/parse/parser.ypp"
+#line 393 "../src/parse/parser.ypp"
     {
                        (yyval.regexp) = mkAlt((yyvsp[(1) - (3)].regexp), (yyvsp[(3) - (3)].regexp));
                ;}
@@ -1938,7 +1939,7 @@ yyreduce:
   case 37:
 
 /* Line 1464 of yacc.c  */
-#line 399 "../src/parse/parser.ypp"
+#line 400 "../src/parse/parser.ypp"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                ;}
@@ -1947,7 +1948,7 @@ yyreduce:
   case 38:
 
 /* Line 1464 of yacc.c  */
-#line 403 "../src/parse/parser.ypp"
+#line 404 "../src/parse/parser.ypp"
     {
                        (yyval.regexp) = mkDiff((yyvsp[(1) - (3)].regexp), (yyvsp[(3) - (3)].regexp));
                        if(!(yyval.regexp))
@@ -1960,7 +1961,7 @@ yyreduce:
   case 39:
 
 /* Line 1464 of yacc.c  */
-#line 414 "../src/parse/parser.ypp"
+#line 415 "../src/parse/parser.ypp"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                ;}
@@ -1969,7 +1970,7 @@ yyreduce:
   case 40:
 
 /* Line 1464 of yacc.c  */
-#line 418 "../src/parse/parser.ypp"
+#line 419 "../src/parse/parser.ypp"
     {
                        (yyval.regexp) = new CatOp((yyvsp[(1) - (2)].regexp), (yyvsp[(2) - (2)].regexp));
                ;}
@@ -1978,7 +1979,7 @@ yyreduce:
   case 41:
 
 /* Line 1464 of yacc.c  */
-#line 425 "../src/parse/parser.ypp"
+#line 426 "../src/parse/parser.ypp"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                ;}
@@ -1987,7 +1988,7 @@ yyreduce:
   case 42:
 
 /* Line 1464 of yacc.c  */
-#line 429 "../src/parse/parser.ypp"
+#line 430 "../src/parse/parser.ypp"
     {
                        switch((yyvsp[(2) - (2)].op))
                        {
@@ -2007,7 +2008,7 @@ yyreduce:
   case 43:
 
 /* Line 1464 of yacc.c  */
-#line 444 "../src/parse/parser.ypp"
+#line 445 "../src/parse/parser.ypp"
     {
                        (yyval.regexp) = new CloseVOp((yyvsp[(1) - (2)].regexp), (yyvsp[(2) - (2)].extop).minsize, (yyvsp[(2) - (2)].extop).maxsize);
                ;}
@@ -2016,7 +2017,7 @@ yyreduce:
   case 44:
 
 /* Line 1464 of yacc.c  */
-#line 451 "../src/parse/parser.ypp"
+#line 452 "../src/parse/parser.ypp"
     {
                        (yyval.op) = (yyvsp[(1) - (1)].op);
                ;}
@@ -2025,7 +2026,7 @@ yyreduce:
   case 45:
 
 /* Line 1464 of yacc.c  */
-#line 455 "../src/parse/parser.ypp"
+#line 456 "../src/parse/parser.ypp"
     {
                        (yyval.op) = (yyvsp[(1) - (1)].op);
                ;}
@@ -2034,7 +2035,7 @@ yyreduce:
   case 46:
 
 /* Line 1464 of yacc.c  */
-#line 459 "../src/parse/parser.ypp"
+#line 460 "../src/parse/parser.ypp"
     {
                        (yyval.op) = ((yyvsp[(1) - (2)].op) == (yyvsp[(2) - (2)].op)) ? (yyvsp[(1) - (2)].op) : '*';
                ;}
@@ -2043,7 +2044,7 @@ yyreduce:
   case 47:
 
 /* Line 1464 of yacc.c  */
-#line 463 "../src/parse/parser.ypp"
+#line 464 "../src/parse/parser.ypp"
     {
                        (yyval.op) = ((yyvsp[(1) - (2)].op) == (yyvsp[(2) - (2)].op)) ? (yyvsp[(1) - (2)].op) : '*';
                ;}
@@ -2052,7 +2053,7 @@ yyreduce:
   case 48:
 
 /* Line 1464 of yacc.c  */
-#line 470 "../src/parse/parser.ypp"
+#line 471 "../src/parse/parser.ypp"
     {
                        if(!(yyvsp[(1) - (1)].symbol)->re)
                        {
@@ -2065,7 +2066,7 @@ yyreduce:
   case 49:
 
 /* Line 1464 of yacc.c  */
-#line 478 "../src/parse/parser.ypp"
+#line 479 "../src/parse/parser.ypp"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                ;}
@@ -2074,7 +2075,7 @@ yyreduce:
   case 50:
 
 /* Line 1464 of yacc.c  */
-#line 482 "../src/parse/parser.ypp"
+#line 483 "../src/parse/parser.ypp"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                ;}
@@ -2083,7 +2084,7 @@ yyreduce:
   case 51:
 
 /* Line 1464 of yacc.c  */
-#line 486 "../src/parse/parser.ypp"
+#line 487 "../src/parse/parser.ypp"
     {
                        (yyval.regexp) = (yyvsp[(2) - (3)].regexp);
                ;}
@@ -2092,7 +2093,7 @@ yyreduce:
 
 
 /* Line 1464 of yacc.c  */
-#line 2096 "./parser.cc"
+#line 2097 "./parser.cc"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2304,7 +2305,7 @@ yyreturn:
 
 
 /* Line 1684 of yacc.c  */
-#line 491 "../src/parse/parser.ypp"
+#line 492 "../src/parse/parser.ypp"
 
 
 extern "C" {
index 23a602909538f4f924f9ab5dd0b5c5e1e2a90a61..ffb66cb458c9dab982fc6322fef4dd5a6a775666 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.14.1.dev on Tue May 12 10:55:26 2015*/
+/* Generated by re2c 0.14.1.dev on Wed May 13 17:17:35 2015*/
 #include <stdlib.h>
 #include <string.h>
 #include <iostream>
@@ -7,6 +7,7 @@
 #include "src/dfa/dfa.h"
 #include "src/globals.h"
 #include "src/parse/parser.h"
+#include "src/parse/symbol.h"
 #include "src/parse/scanner.h"
 #include "y.tab.h"
 
index 2331392051560a81ce066b7d3e70d2c3811517bc..a62f7e9cc145fd55a98e8c966677bf8ba08f3014 100644 (file)
@@ -61,7 +61,7 @@ typedef union YYSTYPE
 {
 
 /* Line 1685 of yacc.c  */
-#line 150 "../src/parse/parser.ypp"
+#line 151 "../src/parse/parser.ypp"
 
        re2c::Symbol    *symbol;
        re2c::RegExp    *regexp;
index fd372e17af46fbec6fc023d29eccab0270b0b1bb..06b1388475cff9da1678bdbfa2223b95313d0378 100644 (file)
 #include "src/dfa/encoding/utf16/utf16_regexp.h"
 #include "src/dfa/encoding/utf8/utf8_regexp.h"
 #include "src/globals.h"
-#include "src/parse/parser.h"
+#include "src/parse/scanner.h"
 #include "src/util/allocate.h"
 
 namespace re2c
 {
 
-void Symbol::ClearTable()
-{
-       for (SymbolTable::iterator it = symbol_table.begin(); it != symbol_table.end(); ++it)
-       {
-               delete it->second;
-       }
-       
-       symbol_table.clear();
-}
-
-Symbol::SymbolTable Symbol::symbol_table;
-
-Symbol *Symbol::find(const SubStr &str)
-{
-       const std::string ss(str.to_string());
-       SymbolTable::const_iterator it = symbol_table.find(ss);
-
-       if (it == symbol_table.end())
-       {
-               return (*symbol_table.insert(SymbolTable::value_type(ss, new Symbol(str))).first).second;
-       }
-       
-       return (*it).second;
-}
-
 const Ins* showIns(std::ostream &o, const Ins &i, const Ins &base)
 {
        o.width(3);
index 0da184d926895e914d46c46c8ff9291636483b4c..fba3fab6b31dbc8e93cca88d16c45c6493275dec 100644 (file)
@@ -1,48 +1,15 @@
-/* $Id$ */
-#ifndef _parser_h
-#define _parser_h
+#ifndef __PARSER__
+#define __PARSER__
+
+#include <string>
 
 #include "src/codegen/output.h"
 #include "src/dfa/re.h"
 #include "src/parse/scanner.h"
-#include "src/util/forbid_copy.h"
 
 namespace re2c
 {
 
-class Symbol
-{
-public:
-
-       RegExp*   re;
-
-       static Symbol *find(const SubStr&);
-       static void ClearTable();
-
-       typedef std::map<std::string, Symbol*> SymbolTable;
-       
-       const Str& GetName() const
-       {
-               return name;
-       }
-
-protected:
-
-       Symbol(const SubStr& str)
-               : re(NULL)
-               , name(str)
-       {
-       }
-
-private:
-
-       static SymbolTable symbol_table;
-
-       Str     name;
-
-       FORBID_COPY (Symbol);
-};
-
 extern void parse(Scanner &, Output &);
 extern void parse_cleanup();
 
@@ -51,6 +18,6 @@ typedef std::list<RuleOp*> RuleOpList;
 typedef std::map<std::string, std::pair<uint32_t, std::string> > SetupMap;
 typedef std::map<std::string, Token*> DefaultMap;
 
-} // end namespace re2c
+} // namespace re2c
 
-#endif
+#endif // __PARSER__
index c648a24336ce97018e2e6c874eeae8f8c6e48434..79a494d4929c5efffabe7e48b190748686a304e2 100644 (file)
@@ -14,6 +14,7 @@
 #include "src/codegen/dfa_emit.h" // genTypes
 #include "src/globals.h"
 #include "src/parse/parser.h"
+#include "src/parse/symbol.h"
 #include "src/util/c99_stdint.h"
 #include "src/util/smart_ptr.h"
 
index 206ebe4bfb40d6dd8aab6ca804b430a83937a525..9017ee69aedbb2458695e587631133c053ff2225 100644 (file)
@@ -6,6 +6,7 @@
 #include "src/dfa/dfa.h"
 #include "src/globals.h"
 #include "src/parse/parser.h"
+#include "src/parse/symbol.h"
 #include "src/parse/scanner.h"
 #include "y.tab.h"
 
diff --git a/re2c/src/parse/symbol.cc b/re2c/src/parse/symbol.cc
new file mode 100644 (file)
index 0000000..d3f2cbc
--- /dev/null
@@ -0,0 +1,29 @@
+#include "src/parse/symbol.h"
+
+namespace re2c
+{
+
+Symbol::SymbolTable Symbol::symbol_table;
+
+void Symbol::ClearTable ()
+{
+       for (SymbolTable::iterator it = symbol_table.begin(); it != symbol_table.end(); ++it)
+       {
+               delete it->second;
+       }
+       symbol_table.clear ();
+}
+
+Symbol * Symbol::find (const SubStr & str)
+{
+       const std::string ss (str.to_string ());
+       SymbolTable::const_iterator it = symbol_table.find (ss);
+       if (it == symbol_table.end ())
+       {
+               return (* symbol_table.insert (SymbolTable::value_type (ss, new Symbol (str))).first).second;
+       }
+       return (* it).second;
+}
+
+} // namespace re2c
+
diff --git a/re2c/src/parse/symbol.h b/re2c/src/parse/symbol.h
new file mode 100644 (file)
index 0000000..1a9af6c
--- /dev/null
@@ -0,0 +1,42 @@
+#ifndef __SYMBOL__
+#define __SYMBOL__
+
+#include <map>
+#include <string>
+
+#include "src/util/forbid_copy.h"
+#include "src/util/substr.h"
+
+namespace re2c
+{
+
+class RegExp;
+
+class Symbol
+{
+       typedef std::map<std::string, Symbol *> SymbolTable;
+
+       static SymbolTable symbol_table;
+       Str name;
+
+       Symbol(const SubStr & str)
+               : name (str)
+               , re (NULL)
+       {}
+
+public:
+       RegExp * re;
+
+       static Symbol * find (const SubStr &);
+       static void ClearTable ();
+       const Str & GetName () const
+       {
+               return name;
+       }
+
+       FORBID_COPY (Symbol);
+};
+
+} // namespace re2c
+
+#endif // __SYMBOL__