]> granicus.if.org Git - re2c/commitdiff
- Add support for ':=' and '=>' in '<>' rules
authorhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Sun, 13 Jan 2008 17:46:06 +0000 (17:46 +0000)
committerhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Sun, 13 Jan 2008 17:46:06 +0000 (17:46 +0000)
re2c/bootstrap/parser.cc
re2c/bootstrap/scanner.cc
re2c/parser.y
re2c/scanner.re
re2c/test/condition_11.cg.c [new file with mode: 0755]
re2c/test/condition_11.cg.re [new file with mode: 0755]

index 0f0ecce06b97e629e517d47ecd00854e1a2f94a5..5a4590233bd1b897f7f0354d28e5c7a8a894859c 100644 (file)
@@ -417,7 +417,7 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   69
+#define YYLAST   71
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  24
@@ -426,7 +426,7 @@ union yyalloc
 /* YYNRULES -- Number of rules.  */
 #define YYNRULES  39
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  68
+#define YYNSTATES  71
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -473,9 +473,9 @@ static const yytype_uint8 yytranslate[] =
 static const yytype_uint8 yyprhs[] =
 {
        0,     0,     3,     4,     7,    10,    15,    20,    25,    30,
-      34,    42,    48,    56,    62,    65,    66,    68,    70,    74,
-      75,    79,    80,    83,    85,    89,    91,    95,    97,   100,
-     102,   105,   108,   110,   112,   115,   118,   120,   122,   124
+      34,    42,    49,    57,    64,    68,    69,    71,    73,    77,
+      78,    82,    83,    86,    88,    92,    94,    98,   100,   103,
+     105,   108,   111,   113,   115,   118,   121,   123,   125,   127
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -485,24 +485,25 @@ static const yytype_int8 yyrhs[] =
        7,    14,    32,    15,    -1,     7,    14,    32,    16,    -1,
       11,    14,    12,    15,    -1,    11,    14,    13,    15,    -1,
       32,    31,     8,    -1,    17,    28,    18,    32,    31,    30,
-       8,    -1,    17,    28,    18,    31,     8,    -1,    17,     5,
-      18,    32,    31,    30,     8,    -1,    17,     5,    18,    31,
-       8,    -1,     6,     8,    -1,    -1,    29,    -1,     7,    -1,
-      29,    19,     7,    -1,    -1,    14,    18,     7,    -1,    -1,
-      16,    32,    -1,    33,    -1,    32,    20,    33,    -1,    34,
-      -1,    33,    21,    34,    -1,    35,    -1,    34,    35,    -1,
-      37,    -1,    37,    36,    -1,    37,     3,    -1,     4,    -1,
-       5,    -1,    36,     4,    -1,    36,     5,    -1,     7,    -1,
-       9,    -1,    10,    -1,    22,    32,    23,    -1
+       8,    -1,    17,    28,    18,    31,    30,     8,    -1,    17,
+       5,    18,    32,    31,    30,     8,    -1,    17,     5,    18,
+      31,    30,     8,    -1,     6,    30,     8,    -1,    -1,    29,
+      -1,     7,    -1,    29,    19,     7,    -1,    -1,    14,    18,
+       7,    -1,    -1,    16,    32,    -1,    33,    -1,    32,    20,
+      33,    -1,    34,    -1,    33,    21,    34,    -1,    35,    -1,
+      34,    35,    -1,    37,    -1,    37,    36,    -1,    37,     3,
+      -1,     4,    -1,     5,    -1,    36,     4,    -1,    36,     5,
+      -1,     7,    -1,     9,    -1,    10,    -1,    22,    32,    23,
+      -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
        0,    92,    92,    96,    97,   101,   109,   113,   119,   127,
-     136,   165,   174,   183,   191,   207,   210,   217,   222,   231,
-     234,   242,   245,   252,   256,   263,   267,   278,   282,   289,
-     293,   308,   315,   319,   323,   327,   334,   342,   346,   350
+     136,   165,   174,   183,   191,   208,   211,   218,   223,   232,
+     235,   243,   246,   253,   257,   264,   268,   279,   283,   290,
+     294,   309,   316,   320,   324,   328,   335,   343,   347,   351
 };
 #endif
 
@@ -543,7 +544,7 @@ static const yytype_uint8 yyr1[] =
 static const yytype_uint8 yyr2[] =
 {
        0,     2,     0,     2,     2,     4,     4,     4,     4,     3,
-       7,     5,     7,     5,     2,     0,     1,     1,     3,     0,
+       7,     6,     7,     6,     3,     0,     1,     1,     3,     0,
        3,     0,     2,     1,     3,     1,     3,     1,     2,     1,
        2,     2,     1,     1,     2,     2,     1,     1,     1,     3
 };
@@ -553,20 +554,21 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,     0,     1,     0,    36,    37,    38,     0,    15,     0,
-       4,     3,    21,    23,    25,    27,    29,    14,     0,     0,
-       0,    17,     0,    16,    36,     0,     0,     0,     0,     0,
-      28,    31,    32,    33,    30,     0,     0,     0,    21,    21,
-       0,    39,    22,    24,     9,    26,    34,    35,     5,     6,
-       7,     8,     0,    21,     0,    21,    18,    13,    19,    11,
-      19,     0,     0,     0,     0,    12,    10,    20
+       2,     0,     1,    19,    36,    37,    38,     0,    15,     0,
+       4,     3,    21,    23,    25,    27,    29,     0,     0,     0,
+       0,     0,    17,     0,    16,    36,     0,     0,     0,     0,
+       0,    28,    31,    32,    33,    30,     0,    14,     0,     0,
+       0,    21,    21,     0,    39,    22,    24,     9,    26,    34,
+      35,    20,     5,     6,     7,     8,    19,    21,    19,    21,
+      18,     0,    19,     0,    19,    13,     0,    11,     0,    12,
+      10
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int8 yydefgoto[] =
 {
-      -1,     1,    10,    11,    22,    23,    62,    28,    12,    13,
-      14,    15,    34,    16
+      -1,     1,    10,    11,    23,    24,    18,    29,    12,    13,
+      14,    15,    35,    16
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
@@ -574,20 +576,21 @@ static const yytype_int8 yydefgoto[] =
 #define YYPACT_NINF -38
 static const yytype_int8 yypact[] =
 {
-     -38,     4,   -38,     9,    22,   -38,   -38,    30,    38,    28,
-     -38,   -38,   -11,    27,    28,   -38,     3,   -38,    28,    11,
-      21,   -38,    29,    32,   -38,    -1,    28,    28,    41,    28,
-     -38,   -38,   -38,   -38,    25,    26,    37,    39,    18,    18,
-      46,   -38,    35,    27,   -38,    28,   -38,   -38,   -38,   -38,
-     -38,   -38,    48,   -11,    49,   -11,   -38,   -38,    44,   -38,
-      44,    42,    51,    53,    55,   -38,   -38,   -38
+     -38,     1,   -38,   -12,    -8,   -38,   -38,    -5,    25,     7,
+     -38,   -38,    -1,    10,     7,   -38,    45,    19,    33,     7,
+      39,    37,   -38,    38,    26,   -38,     5,     7,     7,    50,
+       7,   -38,   -38,   -38,   -38,    49,    52,   -38,    27,    42,
+      46,    17,    17,    53,   -38,    43,    10,   -38,     7,   -38,
+     -38,   -38,   -38,   -38,   -38,   -38,   -12,    -1,   -12,    -1,
+     -38,    54,   -12,    56,   -12,   -38,    57,   -38,    58,   -38,
+     -38
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int8 yypgoto[] =
 {
-     -38,   -38,   -38,   -38,   -38,   -38,     5,   -37,    -6,    36,
-      40,   -14,   -38,   -38
+     -38,   -38,   -38,   -38,   -38,   -38,   -18,   -37,    -6,    40,
+      41,   -14,   -38,   -38
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -597,24 +600,26 @@ static const yytype_int8 yypgoto[] =
 #define YYTABLE_NINF -1
 static const yytype_uint8 yytable[] =
 {
-      30,    52,    54,    25,     2,    26,    31,    32,    33,    27,
-       3,     4,    35,     5,     6,     7,    58,    17,    60,    27,
-      42,     8,    41,    36,    37,    24,     9,     5,     6,    46,
-      47,    30,    53,    55,    26,    24,    18,     5,     6,    38,
-       9,    48,    49,    20,    19,    21,    27,    39,    29,    44,
-       9,    40,    50,    56,    51,    27,    57,    59,    61,    65,
-      64,    66,    67,    43,     0,    63,     0,     0,     0,    45
+      31,     2,    17,    26,    56,    58,    19,     3,     4,    20,
+       5,     6,     7,    38,    25,    27,     5,     6,     8,    28,
+      62,    45,    64,     9,    25,    28,     5,     6,    44,     9,
+      21,    30,    22,    27,    31,    57,    59,    36,    61,     9,
+      63,    37,    52,    53,    66,    43,    68,    28,    32,    33,
+      34,    39,    40,    49,    50,    41,    42,    54,    47,    51,
+      60,    55,    65,    28,    67,    69,    70,     0,    46,     0,
+       0,    48
 };
 
 static const yytype_int8 yycheck[] =
 {
-      14,    38,    39,     9,     0,    16,     3,     4,     5,    20,
-       6,     7,    18,     9,    10,    11,    53,     8,    55,    20,
-      26,    17,    23,    12,    13,     7,    22,     9,    10,     4,
-       5,    45,    38,    39,    16,     7,    14,     9,    10,    18,
-      22,    15,    16,     5,    14,     7,    20,    18,    21,     8,
-      22,    19,    15,     7,    15,    20,     8,     8,    14,     8,
-      18,     8,     7,    27,    -1,    60,    -1,    -1,    -1,    29
+      14,     0,    14,     9,    41,    42,    14,     6,     7,    14,
+       9,    10,    11,    19,     7,    16,     9,    10,    17,    20,
+      57,    27,    59,    22,     7,    20,     9,    10,    23,    22,
+       5,    21,     7,    16,    48,    41,    42,    18,    56,    22,
+      58,     8,    15,    16,    62,    19,    64,    20,     3,     4,
+       5,    12,    13,     4,     5,    18,    18,    15,     8,     7,
+       7,    15,     8,    20,     8,     8,     8,    -1,    28,    -1,
+      -1,    30
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -622,12 +627,13 @@ static const yytype_int8 yycheck[] =
 static const yytype_uint8 yystos[] =
 {
        0,    25,     0,     6,     7,     9,    10,    11,    17,    22,
-      26,    27,    32,    33,    34,    35,    37,     8,    14,    14,
-       5,     7,    28,    29,     7,    32,    16,    20,    31,    21,
-      35,     3,     4,     5,    36,    32,    12,    13,    18,    18,
-      19,    23,    32,    33,     8,    34,     4,     5,    15,    16,
-      15,    15,    31,    32,    31,    32,     7,     8,    31,     8,
-      31,    14,    30,    30,    18,     8,     8,     7
+      26,    27,    32,    33,    34,    35,    37,    14,    30,    14,
+      14,     5,     7,    28,    29,     7,    32,    16,    20,    31,
+      21,    35,     3,     4,     5,    36,    18,     8,    32,    12,
+      13,    18,    18,    19,    23,    32,    33,     8,    34,     4,
+       5,     7,    15,    16,    15,    15,    31,    32,    31,    32,
+       7,    30,    31,    30,    31,     8,    30,     8,    30,     8,
+       8
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1531,7 +1537,7 @@ yyreduce:
   case 11:
 #line 166 "parser.y"
     {
-                       delete (yyvsp[(2) - (5)].clist);
+                       delete (yyvsp[(2) - (6)].clist);
                        if (!cFlag)
                        {
                                in->fatal("conditions are only allowed when using -c switch");
@@ -1574,26 +1580,27 @@ yyreduce:
                        {
                                in->fatal("code to handle illegal condition already defined");
                        }
-                       (yyval.regexp) = specNone = new RuleOp(new NullOp(), new NullOp(), (yyvsp[(2) - (2)].token), accept++);
+                       (yyvsp[(3) - (3)].token)->newcond = (yyvsp[(2) - (3)].str);
+                       (yyval.regexp) = specNone = new RuleOp(new NullOp(), new NullOp(), (yyvsp[(3) - (3)].token), accept++);
                }
     break;
 
   case 15:
-#line 207 "parser.y"
+#line 208 "parser.y"
     {
                        in->fatal("unnamed condition not supported");
                }
     break;
 
   case 16:
-#line 211 "parser.y"
+#line 212 "parser.y"
     {
                        (yyval.clist) = (yyvsp[(1) - (1)].clist);
                }
     break;
 
   case 17:
-#line 218 "parser.y"
+#line 219 "parser.y"
     {
                        (yyval.clist) = new CondList();
                        (yyval.clist)->insert((yyvsp[(1) - (1)].symbol)->GetName().to_string());
@@ -1601,7 +1608,7 @@ yyreduce:
     break;
 
   case 18:
-#line 223 "parser.y"
+#line 224 "parser.y"
     {
                        (yyvsp[(1) - (3)].clist)->insert((yyvsp[(3) - (3)].symbol)->GetName().to_string());
                        (yyval.clist) = (yyvsp[(1) - (3)].clist);
@@ -1609,56 +1616,56 @@ yyreduce:
     break;
 
   case 19:
-#line 231 "parser.y"
+#line 232 "parser.y"
     {
                        (yyval.str) = NULL;
                }
     break;
 
   case 20:
-#line 235 "parser.y"
+#line 236 "parser.y"
     {
                        (yyval.str) = new Str((yyvsp[(3) - (3)].symbol)->GetName().to_string().c_str());
                }
     break;
 
   case 21:
-#line 242 "parser.y"
+#line 243 "parser.y"
     {
                        (yyval.regexp) = new NullOp;
                }
     break;
 
   case 22:
-#line 246 "parser.y"
+#line 247 "parser.y"
     {
                        (yyval.regexp) = (yyvsp[(2) - (2)].regexp);
                }
     break;
 
   case 23:
-#line 253 "parser.y"
+#line 254 "parser.y"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                }
     break;
 
   case 24:
-#line 257 "parser.y"
+#line 258 "parser.y"
     {
                        (yyval.regexp) = mkAlt((yyvsp[(1) - (3)].regexp), (yyvsp[(3) - (3)].regexp));
                }
     break;
 
   case 25:
-#line 264 "parser.y"
+#line 265 "parser.y"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                }
     break;
 
   case 26:
-#line 268 "parser.y"
+#line 269 "parser.y"
     {
                        (yyval.regexp) = mkDiff((yyvsp[(1) - (3)].regexp), (yyvsp[(3) - (3)].regexp));
                        if(!(yyval.regexp))
@@ -1669,28 +1676,28 @@ yyreduce:
     break;
 
   case 27:
-#line 279 "parser.y"
+#line 280 "parser.y"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                }
     break;
 
   case 28:
-#line 283 "parser.y"
+#line 284 "parser.y"
     {
                        (yyval.regexp) = new CatOp((yyvsp[(1) - (2)].regexp), (yyvsp[(2) - (2)].regexp));
                }
     break;
 
   case 29:
-#line 290 "parser.y"
+#line 291 "parser.y"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                }
     break;
 
   case 30:
-#line 294 "parser.y"
+#line 295 "parser.y"
     {
                        switch((yyvsp[(2) - (2)].op))
                        {
@@ -1708,42 +1715,42 @@ yyreduce:
     break;
 
   case 31:
-#line 309 "parser.y"
+#line 310 "parser.y"
     {
                        (yyval.regexp) = new CloseVOp((yyvsp[(1) - (2)].regexp), (yyvsp[(2) - (2)].extop).minsize, (yyvsp[(2) - (2)].extop).maxsize);
                }
     break;
 
   case 32:
-#line 316 "parser.y"
+#line 317 "parser.y"
     {
                        (yyval.op) = (yyvsp[(1) - (1)].op);
                }
     break;
 
   case 33:
-#line 320 "parser.y"
+#line 321 "parser.y"
     {
                        (yyval.op) = (yyvsp[(1) - (1)].op);
                }
     break;
 
   case 34:
-#line 324 "parser.y"
+#line 325 "parser.y"
     {
                        (yyval.op) = ((yyvsp[(1) - (2)].op) == (yyvsp[(2) - (2)].op)) ? (yyvsp[(1) - (2)].op) : '*';
                }
     break;
 
   case 35:
-#line 328 "parser.y"
+#line 329 "parser.y"
     {
                        (yyval.op) = ((yyvsp[(1) - (2)].op) == (yyvsp[(2) - (2)].op)) ? (yyvsp[(1) - (2)].op) : '*';
                }
     break;
 
   case 36:
-#line 335 "parser.y"
+#line 336 "parser.y"
     {
                        if(!(yyvsp[(1) - (1)].symbol)->re)
                        {
@@ -1754,21 +1761,21 @@ yyreduce:
     break;
 
   case 37:
-#line 343 "parser.y"
+#line 344 "parser.y"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                }
     break;
 
   case 38:
-#line 347 "parser.y"
+#line 348 "parser.y"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                }
     break;
 
   case 39:
-#line 351 "parser.y"
+#line 352 "parser.y"
     {
                        (yyval.regexp) = (yyvsp[(2) - (3)].regexp);
                }
@@ -1776,7 +1783,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 1780 "parser.cc"
+#line 1787 "parser.cc"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -1990,7 +1997,7 @@ yyreturn:
 }
 
 
-#line 356 "parser.y"
+#line 357 "parser.y"
 
 
 extern "C" {
index d903d86f6411d33e800ecba8445f536b4e7f8276..98ac6ed8b8b0dd69b661bed1b7bfc9e8c74d7951 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.2.dev on Sun Jan 13 17:51:50 2008 */
+/* Generated by re2c 0.13.2.dev on Sun Jan 13 18:42:09 2008 */
 /* $Id$ */
 #include <stdlib.h>
 #include <string.h>
@@ -500,10 +500,10 @@ yy71:
        yyaccept = 0;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych <= '/') {
-               if(yych == ',') goto yy150;
+               if(yych == ',') goto yy152;
        } else {
-               if(yych <= '0') goto yy147;
-               if(yych <= '9') goto yy148;
+               if(yych <= '0') goto yy149;
+               if(yych <= '9') goto yy150;
        }
 yy72:
        {
@@ -512,7 +512,7 @@ yy72:
                                }
 yy73:
        ++YYCURSOR;
-       if((yych = *YYCURSOR) == '=') goto yy145;
+       if((yych = *YYCURSOR) == '=') goto yy147;
 yy74:
        {
                                        std::ostringstream msg;
@@ -523,14 +523,14 @@ yy74:
                                }
 yy75:
        ++YYCURSOR;
-       if((yych = *YYCURSOR) == '*') goto yy143;
+       if((yych = *YYCURSOR) == '*') goto yy145;
 yy76:
        {
                                        RETURN(*tok);
                                }
 yy77:
        ++YYCURSOR;
-       if((yych = *YYCURSOR) == '/') goto yy141;
+       if((yych = *YYCURSOR) == '/') goto yy143;
        {
                                        yylval.op = *tok;
                                        RETURN(STAR);
@@ -538,7 +538,7 @@ yy77:
 yy79:
        yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych != 0x0A) goto yy137;
+       if(yych != 0x0A) goto yy139;
 yy80:
        {
                                        fatal("unterminated string constant (missing \")");
@@ -546,7 +546,7 @@ yy80:
 yy81:
        yyaccept = 2;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych != 0x0A) goto yy132;
+       if(yych != 0x0A) goto yy134;
 yy82:
        {
                                        fatal("unterminated string constant (missing ')");
@@ -555,8 +555,8 @@ yy83:
        yyaccept = 3;
        yych = *(YYMARKER = ++YYCURSOR);
        if(yych == 0x0A) goto yy84;
-       if(yych == '^') goto yy123;
-       goto yy122;
+       if(yych == '^') goto yy125;
+       goto yy124;
 yy84:
        {
                                        fatal("unterminated range (missing ])");
@@ -686,7 +686,7 @@ yy109:
                        if(yyaccept <= 6) {
                                goto yy112;
                        } else {
-                               goto yy151;
+                               goto yy153;
                        }
                }
        }
@@ -753,124 +753,139 @@ yy116:
        goto yy118;
 yy117:
        ++YYCURSOR;
-       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
 yy118:
        if(yybm[0+yych] & 8) {
                goto yy117;
        }
-       if(yych != '{') goto yy109;
+       if(yych <= '<') {
+               if(yych == ':') goto yy122;
+               goto yy109;
+       } else {
+               if(yych <= '=') goto yy121;
+               if(yych != '{') goto yy109;
+       }
+yy119:
        ++YYCURSOR;
        YYCURSOR = YYCTXMARKER;
        {
                                        RETURN(NOCOND);
                                }
 yy121:
+       yych = *++YYCURSOR;
+       if(yych == '>') goto yy119;
+       goto yy109;
+yy122:
+       yych = *++YYCURSOR;
+       if(yych == '=') goto yy119;
+       goto yy109;
+yy123:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy122:
+yy124:
        if(yybm[0+yych] & 16) {
-               goto yy121;
+               goto yy123;
        }
        if(yych <= '[') goto yy109;
-       if(yych <= '\\') goto yy125;
-       goto yy126;
-yy123:
+       if(yych <= '\\') goto yy127;
+       goto yy128;
+yy125:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= '[') {
                if(yych == 0x0A) goto yy109;
-               goto yy123;
+               goto yy125;
        } else {
-               if(yych <= '\\') goto yy128;
-               if(yych <= ']') goto yy129;
-               goto yy123;
+               if(yych <= '\\') goto yy130;
+               if(yych <= ']') goto yy131;
+               goto yy125;
        }
-yy125:
+yy127:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych == 0x0A) goto yy109;
-       goto yy121;
-yy126:
+       goto yy123;
+yy128:
        ++YYCURSOR;
        {
                                        cur = cursor;
                                        yylval.regexp = ranToRE(token());
                                        return RANGE;
                                }
-yy128:
+yy130:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych == 0x0A) goto yy109;
-       goto yy123;
-yy129:
+       goto yy125;
+yy131:
        ++YYCURSOR;
        {
                                        cur = cursor;
                                        yylval.regexp = invToRE(token());
                                        return RANGE;
                                }
-yy131:
+yy133:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy132:
+yy134:
        if(yybm[0+yych] & 32) {
-               goto yy131;
+               goto yy133;
        }
        if(yych <= '&') goto yy109;
-       if(yych <= '\'') goto yy134;
+       if(yych <= '\'') goto yy136;
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych == 0x0A) goto yy109;
-       goto yy131;
-yy134:
+       goto yy133;
+yy136:
        ++YYCURSOR;
        {
                                        cur = cursor;
                                        yylval.regexp = strToCaseInsensitiveRE(token());
                                        return STRING;
                                }
-yy136:
+yy138:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy137:
+yy139:
        if(yybm[0+yych] & 64) {
-               goto yy136;
+               goto yy138;
        }
        if(yych <= '!') goto yy109;
-       if(yych <= '"') goto yy139;
+       if(yych <= '"') goto yy141;
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych == 0x0A) goto yy109;
-       goto yy136;
-yy139:
+       goto yy138;
+yy141:
        ++YYCURSOR;
        {
                                        cur = cursor;
                                        yylval.regexp = strToRE(token());
                                        return STRING;
                                }
-yy141:
+yy143:
        ++YYCURSOR;
        {
                                        tok = cursor;
                                        RETURN(0);
                                }
-yy143:
+yy145:
        ++YYCURSOR;
        {
                                        depth = 1;
                                        goto comment;
                                }
-yy145:
+yy147:
        ++YYCURSOR;
        {
                                        cur = cursor;
@@ -878,52 +893,52 @@ yy145:
                                        depth = 0;
                                        goto code;
                                }
-yy147:
+yy149:
        yych = *++YYCURSOR;
-       if(yych == ',') goto yy161;
-       goto yy149;
-yy148:
+       if(yych == ',') goto yy163;
+       goto yy151;
+yy150:
        ++YYCURSOR;
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
-yy149:
+yy151:
        if(yybm[0+yych] & 128) {
-               goto yy148;
+               goto yy150;
        }
-       if(yych == ',') goto yy154;
-       if(yych == '}') goto yy152;
+       if(yych == ',') goto yy156;
+       if(yych == '}') goto yy154;
        goto yy109;
-yy150:
+yy152:
        ++YYCURSOR;
-yy151:
+yy153:
        {
                                        fatal("illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers");
                                }
-yy152:
+yy154:
        ++YYCURSOR;
        {
                                        yylval.extop.minsize = atoi((char *)tok+1);
                                        yylval.extop.maxsize = atoi((char *)tok+1);
                                        RETURN(CLOSESIZE);
                                }
-yy154:
+yy156:
        yyaccept = 7;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych <= '/') goto yy151;
-       if(yych <= '9') goto yy157;
-       if(yych != '}') goto yy151;
+       if(yych <= '/') goto yy153;
+       if(yych <= '9') goto yy159;
+       if(yych != '}') goto yy153;
        ++YYCURSOR;
        {
                                        yylval.extop.minsize = atoi((char *)tok+1);
                                        yylval.extop.maxsize = -1;
                                        RETURN(CLOSESIZE);
                                }
-yy157:
+yy159:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= '/') goto yy109;
-       if(yych <= '9') goto yy157;
+       if(yych <= '9') goto yy159;
        if(yych != '}') goto yy109;
        ++YYCURSOR;
        {
@@ -931,12 +946,12 @@ yy157:
                                        yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)tok, ',')+1));
                                        RETURN(CLOSESIZE);
                                }
-yy161:
+yy163:
        yyaccept = 7;
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych <= '/') goto yy151;
-       if(yych <= '9') goto yy157;
-       if(yych != '}') goto yy151;
+       if(yych <= '/') goto yy153;
+       if(yych <= '9') goto yy159;
+       if(yych != '}') goto yy153;
        ++YYCURSOR;
        {
                                        yylval.op = '*';
@@ -987,20 +1002,20 @@ code:
        yych = *YYCURSOR;
        if(yych <= '&') {
                if(yych <= 0x0A) {
-                       if(yych <= 0x00) goto yy172;
-                       if(yych <= 0x09) goto yy174;
-                       goto yy170;
+                       if(yych <= 0x00) goto yy174;
+                       if(yych <= 0x09) goto yy176;
+                       goto yy172;
                } else {
-                       if(yych == '"') goto yy176;
-                       goto yy174;
+                       if(yych == '"') goto yy178;
+                       goto yy176;
                }
        } else {
                if(yych <= '{') {
-                       if(yych <= '\'') goto yy177;
-                       if(yych <= 'z') goto yy174;
-                       goto yy168;
+                       if(yych <= '\'') goto yy179;
+                       if(yych <= 'z') goto yy176;
+                       goto yy170;
                } else {
-                       if(yych != '}') goto yy174;
+                       if(yych != '}') goto yy176;
                }
        }
        ++YYCURSOR;
@@ -1017,7 +1032,7 @@ code:
                                        }
                                        goto code;
                                }
-yy168:
+yy170:
        ++YYCURSOR;
        {
                                        if (depth == 0)
@@ -1030,17 +1045,17 @@ yy168:
                                        }
                                        goto code;
                                }
-yy170:
+yy172:
        YYCTXMARKER = YYCURSOR + 1;
        ++YYCURSOR;
        if((yych = *YYCURSOR) <= 0x0C) {
-               if(yych <= 0x08) goto yy171;
-               if(yych <= 0x0A) goto yy185;
+               if(yych <= 0x08) goto yy173;
+               if(yych <= 0x0A) goto yy187;
        } else {
-               if(yych <= 0x0D) goto yy185;
-               if(yych == ' ') goto yy185;
+               if(yych <= 0x0D) goto yy187;
+               if(yych == ' ') goto yy187;
        }
-yy171:
+yy173:
        {
                                        if (depth == 0)
                                        {
@@ -1061,7 +1076,7 @@ yy171:
                                        cline++;
                                        goto code;
                                }
-yy172:
+yy174:
        ++YYCURSOR;
        {
                                        if (cursor == eof)
@@ -1074,56 +1089,56 @@ yy172:
                                        }
                                        goto code;
                                }
-yy174:
+yy176:
        ++YYCURSOR;
-yy175:
+yy177:
        {
                                        goto code;
                                }
-yy176:
+yy178:
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 0x0A) goto yy175;
-       goto yy183;
-yy177:
+       if(yych == 0x0A) goto yy177;
+       goto yy185;
+yy179:
        yych = *(YYMARKER = ++YYCURSOR);
-       if(yych == 0x0A) goto yy175;
-       goto yy179;
-yy178:
+       if(yych == 0x0A) goto yy177;
+       goto yy181;
+yy180:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy179:
+yy181:
        if(yybm[0+yych] & 64) {
-               goto yy178;
+               goto yy180;
        }
-       if(yych <= '&') goto yy180;
-       if(yych <= '\'') goto yy174;
-       goto yy181;
-yy180:
+       if(yych <= '&') goto yy182;
+       if(yych <= '\'') goto yy176;
+       goto yy183;
+yy182:
        YYCURSOR = YYMARKER;
-       goto yy175;
-yy181:
+       goto yy177;
+yy183:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy180;
-       goto yy178;
-yy182:
+       if(yych == 0x0A) goto yy182;
+       goto yy180;
+yy184:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy183:
+yy185:
        if(yybm[0+yych] & 128) {
-               goto yy182;
+               goto yy184;
        }
-       if(yych <= '!') goto yy180;
-       if(yych <= '"') goto yy174;
+       if(yych <= '!') goto yy182;
+       if(yych <= '"') goto yy176;
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy180;
-       goto yy182;
-yy185:
+       if(yych == 0x0A) goto yy182;
+       goto yy184;
+yy187:
        ++YYCURSOR;
        YYCURSOR = YYCTXMARKER;
        {
@@ -1149,17 +1164,17 @@ comment:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= ')') {
-               if(yych == 0x0A) goto yy192;
-               goto yy194;
+               if(yych == 0x0A) goto yy194;
+               goto yy196;
        } else {
-               if(yych <= '*') goto yy189;
-               if(yych == '/') goto yy191;
-               goto yy194;
+               if(yych <= '*') goto yy191;
+               if(yych == '/') goto yy193;
+               goto yy196;
        }
-yy189:
+yy191:
        ++YYCURSOR;
-       if((yych = *YYCURSOR) == '/') goto yy197;
-yy190:
+       if((yych = *YYCURSOR) == '/') goto yy199;
+yy192:
        {
                                        if(cursor == eof)
                                        {
@@ -1167,11 +1182,11 @@ yy190:
                                        }
                                        goto comment;
                                }
-yy191:
+yy193:
        yych = *++YYCURSOR;
-       if(yych == '*') goto yy195;
-       goto yy190;
-yy192:
+       if(yych == '*') goto yy197;
+       goto yy192;
+yy194:
        ++YYCURSOR;
        {
                                        if(cursor == eof)
@@ -1182,17 +1197,17 @@ yy192:
                                        cline++;
                                        goto comment;
                                }
-yy194:
+yy196:
        yych = *++YYCURSOR;
-       goto yy190;
-yy195:
+       goto yy192;
+yy197:
        ++YYCURSOR;
        {
                                        ++depth;
                                        fatal("ambiguous /* found");
                                        goto comment;
                                }
-yy197:
+yy199:
        ++YYCURSOR;
        {
                                        if(--depth == 0)
@@ -1248,52 +1263,52 @@ config:
        if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if(yych <= 0x1F) {
-               if(yych != 0x09) goto yy205;
+               if(yych != 0x09) goto yy207;
        } else {
-               if(yych <= ' ') goto yy201;
-               if(yych == '=') goto yy203;
-               goto yy205;
+               if(yych <= ' ') goto yy203;
+               if(yych == '=') goto yy205;
+               goto yy207;
        }
-yy201:
+yy203:
        ++YYCURSOR;
        yych = *YYCURSOR;
-       goto yy210;
-yy202:
+       goto yy212;
+yy204:
        {
                                        goto config;
                                }
-yy203:
+yy205:
        ++YYCURSOR;
        yych = *YYCURSOR;
-       goto yy208;
-yy204:
+       goto yy210;
+yy206:
        {
                                        iscfg = 2;
                                        cur = cursor;
                                        RETURN('=');
                                }
-yy205:
+yy207:
        ++YYCURSOR;
        {
                                        fatal("missing '='");
                                }
-yy207:
+yy209:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy208:
+yy210:
        if(yybm[0+yych] & 128) {
-               goto yy207;
+               goto yy209;
        }
-       goto yy204;
-yy209:
+       goto yy206;
+yy211:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy210:
-       if(yych == 0x09) goto yy209;
-       if(yych == ' ') goto yy209;
-       goto yy202;
+yy212:
+       if(yych == 0x09) goto yy211;
+       if(yych == ' ') goto yy211;
+       goto yy204;
 }
 
 
@@ -1339,191 +1354,191 @@ value:
        yych = *YYCURSOR;
        if(yych <= '&') {
                if(yych <= 0x0D) {
-                       if(yych <= 0x08) goto yy219;
-                       if(yych <= 0x0A) goto yy213;
-                       if(yych <= 0x0C) goto yy219;
+                       if(yych <= 0x08) goto yy221;
+                       if(yych <= 0x0A) goto yy215;
+                       if(yych <= 0x0C) goto yy221;
                } else {
                        if(yych <= ' ') {
-                               if(yych <= 0x1F) goto yy219;
+                               if(yych <= 0x1F) goto yy221;
                        } else {
-                               if(yych == '"') goto yy221;
-                               goto yy219;
+                               if(yych == '"') goto yy223;
+                               goto yy221;
                        }
                }
        } else {
                if(yych <= '/') {
-                       if(yych <= '\'') goto yy223;
-                       if(yych == '-') goto yy216;
-                       goto yy219;
+                       if(yych <= '\'') goto yy225;
+                       if(yych == '-') goto yy218;
+                       goto yy221;
                } else {
                        if(yych <= '9') {
-                               if(yych <= '0') goto yy214;
-                               goto yy217;
+                               if(yych <= '0') goto yy216;
+                               goto yy219;
                        } else {
-                               if(yych != ';') goto yy219;
+                               if(yych != ';') goto yy221;
                        }
                }
        }
-yy213:
+yy215:
        {
                                        cur = cursor;
                                        yylval.str = new Str(token());
                                        iscfg = 0;
                                        return VALUE;
                                }
-yy214:
+yy216:
        ++YYCURSOR;
        if(yybm[0+(yych = *YYCURSOR)] & 8) {
-               goto yy219;
+               goto yy221;
        }
-yy215:
+yy217:
        {
                                        cur = cursor;
                                        yylval.number = atoi(token().to_string().c_str());
                                        iscfg = 0;
                                        return NUMBER;
                                }
-yy216:
+yy218:
        yych = *++YYCURSOR;
-       if(yych <= '0') goto yy220;
-       if(yych >= ':') goto yy220;
-yy217:
+       if(yych <= '0') goto yy222;
+       if(yych >= ':') goto yy222;
+yy219:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yybm[0+yych] & 4) {
-               goto yy217;
+               goto yy219;
        }
        if(yych <= 0x0D) {
-               if(yych <= 0x08) goto yy219;
-               if(yych <= 0x0A) goto yy215;
-               if(yych >= 0x0D) goto yy215;
+               if(yych <= 0x08) goto yy221;
+               if(yych <= 0x0A) goto yy217;
+               if(yych >= 0x0D) goto yy217;
        } else {
                if(yych <= ' ') {
-                       if(yych >= ' ') goto yy215;
+                       if(yych >= ' ') goto yy217;
                } else {
-                       if(yych == ';') goto yy215;
+                       if(yych == ';') goto yy217;
                }
        }
-yy219:
+yy221:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy220:
+yy222:
        if(yybm[0+yych] & 8) {
-               goto yy219;
+               goto yy221;
        }
-       goto yy213;
-yy221:
+       goto yy215;
+yy223:
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yybm[0+yych] & 16) {
-               goto yy221;
+               goto yy223;
        }
        if(yych <= '!') {
-               if(yych == 0x0A) goto yy213;
-               goto yy231;
-       } else {
-               if(yych <= '"') goto yy219;
-               if(yych <= '[') goto yy231;
+               if(yych == 0x0A) goto yy215;
                goto yy233;
+       } else {
+               if(yych <= '"') goto yy221;
+               if(yych <= '[') goto yy233;
+               goto yy235;
        }
-yy223:
+yy225:
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yybm[0+yych] & 32) {
-               goto yy223;
+               goto yy225;
        }
        if(yych <= '&') {
-               if(yych == 0x0A) goto yy213;
+               if(yych == 0x0A) goto yy215;
        } else {
-               if(yych <= '\'') goto yy219;
-               if(yych >= '\\') goto yy228;
+               if(yych <= '\'') goto yy221;
+               if(yych >= '\\') goto yy230;
        }
-yy225:
+yy227:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yybm[0+yych] & 64) {
-               goto yy225;
+               goto yy227;
        }
-       if(yych <= '&') goto yy227;
-       if(yych <= '\'') goto yy229;
-       goto yy230;
-yy227:
+       if(yych <= '&') goto yy229;
+       if(yych <= '\'') goto yy231;
+       goto yy232;
+yy229:
        YYCURSOR = YYMARKER;
-       goto yy213;
-yy228:
+       goto yy215;
+yy230:
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= 0x0D) {
                if(yych <= 0x09) {
-                       if(yych <= 0x08) goto yy223;
-                       goto yy225;
+                       if(yych <= 0x08) goto yy225;
+                       goto yy227;
                } else {
-                       if(yych <= 0x0A) goto yy213;
-                       if(yych <= 0x0C) goto yy223;
-                       goto yy225;
+                       if(yych <= 0x0A) goto yy215;
+                       if(yych <= 0x0C) goto yy225;
+                       goto yy227;
                }
        } else {
                if(yych <= ' ') {
-                       if(yych <= 0x1F) goto yy223;
-                       goto yy225;
+                       if(yych <= 0x1F) goto yy225;
+                       goto yy227;
                } else {
-                       if(yych == ';') goto yy225;
-                       goto yy223;
+                       if(yych == ';') goto yy227;
+                       goto yy225;
                }
        }
-yy229:
+yy231:
        yych = *++YYCURSOR;
-       goto yy213;
-yy230:
+       goto yy215;
+yy232:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy227;
-       goto yy225;
-yy231:
+       if(yych == 0x0A) goto yy229;
+       goto yy227;
+yy233:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yybm[0+yych] & 128) {
-               goto yy231;
+               goto yy233;
        }
-       if(yych <= '!') goto yy227;
-       if(yych <= '"') goto yy229;
-       goto yy234;
-yy233:
+       if(yych <= '!') goto yy229;
+       if(yych <= '"') goto yy231;
+       goto yy236;
+yy235:
        YYMARKER = ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if(yych <= 0x0D) {
                if(yych <= 0x09) {
-                       if(yych <= 0x08) goto yy221;
-                       goto yy231;
+                       if(yych <= 0x08) goto yy223;
+                       goto yy233;
                } else {
-                       if(yych <= 0x0A) goto yy213;
-                       if(yych <= 0x0C) goto yy221;
-                       goto yy231;
+                       if(yych <= 0x0A) goto yy215;
+                       if(yych <= 0x0C) goto yy223;
+                       goto yy233;
                }
        } else {
                if(yych <= ' ') {
-                       if(yych <= 0x1F) goto yy221;
-                       goto yy231;
+                       if(yych <= 0x1F) goto yy223;
+                       goto yy233;
                } else {
-                       if(yych == ';') goto yy231;
-                       goto yy221;
+                       if(yych == ';') goto yy233;
+                       goto yy223;
                }
        }
-yy234:
+yy236:
        ++YYCURSOR;
        if(YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if(yych == 0x0A) goto yy227;
-       goto yy231;
+       if(yych == 0x0A) goto yy229;
+       goto yy233;
 }
 
 }
index d48526b33004567b90404d9dff9dc6872cf91e51..20fd467df823a3299074ce30efb05ab63ece82dc 100644 (file)
@@ -162,7 +162,7 @@ rule:
                        delete $2;
                        delete $7;
                }
-       |       '<' cond '>' look CODE
+       |       '<' cond '>' look newcond CODE
                {
                        delete $2;
                        if (!cFlag)
@@ -180,7 +180,7 @@ rule:
                        $7->newcond = $6;
                        specStar.push_back(new RuleOp($4, $5, $7, accept++));
                }
-       |       '<' STAR '>' look CODE
+       |       '<' STAR '>' look newcond CODE
                {
                        if (!cFlag)
                        {
@@ -188,7 +188,7 @@ rule:
                        }
                        in->fatal("no expression specified");
                }
-       |       NOCOND CODE
+       |       NOCOND newcond CODE
                {
                        if (!cFlag)
                        {
@@ -198,7 +198,8 @@ rule:
                        {
                                in->fatal("code to handle illegal condition already defined");
                        }
-                       $$ = specNone = new RuleOp(new NullOp(), new NullOp(), $2, accept++);
+                       $3->newcond = $2;
+                       $$ = specNone = new RuleOp(new NullOp(), new NullOp(), $3, accept++);
                }
 ;
 
index fbdc005f4cc739c0cb122799543d7a2d1adaab4e..0e7e86e83c0a66c0582623614eb40cc5f33f03cd 100644 (file)
@@ -300,7 +300,7 @@ scan:
                                        fatal("unterminated range (missing ])");
                                }
 
-       "<>" / (ws* "{") {
+       "<>" / (ws* ("{" | "=>" | ":=")) {
                                        RETURN(NOCOND);
                                }
        [<>,()|=;/\\]   {
diff --git a/re2c/test/condition_11.cg.c b/re2c/test/condition_11.cg.c
new file mode 100755 (executable)
index 0000000..75d18ef
--- /dev/null
@@ -0,0 +1,86 @@
+/* Generated by re2c */
+#line 1 "condition_11.cg.re"
+
+#line 5 "<stdout>"
+{
+       YYCTYPE yych;
+       static void *yyctable[3] = {
+               &&yyc_0,
+               &&yyc_r1,
+               &&yyc_r2,
+       };
+       goto *yyctable[YYGETCONDITION()];
+/* *********************************** */
+yyc_0:
+
+       YYSETCONDITION(yycr1);
+#line 3 "condition_11.cg.re"
+       { return NULL; }
+#line 20 "<stdout>"
+/* *********************************** */
+yyc_r1:
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '2') {
+               if(yych <= '0') goto yy5;
+               if(yych <= '1') goto yy8;
+               goto yy6;
+       } else {
+               if(yych <= '`') goto yy5;
+               if(yych <= 'a') goto yy10;
+               if(yych <= 'b') goto yy12;
+       }
+yy5:
+yy6:
+       ++YYCURSOR;
+#line 5 "condition_11.cg.re"
+       { return "2"; }
+#line 39 "<stdout>"
+yy8:
+       ++YYCURSOR;
+#line 4 "condition_11.cg.re"
+       { return "1"; }
+#line 44 "<stdout>"
+yy10:
+       ++YYCURSOR;
+       YYSETCONDITION(yycr2);
+#line 6 "condition_11.cg.re"
+       { return "a"; }
+#line 50 "<stdout>"
+yy12:
+       ++YYCURSOR;
+       YYSETCONDITION(yycr2);
+#line 7 "condition_11.cg.re"
+       { return "b"; }
+#line 56 "<stdout>"
+/* *********************************** */
+yyc_r2:
+       if(YYLIMIT == YYCURSOR) YYFILL(1);
+       yych = *YYCURSOR;
+       if(yych <= '2') {
+               if(yych <= '0') goto yy16;
+               if(yych <= '1') goto yy19;
+               goto yy17;
+       } else {
+               if(yych == 'b') goto yy21;
+       }
+yy16:
+yy17:
+       ++YYCURSOR;
+#line 5 "condition_11.cg.re"
+       { return "2"; }
+#line 73 "<stdout>"
+yy19:
+       ++YYCURSOR;
+#line 4 "condition_11.cg.re"
+       { return "1"; }
+#line 78 "<stdout>"
+yy21:
+       ++YYCURSOR;
+       YYSETCONDITION(yyc);
+#line 7 "condition_11.cg.re"
+       { return "b"; }
+#line 84 "<stdout>"
+}
+#line 9 "condition_11.cg.re"
+
diff --git a/re2c/test/condition_11.cg.re b/re2c/test/condition_11.cg.re
new file mode 100755 (executable)
index 0000000..fbf112a
--- /dev/null
@@ -0,0 +1,9 @@
+/*!re2c
+
+<>                     => r1 { return NULL; }
+<*>            "1"     => r1 { return "1"; }
+<*>            "2"     => r1 { return "2"; }
+<r1>   "a" => r2 { return "a"; }
+<r1,r2>        "b" => r2 { return "b"; }
+
+*/