]> granicus.if.org Git - re2c/commitdiff
- Improved -F
authorhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Sun, 2 Mar 2008 21:12:20 +0000 (21:12 +0000)
committerhelly <helly@642ea486-5414-0410-9d7f-a0204ed87703>
Sun, 2 Mar 2008 21:12:20 +0000 (21:12 +0000)
re2c/bootstrap/parser.cc
re2c/bootstrap/scanner.cc
re2c/bootstrap/y.tab.h
re2c/htdocs/manual.html
re2c/parser.y
re2c/re2c.1.in
re2c/scanner.re

index d352206bc35a352c4e463423bbe9aabd4ca7d512..9089f5b789a919eaffbac5801abd06796bcdd471 100644 (file)
@@ -77,7 +77,8 @@
      CONFIG = 266,
      VALUE = 267,
      NUMBER = 268,
-     SETUP = 269
+     SETUP = 269,
+     FID = 270
    };
 #endif
 /* Tokens.  */
@@ -93,6 +94,7 @@
 #define VALUE 267
 #define NUMBER 268
 #define SETUP 269
+#define FID 270
 
 
 
@@ -255,7 +257,7 @@ typedef union YYSTYPE
        re2c::CondList  *clist;
 }
 /* Line 187 of yacc.c.  */
-#line 259 "parser.cc"
+#line 261 "parser.cc"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -268,7 +270,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 272 "parser.cc"
+#line 274 "parser.cc"
 
 #ifdef short
 # undef short
@@ -483,20 +485,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  2
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   92
+#define YYLAST   96
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  26
+#define YYNTOKENS  27
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  14
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  46
+#define YYNRULES  49
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  88
+#define YYNSTATES  91
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   269
+#define YYMAXUTOK   270
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -508,15 +510,15 @@ static const yytype_uint8 yytranslate[] =
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      24,    25,     2,     2,    21,     2,     2,    17,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    20,    16,
-      18,    15,    19,     2,     2,     2,     2,     2,     2,     2,
+      25,    26,     2,     2,    22,     2,     2,    18,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    21,    17,
+      19,    16,    20,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,    23,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,    24,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,    22,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,    23,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -530,7 +532,8 @@ static const yytype_uint8 yytranslate[] =
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15
 };
 
 #if YYDEBUG
@@ -538,44 +541,45 @@ static const yytype_uint8 yytranslate[] =
    YYRHS.  */
 static const yytype_uint8 yyprhs[] =
 {
-       0,     0,     3,     4,     7,    10,    15,    20,    25,    30,
-      34,    42,    50,    57,    64,    72,    80,    87,    94,    98,
-     102,   107,   112,   113,   115,   117,   121,   122,   126,   127,
-     130,   132,   136,   138,   142,   144,   147,   149,   152,   155,
-     157,   159,   162,   165,   167,   169,   171
+       0,     0,     3,     4,     7,    10,    15,    18,    23,    28,
+      32,    37,    42,    46,    54,    62,    69,    76,    84,    92,
+      99,   106,   110,   114,   119,   124,   125,   127,   129,   133,
+     134,   138,   139,   142,   144,   148,   150,   154,   156,   159,
+     161,   164,   167,   169,   171,   174,   177,   179,   181,   183
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
-      27,     0,    -1,    -1,    27,    29,    -1,    27,    28,    -1,
-       7,    15,    34,    16,    -1,     7,    15,    34,    17,    -1,
-      11,    15,    12,    16,    -1,    11,    15,    13,    16,    -1,
-      34,    33,     8,    -1,    18,    30,    19,    34,    33,    32,
-       8,    -1,    18,    30,    19,    34,    33,    20,    32,    -1,
-      18,    30,    19,    33,    32,     8,    -1,    18,    30,    19,
-      33,    20,    32,    -1,    18,     5,    19,    34,    33,    32,
-       8,    -1,    18,     5,    19,    34,    33,    20,    32,    -1,
-      18,     5,    19,    33,    32,     8,    -1,    18,     5,    19,
-      33,    20,    32,    -1,     6,    32,     8,    -1,     6,    20,
-      32,    -1,    14,     5,    19,     8,    -1,    14,    30,    19,
-       8,    -1,    -1,    31,    -1,     7,    -1,    31,    21,     7,
-      -1,    -1,    15,    19,     7,    -1,    -1,    17,    34,    -1,
-      35,    -1,    34,    22,    35,    -1,    36,    -1,    35,    23,
-      36,    -1,    37,    -1,    36,    37,    -1,    39,    -1,    39,
-      38,    -1,    39,     3,    -1,     4,    -1,     5,    -1,    38,
-       4,    -1,    38,     5,    -1,     7,    -1,     9,    -1,    10,
-      -1,    24,    34,    25,    -1
+      28,     0,    -1,    -1,    28,    30,    -1,    28,    29,    -1,
+       7,    16,    35,    17,    -1,    15,    35,    -1,     7,    16,
+      35,    18,    -1,     7,    16,    35,    18,    -1,    15,    35,
+      18,    -1,    11,    16,    12,    17,    -1,    11,    16,    13,
+      17,    -1,    35,    34,     8,    -1,    19,    31,    20,    35,
+      34,    33,     8,    -1,    19,    31,    20,    35,    34,    21,
+      33,    -1,    19,    31,    20,    34,    33,     8,    -1,    19,
+      31,    20,    34,    21,    33,    -1,    19,     5,    20,    35,
+      34,    33,     8,    -1,    19,     5,    20,    35,    34,    21,
+      33,    -1,    19,     5,    20,    34,    33,     8,    -1,    19,
+       5,    20,    34,    21,    33,    -1,     6,    33,     8,    -1,
+       6,    21,    33,    -1,    14,     5,    20,     8,    -1,    14,
+      31,    20,     8,    -1,    -1,    32,    -1,     7,    -1,    32,
+      22,     7,    -1,    -1,    16,    20,     7,    -1,    -1,    18,
+      35,    -1,    36,    -1,    35,    23,    36,    -1,    37,    -1,
+      36,    24,    37,    -1,    38,    -1,    37,    38,    -1,    40,
+      -1,    40,    39,    -1,    40,     3,    -1,     4,    -1,     5,
+      -1,    39,     4,    -1,    39,     5,    -1,     7,    -1,     9,
+      -1,    10,    -1,    25,    35,    26,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   156,   156,   160,   161,   165,   173,   177,   183,   191,
-     200,   204,   209,   214,   220,   228,   236,   241,   247,   259,
-     271,   277,   285,   288,   295,   300,   309,   312,   320,   323,
-     330,   334,   341,   345,   356,   360,   367,   371,   386,   393,
-     397,   401,   405,   412,   420,   424,   428
+       0,   156,   156,   160,   161,   165,   173,   181,   185,   189,
+     193,   199,   207,   216,   220,   225,   230,   236,   244,   252,
+     257,   263,   275,   287,   293,   301,   304,   311,   316,   325,
+     328,   336,   339,   346,   350,   357,   361,   372,   376,   383,
+     387,   402,   409,   413,   417,   421,   428,   436,   440,   444
 };
 #endif
 
@@ -586,9 +590,9 @@ static const char *const yytname[] =
 {
   "$end", "error", "$undefined", "CLOSESIZE", "CLOSE", "STAR", "NOCOND",
   "ID", "CODE", "RANGE", "STRING", "CONFIG", "VALUE", "NUMBER", "SETUP",
-  "'='", "';'", "'/'", "'<'", "'>'", "':'", "','", "'|'", "'\\\\'", "'('",
-  "')'", "$accept", "spec", "decl", "rule", "cond", "clist", "newcond",
-  "look", "expr", "diff", "term", "factor", "close", "primary", 0
+  "FID", "'='", "';'", "'/'", "'<'", "'>'", "':'", "','", "'|'", "'\\\\'",
+  "'('", "')'", "$accept", "spec", "decl", "rule", "cond", "clist",
+  "newcond", "look", "expr", "diff", "term", "factor", "close", "primary", 0
 };
 #endif
 
@@ -598,29 +602,29 @@ static const char *const yytname[] =
 static const yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,    61,    59,    47,    60,    62,
-      58,    44,   124,    92,    40,    41
+     265,   266,   267,   268,   269,   270,    61,    59,    47,    60,
+      62,    58,    44,   124,    92,    40,    41
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    26,    27,    27,    27,    28,    28,    28,    28,    29,
-      29,    29,    29,    29,    29,    29,    29,    29,    29,    29,
-      29,    29,    30,    30,    31,    31,    32,    32,    33,    33,
-      34,    34,    35,    35,    36,    36,    37,    37,    37,    38,
-      38,    38,    38,    39,    39,    39,    39
+       0,    27,    28,    28,    28,    29,    29,    29,    29,    29,
+      29,    29,    30,    30,    30,    30,    30,    30,    30,    30,
+      30,    30,    30,    30,    30,    31,    31,    32,    32,    33,
+      33,    34,    34,    35,    35,    36,    36,    37,    37,    38,
+      38,    38,    39,    39,    39,    39,    40,    40,    40,    40
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
-       0,     2,     0,     2,     2,     4,     4,     4,     4,     3,
-       7,     7,     6,     6,     7,     7,     6,     6,     3,     3,
-       4,     4,     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
+       0,     2,     0,     2,     2,     4,     2,     4,     4,     3,
+       4,     4,     3,     7,     7,     6,     6,     7,     7,     6,
+       6,     3,     3,     4,     4,     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
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -628,45 +632,47 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       2,     0,     1,    26,    43,    44,    45,     0,    22,    22,
-       0,     4,     3,    28,    30,    32,    34,    36,     0,    26,
-       0,     0,     0,     0,    24,     0,    23,     0,     0,    43,
-       0,     0,     0,     0,     0,    35,    38,    39,    40,    37,
-       0,    19,    18,     0,     0,     0,     0,     0,     0,    28,
-      28,    46,    29,    31,     9,    33,    41,    42,    27,     5,
-       6,     7,     8,    20,    21,    25,    26,    28,    26,    28,
-      26,     0,    26,    26,     0,    26,    17,    16,    26,     0,
-      13,    12,    26,     0,    15,    14,    11,    10
+       2,     0,     1,    29,    46,    47,    48,     0,    25,     0,
+      25,     0,     4,     3,    31,    33,    35,    37,    39,     0,
+      29,     0,     0,     0,     0,    27,     0,    26,    46,     6,
+       0,     0,     0,     0,     0,     0,     0,    38,    41,    42,
+      43,    40,     0,    22,    21,     0,     0,     0,     0,     0,
+       0,     9,    31,    31,    49,    32,    34,    12,    36,    44,
+      45,    30,     5,     7,    10,    11,    23,    24,    28,    29,
+      31,    29,    31,    29,     0,    29,    29,     0,    29,    20,
+      19,    29,     0,    16,    15,    29,     0,    18,    17,    14,
+      13
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int8 yydefgoto[] =
 {
-      -1,     1,    11,    12,    25,    26,    20,    33,    13,    14,
-      15,    16,    39,    17
+      -1,     1,    12,    13,    26,    27,    21,    35,    14,    15,
+      16,    17,    41,    18
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -42
+#define YYPACT_NINF -47
 static const yytype_int8 yypact[] =
 {
-     -42,     7,   -42,    -5,   -11,   -42,   -42,     8,    59,    60,
-      -4,   -42,   -42,     2,   -12,    -4,   -42,    57,    27,    55,
-      63,    -4,    23,    53,   -42,    54,    56,    61,    62,   -42,
-      33,    -4,    -4,    66,    -4,   -42,   -42,   -42,   -42,    64,
-      68,   -42,   -42,    16,    67,    69,    70,    71,    75,    20,
-      20,   -42,    65,   -12,   -42,    -4,   -42,   -42,   -42,   -42,
-     -42,   -42,   -42,   -42,   -42,   -42,    19,     2,    28,     2,
-      55,    76,    30,    55,    78,    37,   -42,   -42,    55,    80,
-     -42,   -42,    55,    81,   -42,   -42,   -42,   -42
+     -47,     2,   -47,   -11,    -1,   -47,   -47,    27,    64,    23,
+      65,    23,   -47,   -47,    17,    15,    23,   -47,    63,    30,
+      48,    67,    23,     6,    56,   -47,    57,    58,   -47,    18,
+      59,    61,    37,    23,    23,    70,    23,   -47,   -47,   -47,
+     -47,    69,    75,   -47,   -47,    11,    66,    68,    76,    78,
+      80,   -47,    13,    13,   -47,    71,    15,   -47,    23,   -47,
+     -47,   -47,   -47,   -47,   -47,   -47,   -47,   -47,   -47,    21,
+      17,    31,    17,    48,    81,    38,    48,    82,    41,   -47,
+     -47,    48,    83,   -47,   -47,    48,    84,   -47,   -47,   -47,
+     -47
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int8 yypgoto[] =
 {
-     -42,   -42,   -42,   -42,    82,   -42,   -19,   -41,    -9,    44,
-      58,   -13,   -42,   -42
+     -47,   -47,   -47,   -47,    85,   -47,   -20,   -46,    -8,    54,
+      60,   -12,   -47,   -47
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -676,45 +682,46 @@ static const yytype_int8 yypgoto[] =
 #define YYTABLE_NINF -1
 static const yytype_uint8 yytable[] =
 {
-      41,    30,    35,    29,    21,     5,     6,     2,    66,    68,
-      18,    34,    43,     3,     4,    19,     5,     6,     7,    31,
-      10,     8,    52,    22,    32,     9,    72,    29,    75,     5,
-       6,    10,    59,    60,    18,    44,    45,    31,    32,    70,
-      67,    69,    35,    18,    10,    18,    40,    71,    73,    74,
-      78,    76,    18,    79,    80,    32,    83,    82,    51,    84,
-      36,    37,    38,    86,    23,    27,    24,    24,    56,    57,
-      18,    42,    46,    47,    54,    58,    53,    48,    63,    64,
-      49,    50,    65,    61,    77,    62,    81,    32,    85,    87,
-       0,    28,    55
+      43,    29,     2,    32,    37,    19,    69,    71,     3,     4,
+      20,     5,     6,     7,    45,    22,     8,     9,    46,    47,
+      28,    10,     5,     6,    75,    55,    78,    11,    62,    63,
+      28,    33,     5,     6,    34,    33,    51,    19,    11,    36,
+      34,    34,    73,    23,    70,    72,    37,    19,    11,    74,
+      42,    77,    76,    79,    19,    82,    83,    19,    86,    81,
+      34,    87,    85,    54,    19,    89,    38,    39,    40,    24,
+      30,    25,    25,    59,    60,    44,    48,    49,    57,    52,
+      50,    53,    61,    64,    66,    65,    67,    68,    56,    80,
+      84,    88,    90,     0,    34,    31,    58
 };
 
 static const yytype_int8 yycheck[] =
 {
-      19,    10,    15,     7,    15,     9,    10,     0,    49,    50,
-      15,    23,    21,     6,     7,    20,     9,    10,    11,    17,
-      24,    14,    31,    15,    22,    18,    67,     7,    69,     9,
-      10,    24,    16,    17,    15,    12,    13,    17,    22,    20,
-      49,    50,    55,    15,    24,    15,    19,    66,    20,    68,
-      20,    70,    15,    72,    73,    22,    75,    20,    25,    78,
-       3,     4,     5,    82,     5,     5,     7,     7,     4,     5,
-      15,     8,    19,    19,     8,     7,    32,    21,     8,     8,
-      19,    19,     7,    16,     8,    16,     8,    22,     8,     8,
-      -1,     9,    34
+      20,     9,     0,    11,    16,    16,    52,    53,     6,     7,
+      21,     9,    10,    11,    22,    16,    14,    15,    12,    13,
+       7,    19,     9,    10,    70,    33,    72,    25,    17,    18,
+       7,    18,     9,    10,    23,    18,    18,    16,    25,    24,
+      23,    23,    21,    16,    52,    53,    58,    16,    25,    69,
+      20,    71,    21,    73,    16,    75,    76,    16,    78,    21,
+      23,    81,    21,    26,    16,    85,     3,     4,     5,     5,
+       5,     7,     7,     4,     5,     8,    20,    20,     8,    20,
+      22,    20,     7,    17,     8,    17,     8,     7,    34,     8,
+       8,     8,     8,    -1,    23,    10,    36
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,    27,     0,     6,     7,     9,    10,    11,    14,    18,
-      24,    28,    29,    34,    35,    36,    37,    39,    15,    20,
-      32,    15,    15,     5,     7,    30,    31,     5,    30,     7,
-      34,    17,    22,    33,    23,    37,     3,     4,     5,    38,
-      19,    32,     8,    34,    12,    13,    19,    19,    21,    19,
-      19,    25,    34,    35,     8,    36,     4,     5,     7,    16,
-      17,    16,    16,     8,     8,     7,    33,    34,    33,    34,
-      20,    32,    33,    20,    32,    33,    32,     8,    20,    32,
-      32,     8,    20,    32,    32,     8,    32,     8
+       0,    28,     0,     6,     7,     9,    10,    11,    14,    15,
+      19,    25,    29,    30,    35,    36,    37,    38,    40,    16,
+      21,    33,    16,    16,     5,     7,    31,    32,     7,    35,
+       5,    31,    35,    18,    23,    34,    24,    38,     3,     4,
+       5,    39,    20,    33,     8,    35,    12,    13,    20,    20,
+      22,    18,    20,    20,    26,    35,    36,     8,    37,     4,
+       5,     7,    17,    18,    17,    17,     8,     8,     7,    34,
+      35,    34,    35,    21,    33,    34,    21,    33,    34,    33,
+       8,    21,    33,    33,     8,    21,    33,    33,     8,    33,
+       8
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1539,7 +1546,7 @@ yyreduce:
   case 5:
 #line 166 "parser.y"
     {
-                       if((yyvsp[(1) - (4)].symbol)->re)
+                       if ((yyvsp[(1) - (4)].symbol)->re)
                        {
                                in->fatal("sym already defined");
                        }
@@ -1550,12 +1557,37 @@ yyreduce:
   case 6:
 #line 174 "parser.y"
     {
-                       in->fatal("trailing contexts are not allowed in named definitions");
+                       if ((yyvsp[(1) - (2)].symbol)->re)
+                       {
+                               in->fatal("sym already defined");
+                       }
+                       (yyvsp[(1) - (2)].symbol)->re = (yyvsp[(2) - (2)].regexp);
                }
     break;
 
   case 7:
-#line 178 "parser.y"
+#line 182 "parser.y"
+    {
+                       in->fatal("trailing contexts are not allowed in named definitions");
+               }
+    break;
+
+  case 8:
+#line 186 "parser.y"
+    {
+                       in->fatal("trailing contexts are not allowed in named definitions");
+               }
+    break;
+
+  case 9:
+#line 190 "parser.y"
+    {
+                       in->fatal("trailing contexts are not allowed in named definitions");
+               }
+    break;
+
+  case 10:
+#line 194 "parser.y"
     {
                        in->config(*(yyvsp[(1) - (4)].str), *(yyvsp[(3) - (4)].str));
                        delete (yyvsp[(1) - (4)].str);
@@ -1563,16 +1595,16 @@ yyreduce:
                }
     break;
 
-  case 8:
-#line 184 "parser.y"
+  case 11:
+#line 200 "parser.y"
     {
                        in->config(*(yyvsp[(1) - (4)].str), (yyvsp[(3) - (4)].number));
                        delete (yyvsp[(1) - (4)].str);
                }
     break;
 
-  case 9:
-#line 192 "parser.y"
+  case 12:
+#line 208 "parser.y"
     {
                        if (cFlag)
                        {
@@ -1583,31 +1615,31 @@ yyreduce:
                }
     break;
 
-  case 10:
-#line 201 "parser.y"
+  case 13:
+#line 217 "parser.y"
     {
                        context_rule((yyvsp[(2) - (7)].clist), (yyvsp[(4) - (7)].regexp), (yyvsp[(5) - (7)].regexp), (yyvsp[(6) - (7)].str), (yyvsp[(7) - (7)].token));
                }
     break;
 
-  case 11:
-#line 205 "parser.y"
+  case 14:
+#line 221 "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);
                }
     break;
 
-  case 12:
-#line 210 "parser.y"
+  case 15:
+#line 226 "parser.y"
     {
                        context_none((yyvsp[(2) - (6)].clist));
                        delete (yyvsp[(5) - (6)].str);
                }
     break;
 
-  case 13:
-#line 215 "parser.y"
+  case 16:
+#line 231 "parser.y"
     {
                        assert((yyvsp[(6) - (6)].str));
                        context_none((yyvsp[(2) - (6)].clist));
@@ -1615,8 +1647,8 @@ yyreduce:
                }
     break;
 
-  case 14:
-#line 221 "parser.y"
+  case 17:
+#line 237 "parser.y"
     {
                        context_check(NULL);
                        Token *token = new Token((yyvsp[(7) - (7)].token), (yyvsp[(7) - (7)].token)->line, (yyvsp[(6) - (7)].str));
@@ -1626,8 +1658,8 @@ yyreduce:
                }
     break;
 
-  case 15:
-#line 229 "parser.y"
+  case 18:
+#line 245 "parser.y"
     {
                        assert((yyvsp[(7) - (7)].str));
                        context_check(NULL);
@@ -1637,16 +1669,16 @@ yyreduce:
                }
     break;
 
-  case 16:
-#line 237 "parser.y"
+  case 19:
+#line 253 "parser.y"
     {
                        context_none(NULL);
                        delete (yyvsp[(5) - (6)].str);
                }
     break;
 
-  case 17:
-#line 242 "parser.y"
+  case 20:
+#line 258 "parser.y"
     {
                        assert((yyvsp[(6) - (6)].str));
                        context_none(NULL);
@@ -1654,8 +1686,8 @@ yyreduce:
                }
     break;
 
-  case 18:
-#line 248 "parser.y"
+  case 21:
+#line 264 "parser.y"
     {
                        context_check(NULL);
                        if (specNone)
@@ -1669,8 +1701,8 @@ yyreduce:
                }
     break;
 
-  case 19:
-#line 260 "parser.y"
+  case 22:
+#line 276 "parser.y"
     {
                        assert((yyvsp[(3) - (3)].str));
                        context_check(NULL);
@@ -1684,8 +1716,8 @@ yyreduce:
                }
     break;
 
-  case 20:
-#line 272 "parser.y"
+  case 23:
+#line 288 "parser.y"
     {
                        CondList *clist = new CondList();
                        clist->insert("*");
@@ -1693,94 +1725,94 @@ yyreduce:
                }
     break;
 
-  case 21:
-#line 278 "parser.y"
+  case 24:
+#line 294 "parser.y"
     {
                        setup_rule((yyvsp[(2) - (4)].clist), (yyvsp[(4) - (4)].token));
                }
     break;
 
-  case 22:
-#line 285 "parser.y"
+  case 25:
+#line 301 "parser.y"
     {
                        in->fatal("unnamed condition not supported");
                }
     break;
 
-  case 23:
-#line 289 "parser.y"
+  case 26:
+#line 305 "parser.y"
     {
                        (yyval.clist) = (yyvsp[(1) - (1)].clist);
                }
     break;
 
-  case 24:
-#line 296 "parser.y"
+  case 27:
+#line 312 "parser.y"
     {
                        (yyval.clist) = new CondList();
                        (yyval.clist)->insert((yyvsp[(1) - (1)].symbol)->GetName().to_string());
                }
     break;
 
-  case 25:
-#line 301 "parser.y"
+  case 28:
+#line 317 "parser.y"
     {
                        (yyvsp[(1) - (3)].clist)->insert((yyvsp[(3) - (3)].symbol)->GetName().to_string());
                        (yyval.clist) = (yyvsp[(1) - (3)].clist);
                }
     break;
 
-  case 26:
-#line 309 "parser.y"
+  case 29:
+#line 325 "parser.y"
     {
                        (yyval.str) = NULL;
                }
     break;
 
-  case 27:
-#line 313 "parser.y"
+  case 30:
+#line 329 "parser.y"
     {
                        (yyval.str) = new Str((yyvsp[(3) - (3)].symbol)->GetName().to_string().c_str());
                }
     break;
 
-  case 28:
-#line 320 "parser.y"
+  case 31:
+#line 336 "parser.y"
     {
                        (yyval.regexp) = new NullOp;
                }
     break;
 
-  case 29:
-#line 324 "parser.y"
+  case 32:
+#line 340 "parser.y"
     {
                        (yyval.regexp) = (yyvsp[(2) - (2)].regexp);
                }
     break;
 
-  case 30:
-#line 331 "parser.y"
+  case 33:
+#line 347 "parser.y"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                }
     break;
 
-  case 31:
-#line 335 "parser.y"
+  case 34:
+#line 351 "parser.y"
     {
                        (yyval.regexp) = mkAlt((yyvsp[(1) - (3)].regexp), (yyvsp[(3) - (3)].regexp));
                }
     break;
 
-  case 32:
-#line 342 "parser.y"
+  case 35:
+#line 358 "parser.y"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                }
     break;
 
-  case 33:
-#line 346 "parser.y"
+  case 36:
+#line 362 "parser.y"
     {
                        (yyval.regexp) = mkDiff((yyvsp[(1) - (3)].regexp), (yyvsp[(3) - (3)].regexp));
                        if(!(yyval.regexp))
@@ -1790,29 +1822,29 @@ yyreduce:
                }
     break;
 
-  case 34:
-#line 357 "parser.y"
+  case 37:
+#line 373 "parser.y"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                }
     break;
 
-  case 35:
-#line 361 "parser.y"
+  case 38:
+#line 377 "parser.y"
     {
                        (yyval.regexp) = new CatOp((yyvsp[(1) - (2)].regexp), (yyvsp[(2) - (2)].regexp));
                }
     break;
 
-  case 36:
-#line 368 "parser.y"
+  case 39:
+#line 384 "parser.y"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                }
     break;
 
-  case 37:
-#line 372 "parser.y"
+  case 40:
+#line 388 "parser.y"
     {
                        switch((yyvsp[(2) - (2)].op))
                        {
@@ -1829,43 +1861,43 @@ yyreduce:
                }
     break;
 
-  case 38:
-#line 387 "parser.y"
+  case 41:
+#line 403 "parser.y"
     {
                        (yyval.regexp) = new CloseVOp((yyvsp[(1) - (2)].regexp), (yyvsp[(2) - (2)].extop).minsize, (yyvsp[(2) - (2)].extop).maxsize);
                }
     break;
 
-  case 39:
-#line 394 "parser.y"
+  case 42:
+#line 410 "parser.y"
     {
                        (yyval.op) = (yyvsp[(1) - (1)].op);
                }
     break;
 
-  case 40:
-#line 398 "parser.y"
+  case 43:
+#line 414 "parser.y"
     {
                        (yyval.op) = (yyvsp[(1) - (1)].op);
                }
     break;
 
-  case 41:
-#line 402 "parser.y"
+  case 44:
+#line 418 "parser.y"
     {
                        (yyval.op) = ((yyvsp[(1) - (2)].op) == (yyvsp[(2) - (2)].op)) ? (yyvsp[(1) - (2)].op) : '*';
                }
     break;
 
-  case 42:
-#line 406 "parser.y"
+  case 45:
+#line 422 "parser.y"
     {
                        (yyval.op) = ((yyvsp[(1) - (2)].op) == (yyvsp[(2) - (2)].op)) ? (yyvsp[(1) - (2)].op) : '*';
                }
     break;
 
-  case 43:
-#line 413 "parser.y"
+  case 46:
+#line 429 "parser.y"
     {
                        if(!(yyvsp[(1) - (1)].symbol)->re)
                        {
@@ -1875,22 +1907,22 @@ yyreduce:
                }
     break;
 
-  case 44:
-#line 421 "parser.y"
+  case 47:
+#line 437 "parser.y"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                }
     break;
 
-  case 45:
-#line 425 "parser.y"
+  case 48:
+#line 441 "parser.y"
     {
                        (yyval.regexp) = (yyvsp[(1) - (1)].regexp);
                }
     break;
 
-  case 46:
-#line 429 "parser.y"
+  case 49:
+#line 445 "parser.y"
     {
                        (yyval.regexp) = (yyvsp[(2) - (3)].regexp);
                }
@@ -1898,7 +1930,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 1902 "parser.cc"
+#line 1934 "parser.cc"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2112,7 +2144,7 @@ yyreturn:
 }
 
 
-#line 434 "parser.y"
+#line 450 "parser.y"
 
 
 extern "C" {
index beed3f90d93ace2d2c87d84a5781045f01a9f0e3..d481b24010bcd640d6279698273fa74c3faf3b93 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.13.3.dev on Sun Mar  2 20:15:07 2008 */
+/* Generated by re2c 0.13.3.dev on Sun Mar  2 21:34:25 2008 */
 /* $Id$ */
 #include <stdlib.h>
 #include <string.h>
@@ -507,18 +507,18 @@ yy71:
        yych = *(YYMARKER = ++YYCURSOR);
        if (yych <= '@') {
                if (yych <= '/') {
-                       if (yych == ',') goto yy166;
+                       if (yych == ',') goto yy168;
                } else {
-                       if (yych <= '0') goto yy163;
-                       if (yych <= '9') goto yy164;
+                       if (yych <= '0') goto yy165;
+                       if (yych <= '9') goto yy166;
                }
        } else {
                if (yych <= '_') {
-                       if (yych <= 'Z') goto yy161;
-                       if (yych >= '_') goto yy161;
+                       if (yych <= 'Z') goto yy163;
+                       if (yych >= '_') goto yy163;
                } else {
                        if (yych <= '`') goto yy72;
-                       if (yych <= 'z') goto yy161;
+                       if (yych <= 'z') goto yy163;
                }
        }
 yy72:
@@ -529,7 +529,7 @@ yy72:
 yy73:
        YYCTXMARKER = YYCURSOR + 1;
        ++YYCURSOR;
-       if ((yych = *YYCURSOR) == '=') goto yy157;
+       if ((yych = *YYCURSOR) == '=') goto yy159;
 yy74:
        {
                                        std::ostringstream msg;
@@ -540,14 +540,14 @@ yy74:
                                }
 yy75:
        ++YYCURSOR;
-       if ((yych = *YYCURSOR) == '*') goto yy155;
+       if ((yych = *YYCURSOR) == '*') goto yy157;
 yy76:
        {
                                        RETURN(*tok);
                                }
 yy77:
        ++YYCURSOR;
-       if ((yych = *YYCURSOR) == '/') goto yy153;
+       if ((yych = *YYCURSOR) == '/') goto yy155;
        {
                                        yylval.op = *tok;
                                        RETURN(STAR);
@@ -555,7 +555,7 @@ yy77:
 yy79:
        yyaccept = 1;
        yych = *(YYMARKER = ++YYCURSOR);
-       if (yych != 0x0A) goto yy149;
+       if (yych != 0x0A) goto yy151;
 yy80:
        {
                                        fatal("unterminated string constant (missing \")");
@@ -563,7 +563,7 @@ yy80:
 yy81:
        yyaccept = 2;
        yych = *(YYMARKER = ++YYCURSOR);
-       if (yych != 0x0A) goto yy144;
+       if (yych != 0x0A) goto yy146;
 yy82:
        {
                                        fatal("unterminated string constant (missing ')");
@@ -572,8 +572,8 @@ yy83:
        yyaccept = 3;
        yych = *(YYMARKER = ++YYCURSOR);
        if (yych == 0x0A) goto yy84;
-       if (yych == '^') goto yy135;
-       goto yy134;
+       if (yych == '^') goto yy137;
+       goto yy136;
 yy84:
        {
                                        fatal("unterminated range (missing ])");
@@ -581,8 +581,8 @@ yy84:
 yy85:
        yyaccept = 4;
        yych = *(YYMARKER = ++YYCURSOR);
-       if (yych == '!') goto yy124;
-       if (yych == '>') goto yy126;
+       if (yych == '!') goto yy126;
+       if (yych == '>') goto yy128;
        goto yy76;
 yy86:
        yych = *++YYCURSOR;
@@ -596,7 +596,7 @@ yy87:
 yy89:
        YYCTXMARKER = YYCURSOR + 1;
        yych = *++YYCURSOR;
-       if (yych == 'e') goto yy113;
+       if (yych == 'e') goto yy114;
        goto yy103;
 yy90:
        YYCTXMARKER = YYCURSOR + 1;
@@ -693,22 +693,8 @@ yy105:
        yych = *++YYCURSOR;
        goto yy104;
 yy106:
-       yyaccept = 5;
-       yych = *(YYMARKER = ++YYCURSOR);
-       if (yych <= ' ') {
-               if (yych == 0x09) goto yy110;
-               if (yych <= 0x1F) goto yy104;
-               goto yy110;
-       } else {
-               if (yych <= ',') {
-                       if (yych <= '+') goto yy104;
-                       goto yy109;
-               } else {
-                       if (yych <= '<') goto yy104;
-                       if (yych <= '>') goto yy109;
-                       goto yy104;
-               }
-       }
+       yych = *++YYCURSOR;
+       goto yy112;
 yy107:
        ++YYCURSOR;
 yy108:
@@ -719,55 +705,40 @@ yy108:
                                        return ID;
                                }
 yy109:
-       yych = *++YYCURSOR;
-       goto yy108;
-yy110:
+       ++YYCURSOR;
+       YYCURSOR = YYCTXMARKER;
+       {
+                                       if (FFlag)
+                                       {
+                                               cur = ptr > tok ? ptr - 1 : cursor;
+                                               yylval.symbol = Symbol::find(token());
+                                               return FID;
+                                       } else {
+                                               cur = ptr > tok ? ptr - 1 : cursor;
+                                               yylval.symbol = Symbol::find(token());
+                                               return ID;
+                                       }
+                               }
+yy111:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
+yy112:
        if (yych <= ' ') {
-               if (yych == 0x09) goto yy110;
-               if (yych >= ' ') goto yy110;
+               if (yych == 0x09) goto yy111;
+               if (yych <= 0x1F) goto yy109;
+               goto yy111;
        } else {
                if (yych <= ',') {
-                       if (yych >= ',') goto yy109;
-               } else {
-                       if (yych <= '<') goto yy112;
-                       if (yych <= '>') goto yy109;
-               }
-       }
-yy112:
-       YYCURSOR = YYMARKER;
-       if (yyaccept <= 3) {
-               if (yyaccept <= 1) {
-                       if (yyaccept <= 0) {
-                               goto yy72;
-                       } else {
-                               goto yy80;
-                       }
+                       if (yych <= '+') goto yy109;
                } else {
-                       if (yyaccept <= 2) {
-                               goto yy82;
-                       } else {
-                               goto yy84;
-                       }
-               }
-       } else {
-               if (yyaccept <= 5) {
-                       if (yyaccept <= 4) {
-                               goto yy76;
-                       } else {
-                               goto yy104;
-                       }
-               } else {
-                       if (yyaccept <= 6) {
-                               goto yy119;
-                       } else {
-                               goto yy167;
-                       }
+                       if (yych <= '<') goto yy109;
+                       if (yych >= '?') goto yy109;
                }
        }
-yy113:
+       yych = *++YYCURSOR;
+       goto yy108;
+yy114:
        YYCTXMARKER = YYCURSOR + 1;
        yych = *++YYCURSOR;
        if (yych != '2') goto yy103;
@@ -785,28 +756,28 @@ yy113:
                if (yych == '`') goto yy104;
                if (yych >= '{') goto yy104;
        }
-yy117:
-       yyaccept = 6;
+yy118:
+       yyaccept = 5;
        YYMARKER = ++YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if (yych <= '@') {
                if (yych <= '9') {
-                       if (yych >= '0') goto yy117;
+                       if (yych >= '0') goto yy118;
                } else {
-                       if (yych <= ':') goto yy121;
-                       if (yych >= '@') goto yy120;
+                       if (yych <= ':') goto yy123;
+                       if (yych >= '@') goto yy121;
                }
        } else {
                if (yych <= '_') {
-                       if (yych <= 'Z') goto yy117;
-                       if (yych >= '_') goto yy117;
+                       if (yych <= 'Z') goto yy118;
+                       if (yych >= '_') goto yy118;
                } else {
-                       if (yych <= '`') goto yy119;
-                       if (yych <= 'z') goto yy117;
+                       if (yych <= '`') goto yy120;
+                       if (yych <= 'z') goto yy118;
                }
        }
-yy119:
+yy120:
        {
                                        cur = cursor;
                                        tok+= 5; /* skip "re2c:" */
@@ -814,159 +785,184 @@ yy119:
                                        yylval.str = new Str(token());
                                        return CONFIG;
                                }
-yy120:
+yy121:
        yych = *++YYCURSOR;
        if (yych <= '^') {
-               if (yych <= '@') goto yy112;
-               if (yych <= 'Z') goto yy122;
-               goto yy112;
+               if (yych <= '@') goto yy122;
+               if (yych <= 'Z') goto yy124;
        } else {
-               if (yych == '`') goto yy112;
-               if (yych <= 'z') goto yy122;
-               goto yy112;
+               if (yych == '`') goto yy122;
+               if (yych <= 'z') goto yy124;
        }
-yy121:
+yy122:
+       YYCURSOR = YYMARKER;
+       if (yyaccept <= 3) {
+               if (yyaccept <= 1) {
+                       if (yyaccept <= 0) {
+                               goto yy72;
+                       } else {
+                               goto yy80;
+                       }
+               } else {
+                       if (yyaccept <= 2) {
+                               goto yy82;
+                       } else {
+                               goto yy84;
+                       }
+               }
+       } else {
+               if (yyaccept <= 5) {
+                       if (yyaccept <= 4) {
+                               goto yy76;
+                       } else {
+                               goto yy120;
+                       }
+               } else {
+                       goto yy169;
+               }
+       }
+yy123:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if (yych <= '^') {
-               if (yych <= '@') goto yy112;
-               if (yych <= 'Z') goto yy117;
-               goto yy112;
+               if (yych <= '@') goto yy122;
+               if (yych <= 'Z') goto yy118;
+               goto yy122;
        } else {
-               if (yych == '`') goto yy112;
-               if (yych <= 'z') goto yy117;
-               goto yy112;
+               if (yych == '`') goto yy122;
+               if (yych <= 'z') goto yy118;
+               goto yy122;
        }
-yy122:
+yy124:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if (yych <= 'Z') {
-               if (yych <= '/') goto yy119;
-               if (yych <= '9') goto yy122;
-               if (yych <= '@') goto yy119;
-               goto yy122;
+               if (yych <= '/') goto yy120;
+               if (yych <= '9') goto yy124;
+               if (yych <= '@') goto yy120;
+               goto yy124;
        } else {
                if (yych <= '_') {
-                       if (yych <= '^') goto yy119;
-                       goto yy122;
+                       if (yych <= '^') goto yy120;
+                       goto yy124;
                } else {
-                       if (yych <= '`') goto yy119;
-                       if (yych <= 'z') goto yy122;
-                       goto yy119;
+                       if (yych <= '`') goto yy120;
+                       if (yych <= 'z') goto yy124;
+                       goto yy120;
                }
        }
-yy124:
+yy126:
        ++YYCURSOR;
        {
                                        RETURN(SETUP);
                                }
-yy126:
+yy128:
        YYCTXMARKER = YYCURSOR + 1;
        yych = *++YYCURSOR;
-       goto yy128;
-yy127:
+       goto yy130;
+yy129:
        ++YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
-yy128:
+yy130:
        if (yych <= '9') {
                if (yych <= 0x09) {
-                       if (yych <= 0x08) goto yy112;
-                       goto yy127;
+                       if (yych <= 0x08) goto yy122;
+                       goto yy129;
                } else {
-                       if (yych == ' ') goto yy127;
-                       goto yy112;
+                       if (yych == ' ') goto yy129;
+                       goto yy122;
                }
        } else {
                if (yych <= '=') {
-                       if (yych <= ':') goto yy132;
-                       if (yych <= '<') goto yy112;
-                       goto yy131;
+                       if (yych <= ':') goto yy134;
+                       if (yych <= '<') goto yy122;
+                       goto yy133;
                } else {
-                       if (yych != '{') goto yy112;
+                       if (yych != '{') goto yy122;
                }
        }
-yy129:
+yy131:
        ++YYCURSOR;
        YYCURSOR = YYCTXMARKER;
        {
                                        RETURN(NOCOND);
                                }
-yy131:
+yy133:
        yych = *++YYCURSOR;
-       if (yych == '>') goto yy129;
-       goto yy112;
-yy132:
+       if (yych == '>') goto yy131;
+       goto yy122;
+yy134:
        yych = *++YYCURSOR;
-       if (yych == '=') goto yy129;
-       goto yy112;
-yy133:
+       if (yych == '=') goto yy131;
+       goto yy122;
+yy135:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy134:
+yy136:
        if (yybm[0+yych] & 16) {
-               goto yy133;
+               goto yy135;
        }
-       if (yych <= '[') goto yy112;
-       if (yych <= '\\') goto yy137;
-       goto yy138;
-yy135:
+       if (yych <= '[') goto yy122;
+       if (yych <= '\\') goto yy139;
+       goto yy140;
+yy137:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if (yych <= '[') {
-               if (yych == 0x0A) goto yy112;
-               goto yy135;
+               if (yych == 0x0A) goto yy122;
+               goto yy137;
        } else {
-               if (yych <= '\\') goto yy140;
-               if (yych <= ']') goto yy141;
-               goto yy135;
+               if (yych <= '\\') goto yy142;
+               if (yych <= ']') goto yy143;
+               goto yy137;
        }
-yy137:
+yy139:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if (yych == 0x0A) goto yy112;
-       goto yy133;
-yy138:
+       if (yych == 0x0A) goto yy122;
+       goto yy135;
+yy140:
        ++YYCURSOR;
        {
                                        cur = cursor;
                                        yylval.regexp = ranToRE(token());
                                        return RANGE;
                                }
-yy140:
+yy142:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if (yych == 0x0A) goto yy112;
-       goto yy135;
-yy141:
+       if (yych == 0x0A) goto yy122;
+       goto yy137;
+yy143:
        ++YYCURSOR;
        {
                                        cur = cursor;
                                        yylval.regexp = invToRE(token());
                                        return RANGE;
                                }
-yy143:
+yy145:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy144:
+yy146:
        if (yybm[0+yych] & 32) {
-               goto yy143;
+               goto yy145;
        }
-       if (yych <= '&') goto yy112;
-       if (yych <= '\'') goto yy146;
+       if (yych <= '&') goto yy122;
+       if (yych <= '\'') goto yy148;
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if (yych == 0x0A) goto yy112;
-       goto yy143;
-yy146:
+       if (yych == 0x0A) goto yy122;
+       goto yy145;
+yy148:
        ++YYCURSOR;
        {
                                        cur = cursor;
@@ -980,22 +976,22 @@ yy146:
                                        }
                                        return STRING;
                                }
-yy148:
+yy150:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy149:
+yy151:
        if (yybm[0+yych] & 64) {
-               goto yy148;
+               goto yy150;
        }
-       if (yych <= '!') goto yy112;
-       if (yych <= '"') goto yy151;
+       if (yych <= '!') goto yy122;
+       if (yych <= '"') goto yy153;
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if (yych == 0x0A) goto yy112;
-       goto yy148;
-yy151:
+       if (yych == 0x0A) goto yy122;
+       goto yy150;
+yy153:
        ++YYCURSOR;
        {
                                        cur = cursor;
@@ -1009,120 +1005,120 @@ yy151:
                                        }
                                        return STRING;
                                }
-yy153:
+yy155:
        ++YYCURSOR;
        {
                                        tok = cursor;
                                        RETURN(0);
                                }
-yy155:
+yy157:
        ++YYCURSOR;
        {
                                        depth = 1;
                                        goto comment;
                                }
-yy157:
+yy159:
        ++YYCURSOR;
-       if ((yych = *YYCURSOR) == '>') goto yy159;
+       if ((yych = *YYCURSOR) == '>') goto yy161;
        {
                                        cur = cursor;
                                        tok+= 2; /* skip ":=" */
                                        depth = 0;
                                        goto code;
                                }
-yy159:
+yy161:
        ++YYCURSOR;
        YYCURSOR = YYCTXMARKER;
        {
                                        RETURN(*tok);
                                }
-yy161:
+yy163:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if (yych <= '^') {
                if (yych <= '9') {
-                       if (yych <= '/') goto yy112;
-                       goto yy161;
+                       if (yych <= '/') goto yy122;
+                       goto yy163;
                } else {
-                       if (yych <= '@') goto yy112;
-                       if (yych <= 'Z') goto yy161;
-                       goto yy112;
+                       if (yych <= '@') goto yy122;
+                       if (yych <= 'Z') goto yy163;
+                       goto yy122;
                }
        } else {
                if (yych <= 'z') {
-                       if (yych == '`') goto yy112;
-                       goto yy161;
+                       if (yych == '`') goto yy122;
+                       goto yy163;
                } else {
-                       if (yych == '}') goto yy180;
-                       goto yy112;
+                       if (yych == '}') goto yy182;
+                       goto yy122;
                }
        }
-yy163:
+yy165:
        yych = *++YYCURSOR;
-       if (yych == ',') goto yy177;
-       goto yy165;
-yy164:
+       if (yych == ',') goto yy179;
+       goto yy167;
+yy166:
        ++YYCURSOR;
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
-yy165:
+yy167:
        if (yybm[0+yych] & 128) {
-               goto yy164;
+               goto yy166;
        }
-       if (yych == ',') goto yy170;
-       if (yych == '}') goto yy168;
-       goto yy112;
-yy166:
+       if (yych == ',') goto yy172;
+       if (yych == '}') goto yy170;
+       goto yy122;
+yy168:
        ++YYCURSOR;
-yy167:
+yy169:
        {
                                        fatal("illegal closure form, use '{n}', '{n,}', '{n,m}' where n and m are numbers");
                                }
-yy168:
+yy170:
        ++YYCURSOR;
        {
                                        yylval.extop.minsize = atoi((char *)tok+1);
                                        yylval.extop.maxsize = atoi((char *)tok+1);
                                        RETURN(CLOSESIZE);
                                }
-yy170:
-       yyaccept = 7;
+yy172:
+       yyaccept = 6;
        yych = *(YYMARKER = ++YYCURSOR);
-       if (yych <= '/') goto yy167;
-       if (yych <= '9') goto yy173;
-       if (yych != '}') goto yy167;
+       if (yych <= '/') goto yy169;
+       if (yych <= '9') goto yy175;
+       if (yych != '}') goto yy169;
        ++YYCURSOR;
        {
                                        yylval.extop.minsize = atoi((char *)tok+1);
                                        yylval.extop.maxsize = -1;
                                        RETURN(CLOSESIZE);
                                }
-yy173:
+yy175:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if (yych <= '/') goto yy112;
-       if (yych <= '9') goto yy173;
-       if (yych != '}') goto yy112;
+       if (yych <= '/') goto yy122;
+       if (yych <= '9') goto yy175;
+       if (yych != '}') goto yy122;
        ++YYCURSOR;
        {
                                        yylval.extop.minsize = atoi((char *)tok+1);
                                        yylval.extop.maxsize = MAX(yylval.extop.minsize,atoi(strchr((char *)tok, ',')+1));
                                        RETURN(CLOSESIZE);
                                }
-yy177:
-       yyaccept = 7;
+yy179:
+       yyaccept = 6;
        yych = *(YYMARKER = ++YYCURSOR);
-       if (yych <= '/') goto yy167;
-       if (yych <= '9') goto yy173;
-       if (yych != '}') goto yy167;
+       if (yych <= '/') goto yy169;
+       if (yych <= '9') goto yy175;
+       if (yych != '}') goto yy169;
        ++YYCURSOR;
        {
                                        yylval.op = '*';
                                        RETURN(CLOSE);
                                }
-yy180:
+yy182:
        ++YYCURSOR;
        {
                                        if (!FFlag) {
@@ -1177,20 +1173,20 @@ code:
        yych = *YYCURSOR;
        if (yych <= '&') {
                if (yych <= 0x0A) {
-                       if (yych <= 0x00) goto yy190;
-                       if (yych <= 0x09) goto yy192;
-                       goto yy188;
+                       if (yych <= 0x00) goto yy192;
+                       if (yych <= 0x09) goto yy194;
+                       goto yy190;
                } else {
-                       if (yych == '"') goto yy194;
-                       goto yy192;
+                       if (yych == '"') goto yy196;
+                       goto yy194;
                }
        } else {
                if (yych <= '{') {
-                       if (yych <= '\'') goto yy195;
-                       if (yych <= 'z') goto yy192;
-                       goto yy186;
+                       if (yych <= '\'') goto yy197;
+                       if (yych <= 'z') goto yy194;
+                       goto yy188;
                } else {
-                       if (yych != '}') goto yy192;
+                       if (yych != '}') goto yy194;
                }
        }
        ++YYCURSOR;
@@ -1207,7 +1203,7 @@ code:
                                        }
                                        goto code;
                                }
-yy186:
+yy188:
        ++YYCURSOR;
        {
                                        if (depth == 0)
@@ -1220,17 +1216,17 @@ yy186:
                                        }
                                        goto code;
                                }
-yy188:
+yy190:
        YYCTXMARKER = YYCURSOR + 1;
        ++YYCURSOR;
        if ((yych = *YYCURSOR) <= 0x0C) {
-               if (yych <= 0x08) goto yy189;
-               if (yych <= 0x0A) goto yy203;
+               if (yych <= 0x08) goto yy191;
+               if (yych <= 0x0A) goto yy205;
        } else {
-               if (yych <= 0x0D) goto yy203;
-               if (yych == ' ') goto yy203;
+               if (yych <= 0x0D) goto yy205;
+               if (yych == ' ') goto yy205;
        }
-yy189:
+yy191:
        {
                                        if (depth == 0)
                                        {
@@ -1251,7 +1247,7 @@ yy189:
                                        cline++;
                                        goto code;
                                }
-yy190:
+yy192:
        ++YYCURSOR;
        {
                                        if (cursor == eof)
@@ -1264,56 +1260,56 @@ yy190:
                                        }
                                        goto code;
                                }
-yy192:
+yy194:
        ++YYCURSOR;
-yy193:
+yy195:
        {
                                        goto code;
                                }
-yy194:
+yy196:
        yych = *(YYMARKER = ++YYCURSOR);
-       if (yych == 0x0A) goto yy193;
-       goto yy201;
-yy195:
+       if (yych == 0x0A) goto yy195;
+       goto yy203;
+yy197:
        yych = *(YYMARKER = ++YYCURSOR);
-       if (yych == 0x0A) goto yy193;
-       goto yy197;
-yy196:
+       if (yych == 0x0A) goto yy195;
+       goto yy199;
+yy198:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy197:
+yy199:
        if (yybm[0+yych] & 64) {
-               goto yy196;
+               goto yy198;
        }
-       if (yych <= '&') goto yy198;
-       if (yych <= '\'') goto yy192;
-       goto yy199;
-yy198:
+       if (yych <= '&') goto yy200;
+       if (yych <= '\'') goto yy194;
+       goto yy201;
+yy200:
        YYCURSOR = YYMARKER;
-       goto yy193;
-yy199:
+       goto yy195;
+yy201:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if (yych == 0x0A) goto yy198;
-       goto yy196;
-yy200:
+       if (yych == 0x0A) goto yy200;
+       goto yy198;
+yy202:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy201:
+yy203:
        if (yybm[0+yych] & 128) {
-               goto yy200;
+               goto yy202;
        }
-       if (yych <= '!') goto yy198;
-       if (yych <= '"') goto yy192;
+       if (yych <= '!') goto yy200;
+       if (yych <= '"') goto yy194;
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if (yych == 0x0A) goto yy198;
-       goto yy200;
-yy203:
+       if (yych == 0x0A) goto yy200;
+       goto yy202;
+yy205:
        ++YYCURSOR;
        YYCURSOR = YYCTXMARKER;
        {
@@ -1339,17 +1335,17 @@ comment:
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if (yych <= ')') {
-               if (yych == 0x0A) goto yy210;
-               goto yy212;
+               if (yych == 0x0A) goto yy212;
+               goto yy214;
        } else {
-               if (yych <= '*') goto yy207;
-               if (yych == '/') goto yy209;
-               goto yy212;
+               if (yych <= '*') goto yy209;
+               if (yych == '/') goto yy211;
+               goto yy214;
        }
-yy207:
+yy209:
        ++YYCURSOR;
-       if ((yych = *YYCURSOR) == '/') goto yy215;
-yy208:
+       if ((yych = *YYCURSOR) == '/') goto yy217;
+yy210:
        {
                                        if(cursor == eof)
                                        {
@@ -1357,11 +1353,11 @@ yy208:
                                        }
                                        goto comment;
                                }
-yy209:
+yy211:
        yych = *++YYCURSOR;
-       if (yych == '*') goto yy213;
-       goto yy208;
-yy210:
+       if (yych == '*') goto yy215;
+       goto yy210;
+yy212:
        ++YYCURSOR;
        {
                                        if(cursor == eof)
@@ -1372,17 +1368,17 @@ yy210:
                                        cline++;
                                        goto comment;
                                }
-yy212:
+yy214:
        yych = *++YYCURSOR;
-       goto yy208;
-yy213:
+       goto yy210;
+yy215:
        ++YYCURSOR;
        {
                                        ++depth;
                                        fatal("ambiguous /* found");
                                        goto comment;
                                }
-yy215:
+yy217:
        ++YYCURSOR;
        {
                                        if(--depth == 0)
@@ -1438,52 +1434,52 @@ config:
        if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
        yych = *YYCURSOR;
        if (yych <= 0x1F) {
-               if (yych != 0x09) goto yy223;
+               if (yych != 0x09) goto yy225;
        } else {
-               if (yych <= ' ') goto yy219;
-               if (yych == '=') goto yy221;
-               goto yy223;
+               if (yych <= ' ') goto yy221;
+               if (yych == '=') goto yy223;
+               goto yy225;
        }
-yy219:
+yy221:
        ++YYCURSOR;
        yych = *YYCURSOR;
-       goto yy228;
-yy220:
+       goto yy230;
+yy222:
        {
                                        goto config;
                                }
-yy221:
+yy223:
        ++YYCURSOR;
        yych = *YYCURSOR;
-       goto yy226;
-yy222:
+       goto yy228;
+yy224:
        {
                                        iscfg = 2;
                                        cur = cursor;
                                        RETURN('=');
                                }
-yy223:
+yy225:
        ++YYCURSOR;
        {
                                        fatal("missing '='");
                                }
-yy225:
+yy227:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy226:
+yy228:
        if (yybm[0+yych] & 128) {
-               goto yy225;
+               goto yy227;
        }
-       goto yy222;
-yy227:
+       goto yy224;
+yy229:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy228:
-       if (yych == 0x09) goto yy227;
-       if (yych == ' ') goto yy227;
-       goto yy220;
+yy230:
+       if (yych == 0x09) goto yy229;
+       if (yych == ' ') goto yy229;
+       goto yy222;
 }
 
 
@@ -1529,191 +1525,191 @@ value:
        yych = *YYCURSOR;
        if (yych <= '&') {
                if (yych <= 0x0D) {
-                       if (yych <= 0x08) goto yy237;
-                       if (yych <= 0x0A) goto yy231;
-                       if (yych <= 0x0C) goto yy237;
+                       if (yych <= 0x08) goto yy239;
+                       if (yych <= 0x0A) goto yy233;
+                       if (yych <= 0x0C) goto yy239;
                } else {
                        if (yych <= ' ') {
-                               if (yych <= 0x1F) goto yy237;
+                               if (yych <= 0x1F) goto yy239;
                        } else {
-                               if (yych == '"') goto yy239;
-                               goto yy237;
+                               if (yych == '"') goto yy241;
+                               goto yy239;
                        }
                }
        } else {
                if (yych <= '/') {
-                       if (yych <= '\'') goto yy241;
-                       if (yych == '-') goto yy234;
-                       goto yy237;
+                       if (yych <= '\'') goto yy243;
+                       if (yych == '-') goto yy236;
+                       goto yy239;
                } else {
                        if (yych <= '9') {
-                               if (yych <= '0') goto yy232;
-                               goto yy235;
+                               if (yych <= '0') goto yy234;
+                               goto yy237;
                        } else {
-                               if (yych != ';') goto yy237;
+                               if (yych != ';') goto yy239;
                        }
                }
        }
-yy231:
+yy233:
        {
                                        cur = cursor;
                                        yylval.str = new Str(token());
                                        iscfg = 0;
                                        return VALUE;
                                }
-yy232:
+yy234:
        ++YYCURSOR;
        if (yybm[0+(yych = *YYCURSOR)] & 8) {
-               goto yy237;
+               goto yy239;
        }
-yy233:
+yy235:
        {
                                        cur = cursor;
                                        yylval.number = atoi(token().to_string().c_str());
                                        iscfg = 0;
                                        return NUMBER;
                                }
-yy234:
+yy236:
        yych = *++YYCURSOR;
-       if (yych <= '0') goto yy238;
-       if (yych >= ':') goto yy238;
-yy235:
+       if (yych <= '0') goto yy240;
+       if (yych >= ':') goto yy240;
+yy237:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if (yybm[0+yych] & 4) {
-               goto yy235;
+               goto yy237;
        }
        if (yych <= 0x0D) {
-               if (yych <= 0x08) goto yy237;
-               if (yych <= 0x0A) goto yy233;
-               if (yych >= 0x0D) goto yy233;
+               if (yych <= 0x08) goto yy239;
+               if (yych <= 0x0A) goto yy235;
+               if (yych >= 0x0D) goto yy235;
        } else {
                if (yych <= ' ') {
-                       if (yych >= ' ') goto yy233;
+                       if (yych >= ' ') goto yy235;
                } else {
-                       if (yych == ';') goto yy233;
+                       if (yych == ';') goto yy235;
                }
        }
-yy237:
+yy239:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-yy238:
+yy240:
        if (yybm[0+yych] & 8) {
-               goto yy237;
+               goto yy239;
        }
-       goto yy231;
-yy239:
+       goto yy233;
+yy241:
        YYMARKER = ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if (yybm[0+yych] & 16) {
-               goto yy239;
+               goto yy241;
        }
        if (yych <= '!') {
-               if (yych == 0x0A) goto yy231;
-               goto yy249;
-       } else {
-               if (yych <= '"') goto yy237;
-               if (yych <= '[') goto yy249;
+               if (yych == 0x0A) goto yy233;
                goto yy251;
+       } else {
+               if (yych <= '"') goto yy239;
+               if (yych <= '[') goto yy251;
+               goto yy253;
        }
-yy241:
+yy243:
        YYMARKER = ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if (yybm[0+yych] & 32) {
-               goto yy241;
+               goto yy243;
        }
        if (yych <= '&') {
-               if (yych == 0x0A) goto yy231;
+               if (yych == 0x0A) goto yy233;
        } else {
-               if (yych <= '\'') goto yy237;
-               if (yych >= '\\') goto yy246;
+               if (yych <= '\'') goto yy239;
+               if (yych >= '\\') goto yy248;
        }
-yy243:
+yy245:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if (yybm[0+yych] & 64) {
-               goto yy243;
+               goto yy245;
        }
-       if (yych <= '&') goto yy245;
-       if (yych <= '\'') goto yy247;
-       goto yy248;
-yy245:
+       if (yych <= '&') goto yy247;
+       if (yych <= '\'') goto yy249;
+       goto yy250;
+yy247:
        YYCURSOR = YYMARKER;
-       goto yy231;
-yy246:
+       goto yy233;
+yy248:
        YYMARKER = ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if (yych <= 0x0D) {
                if (yych <= 0x09) {
-                       if (yych <= 0x08) goto yy241;
-                       goto yy243;
+                       if (yych <= 0x08) goto yy243;
+                       goto yy245;
                } else {
-                       if (yych <= 0x0A) goto yy231;
-                       if (yych <= 0x0C) goto yy241;
-                       goto yy243;
+                       if (yych <= 0x0A) goto yy233;
+                       if (yych <= 0x0C) goto yy243;
+                       goto yy245;
                }
        } else {
                if (yych <= ' ') {
-                       if (yych <= 0x1F) goto yy241;
-                       goto yy243;
+                       if (yych <= 0x1F) goto yy243;
+                       goto yy245;
                } else {
-                       if (yych == ';') goto yy243;
-                       goto yy241;
+                       if (yych == ';') goto yy245;
+                       goto yy243;
                }
        }
-yy247:
+yy249:
        yych = *++YYCURSOR;
-       goto yy231;
-yy248:
+       goto yy233;
+yy250:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if (yych == 0x0A) goto yy245;
-       goto yy243;
-yy249:
+       if (yych == 0x0A) goto yy247;
+       goto yy245;
+yy251:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if (yybm[0+yych] & 128) {
-               goto yy249;
+               goto yy251;
        }
-       if (yych <= '!') goto yy245;
-       if (yych <= '"') goto yy247;
-       goto yy252;
-yy251:
+       if (yych <= '!') goto yy247;
+       if (yych <= '"') goto yy249;
+       goto yy254;
+yy253:
        YYMARKER = ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
        if (yych <= 0x0D) {
                if (yych <= 0x09) {
-                       if (yych <= 0x08) goto yy239;
-                       goto yy249;
+                       if (yych <= 0x08) goto yy241;
+                       goto yy251;
                } else {
-                       if (yych <= 0x0A) goto yy231;
-                       if (yych <= 0x0C) goto yy239;
-                       goto yy249;
+                       if (yych <= 0x0A) goto yy233;
+                       if (yych <= 0x0C) goto yy241;
+                       goto yy251;
                }
        } else {
                if (yych <= ' ') {
-                       if (yych <= 0x1F) goto yy239;
-                       goto yy249;
+                       if (yych <= 0x1F) goto yy241;
+                       goto yy251;
                } else {
-                       if (yych == ';') goto yy249;
-                       goto yy239;
+                       if (yych == ';') goto yy251;
+                       goto yy241;
                }
        }
-yy252:
+yy254:
        ++YYCURSOR;
        if (YYLIMIT == YYCURSOR) YYFILL(1);
        yych = *YYCURSOR;
-       if (yych == 0x0A) goto yy245;
-       goto yy249;
+       if (yych == 0x0A) goto yy247;
+       goto yy251;
 }
 
 }
index 545483698f90eb68cbdd132e01dc06ad57322f64..531e16beb390d15ea380c51168a3355daf905a19 100644 (file)
@@ -50,7 +50,8 @@
      CONFIG = 266,
      VALUE = 267,
      NUMBER = 268,
-     SETUP = 269
+     SETUP = 269,
+     FID = 270
    };
 #endif
 /* Tokens.  */
@@ -66,6 +67,7 @@
 #define VALUE 267
 #define NUMBER 268
 #define SETUP 269
+#define FID 270
 
 
 
@@ -84,7 +86,7 @@ typedef union YYSTYPE
        re2c::CondList  *clist;
 }
 /* Line 1489 of yacc.c.  */
-#line 88 "y.tab.h"
+#line 90 "y.tab.h"
        YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
index 8b83e5c87048e51fcbc4a531b577d79aa135a12a..8bdd2ee6fab722801f8bdc4796fb0bcd4841f59d 100755 (executable)
@@ -110,7 +110,10 @@ may crash dot.<br /><br /></dd>
 <dd>Generate a scanner with support for storable state. For details see below
 at <b>SCANNER WITH STORABLE STATES</b>.<br /><br /></dd>
 <dt><b>-F</b><dt>
-<dd>Partial support for flex syntax.<br /><br /></dd>
+<dd>Partial support for flex syntax. When this flag is active then named 
+definitions must be surrounded by curly braces and can be defined without an
+equal sign and the terminating semi colon. Instead names are treated as direct
+double quoted strings.<br /><br /></dd>
 <dt><b>-g</b></dt>
 <dd>Generate a scanner that utilizes GCC's computed goto feature. That is re2c
 generates jump tables whenever a decision is of a certain complexity (e.g. a 
@@ -368,6 +371,10 @@ jumps) you can doso by using &lt;! pseudo-rules.
 <dl compact="compact">
 <dd><i>name</i> = <i>regular expression</i>;</dd>
 </dl>
+<p>When <b>-F</b> is active, then named definitions are also of the form:</p>
+<dl compact="compact">
+<dd><i>name</i> <i>regular expression</i></dd>
+</dl>
 <p>Configurations look like named definitions whose names start with
 "<b>re2c:</b>":</p>
 <dl compact="compact">
@@ -420,7 +427,9 @@ context can only be the end of a rule and not part of a named definition.</dd>
 <dt>.</dt>
 <dd>match any character except newline (\n).</dd>
 <dt><i>def</i></dt>
-<dd>matches named definition as specified by <i>def</i>.</dd>
+<dd>matches named definition as specified by <i>def</i> only if <b>-F</b> is
+off. If the switch <b>-F</b> is active then this behaves like it was enclosed
+in double quotes and matches the string <i>def</i>.</dd>
 </dl>
 <br />
 <br />
index 8afdfbc5474a560615bd3811492a6cafa753a9d3..0e2ce189b8063d66c576dde725339992519a7f64 100644 (file)
@@ -136,12 +136,12 @@ void setup_rule(CondList *clist, Token *code)
 };
 
 %token         CLOSESIZE       CLOSE   STAR    NOCOND  ID      CODE    RANGE   STRING
-%token         CONFIG          VALUE   NUMBER  SETUP
+%token         CONFIG          VALUE   NUMBER  SETUP   FID
 
 %type  <op>            CLOSE   STAR    SETUP
 %type  <op>            close
 %type  <extop>         CLOSESIZE
-%type  <symbol>        ID
+%type  <symbol>        ID      FID
 %type  <token>         CODE
 %type  <regexp>        RANGE   STRING
 %type  <regexp>        rule    look    expr    diff    term    factor  primary
@@ -164,16 +164,32 @@ spec:
 decl:
                ID '=' expr ';'
                {
-                       if($1->re)
+                       if ($1->re)
                        {
                                in->fatal("sym already defined");
                        }
                        $1->re = $3;
                }
+       |       FID expr
+               {
+                       if ($1->re)
+                       {
+                               in->fatal("sym already defined");
+                       }
+                       $1->re = $2;
+               }
+       |       ID '=' expr '/'
+               {
+                       in->fatal("trailing contexts are not allowed in named definitions");
+               }
        |       ID '=' expr '/'
                {
                        in->fatal("trailing contexts are not allowed in named definitions");
                }
+       |       FID expr '/'
+               {
+                       in->fatal("trailing contexts are not allowed in named definitions");
+               }
        |       CONFIG '=' VALUE ';'
                {
                        in->config(*$1, *$3);
index 3fff0feb96949b4d2d5c676aee9b1c76caa2dc92..bab87e75ca0e23a4f4e5c9bd631d7241f5a2ce67 100644 (file)
@@ -122,7 +122,10 @@ Generate a scanner with support for storable state.
 For details see below at \fBSCANNER WITH STORABLE STATES\fP.
 .TP
 \fB-F\fP
-Partial support for flex syntax.
+Partial support for flex syntax. When this flag is active then named
+definitions must be surrounded by curly braces and can be defined without an
+equal sign and the terminating semi colon. Instead names are treated as direct
+double quoted strings.
 .TP
 \fB-g\fP
 Generate a scanner that utilizes GCC's computed goto feature. That is \*(re
@@ -435,6 +438,12 @@ Named definitions are of the form:
 \fIname\fP \fC=\fP \fI\*(rx\fP\fC;\fP
 .RE
 .LP
+When \fB-F\fP is active, then named definitions are also of the form:
+.P
+.RS
+\fIname\fP \fI\*(rx\fP
+.RE
+.LP
 Configurations look like named definitions whose names start 
 with "\fBre2c:\fP":
 .P
@@ -511,7 +520,9 @@ matches \fIr\fP at least \fIn\fP but not more than \fIm\fP times.
 match any character except newline (\\n).
 .TP
 \fIdef\fP
-matches named definition as specified by \fIdef\fP.
+matches named definition as specified by \fIdef\fP only if \fB-F\fP is
+off. If the switch \fB-F\fP is active then this behaves like it was enclosed
+in double quotes and matches the string \fIdef\fP.
 .LP
 Character classes and string literals may contain octoal or hexadecimal 
 character definitions and the following set of escape sequences (\fB\\n\fP,
index 7cf36e73c775456963d60db0ffa600f2cb4f6fc9..a19113da6320da86e1dc0df51eaf2fd9d7257161 100644 (file)
@@ -387,7 +387,20 @@ scan:
                                        return CONFIG;
                                }
 
-       name / (space* ("="|">"|","))   {
+       name / (space+ [^=>,])  {
+                                       if (FFlag)
+                                       {
+                                               cur = ptr > tok ? ptr - 1 : cursor;
+                                               yylval.symbol = Symbol::find(token());
+                                               return FID;
+                                       } else {
+                                               cur = ptr > tok ? ptr - 1 : cursor;
+                                               yylval.symbol = Symbol::find(token());
+                                               return ID;
+                                       }
+                               }
+
+       name / (space* [=>,])   {
                                        cur = ptr > tok ? ptr - 1 : cursor;
                                        yylval.symbol = Symbol::find(token());
                                        return ID;