]> granicus.if.org Git - apache/commitdiff
Follow up to rr1810605 and r1811104.
authorYann Ylavic <ylavic@apache.org>
Wed, 4 Oct 2017 16:20:02 +0000 (16:20 +0000)
committerYann Ylavic <ylavic@apache.org>
Wed, 4 Oct 2017 16:20:02 +0000 (16:20 +0000)
Generated parser files.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1811105 13f79535-47bb-0310-9956-ffa450edef68

server/util_expr_parse.c
server/util_expr_parse.h
server/util_expr_scan.c

index 003bf94c21c94c7f3bf07907daf62f7be815f71a..17748e913f08b6243edde29913403e46959baca5 100644 (file)
@@ -124,7 +124,7 @@ extern int ap_expr_yydebug;
      T_REG_MATCH = 268,
      T_REG_SUBST = 269,
      T_REG_FLAGS = 270,
-     T_REG_REF = 271,
+     T_BACKREF = 271,
      T_OP_UNARY = 272,
      T_OP_BINARY = 273,
      T_STR_BEGIN = 274,
@@ -149,11 +149,12 @@ extern int ap_expr_yydebug;
      T_OP_STR_GT = 293,
      T_OP_STR_GE = 294,
      T_OP_CONCAT = 295,
-     T_OP_SPLIT = 296,
-     T_OP_JOIN = 297,
-     T_OP_OR = 298,
-     T_OP_AND = 299,
-     T_OP_NOT = 300
+     T_OP_JOIN = 296,
+     T_OP_SPLIT = 297,
+     T_OP_SUB = 298,
+     T_OP_OR = 299,
+     T_OP_AND = 300,
+     T_OP_NOT = 301
    };
 #endif
 
@@ -170,7 +171,7 @@ typedef union YYSTYPE
 
 
 /* Line 387 of yacc.c  */
-#line 174 "util_expr_parse.c"
+#line 175 "util_expr_parse.c"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -196,7 +197,7 @@ int ap_expr_yyparse ();
 
 /* Copy the second part of user declarations.  */
 /* Line 390 of yacc.c  */
-#line 116 "util_expr_parse.y"
+#line 118 "util_expr_parse.y"
 
 #include "util_expr_private.h"
 #define yyscanner ctx->scanner
@@ -204,7 +205,7 @@ int ap_expr_yyparse ();
 int ap_expr_yylex(YYSTYPE *lvalp, void *scanner);
 
 /* Line 390 of yacc.c  */
-#line 208 "util_expr_parse.c"
+#line 209 "util_expr_parse.c"
 
 #ifdef short
 # undef short
@@ -431,22 +432,22 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  30
+#define YYFINAL  31
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   300
+#define YYLAST   277
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  66
+#define YYNTOKENS  69
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  17
+#define YYNNTS  18
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  68
+#define YYNRULES  71
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  139
+#define YYNSTATES  154
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   314
+#define YYMAXUTOK   317
 
 #define YYTRANSLATE(YYX)                                               \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -458,15 +459,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,
-      60,    61,     2,     2,    64,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,    65,     2,
+      63,    64,     2,     2,    68,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    67,     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,     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,    62,     2,    63,     2,     2,     2,     2,
+       2,     2,     2,    65,     2,    66,     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,
@@ -485,62 +486,66 @@ static const yytype_uint8 yytranslate[] =
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59
+      55,    56,    57,    58,    59,    60,    61,    62
 };
 
 #if YYDEBUG
 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
    YYRHS.  */
-static const yytype_uint8 yyprhs[] =
+static const yytype_uint16 yyprhs[] =
 {
-       0,     0,     3,     6,     9,    11,    13,    15,    18,    22,
-      26,    28,    31,    35,    39,    41,    45,    49,    53,    57,
-      61,    65,    69,    73,    77,    81,    85,    89,    93,    97,
-     101,   103,   107,   111,   115,   119,   121,   125,   127,   130,
-     132,   134,   136,   138,   142,   148,   152,   156,   158,   161,
-     165,   169,   173,   175,   177,   179,   182,   187,   194,   198,
-     202,   207,   212,   214,   216,   218,   220,   225,   230
+       0,     0,     3,     6,     9,    11,    13,    16,    18,    20,
+      22,    25,    29,    33,    35,    38,    42,    46,    48,    52,
+      56,    60,    64,    68,    72,    76,    80,    84,    88,    92,
+      96,   100,   104,   108,   110,   113,   117,   121,   123,   125,
+     127,   129,   133,   135,   137,   141,   145,   147,   149,   153,
+     159,   163,   167,   169,   174,   179,   184,   189,   196,   199,
+     204,   209,   216,   221,   228,   233,   240,   242,   246,   250,
+     255,   257
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int8 yyrhs[] =
 {
-      67,     0,    -1,     5,    68,    -1,     6,    72,    -1,     7,
-      -1,     3,    -1,     4,    -1,    45,    68,    -1,    68,    43,
-      68,    -1,    68,    44,    68,    -1,    69,    -1,    17,    75,
-      -1,    75,    18,    75,    -1,    60,    68,    61,    -1,     7,
-      -1,    75,    25,    75,    -1,    75,    26,    75,    -1,    75,
-      27,    75,    -1,    75,    28,    75,    -1,    75,    29,    75,
-      -1,    75,    30,    75,    -1,    75,    34,    75,    -1,    75,
-      35,    75,    -1,    75,    36,    75,    -1,    75,    37,    75,
-      -1,    75,    38,    75,    -1,    75,    39,    75,    -1,    75,
-      33,    70,    -1,    75,    31,    76,    -1,    75,    32,    76,
-      -1,    81,    -1,    75,    31,    78,    -1,    70,    31,    79,
-      -1,    62,    71,    63,    -1,    60,    70,    61,    -1,    75,
-      -1,    75,    64,    71,    -1,    73,    -1,    72,    73,    -1,
-       7,    -1,    10,    -1,    74,    -1,    80,    -1,    21,     9,
-      22,    -1,    21,     9,    65,    72,    22,    -1,    23,    75,
-      24,    -1,    23,    68,    24,    -1,     8,    -1,    19,    20,
-      -1,    19,    72,    20,    -1,    75,    40,    75,    -1,    75,
-      31,    77,    -1,    74,    -1,    80,    -1,    82,    -1,    42,
-      70,    -1,    42,    70,    64,    75,    -1,    42,    60,    70,
-      64,    75,    61,    -1,    60,    75,    61,    -1,    11,    13,
-      15,    -1,    12,    13,    72,    15,    -1,    41,    13,    72,
-      15,    -1,    76,    -1,    77,    -1,    78,    -1,    16,    -1,
-       9,    60,    75,    61,    -1,     9,    60,    75,    61,    -1,
-       9,    60,    71,    61,    -1
+      70,     0,    -1,     6,    71,    -1,     5,    72,    -1,     7,
+      -1,    76,    -1,    71,    76,    -1,     7,    -1,     3,    -1,
+       4,    -1,    46,    72,    -1,    72,    44,    72,    -1,    72,
+      45,    72,    -1,    73,    -1,    17,    74,    -1,    74,    18,
+      74,    -1,    63,    72,    64,    -1,     7,    -1,    74,    25,
+      74,    -1,    74,    26,    74,    -1,    74,    27,    74,    -1,
+      74,    28,    74,    -1,    74,    29,    74,    -1,    74,    30,
+      74,    -1,    74,    34,    74,    -1,    74,    35,    74,    -1,
+      74,    36,    74,    -1,    74,    37,    74,    -1,    74,    38,
+      74,    -1,    74,    39,    74,    -1,    74,    31,    84,    -1,
+      74,    32,    84,    -1,    74,    33,    75,    -1,     8,    -1,
+      19,    20,    -1,    19,    71,    20,    -1,    74,    40,    74,
+      -1,    77,    -1,    80,    -1,    81,    -1,    78,    -1,    63,
+      74,    64,    -1,    82,    -1,    79,    -1,    65,    83,    66,
+      -1,    63,    75,    64,    -1,    10,    -1,    77,    -1,    21,
+       9,    22,    -1,    21,     9,    67,    71,    22,    -1,    23,
+      72,    24,    -1,    23,    74,    24,    -1,    16,    -1,     9,
+      63,    74,    64,    -1,     9,    63,    83,    64,    -1,     9,
+      63,    74,    64,    -1,    43,    85,    68,    74,    -1,    43,
+      63,    85,    68,    74,    64,    -1,    41,    75,    -1,    41,
+      63,    75,    64,    -1,    41,    75,    68,    74,    -1,    41,
+      63,    75,    68,    74,    64,    -1,    42,    86,    68,    75,
+      -1,    42,    63,    86,    68,    75,    64,    -1,    42,    86,
+      68,    74,    -1,    42,    63,    86,    68,    74,    64,    -1,
+      74,    -1,    74,    68,    83,    -1,    11,    13,    15,    -1,
+      12,    13,    71,    15,    -1,    84,    -1,    85,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
+static const yytype_uint8 yyrline[] =
 {
-       0,   126,   126,   127,   128,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     160,   161,   162,   163,   164,   167,   168,   171,   172,   173,
-     176,   177,   178,   181,   182,   183,   184,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   198,   201,   204,   207,
-     216,   225,   242,   243,   244,   247,   254,   258,   259
+       0,   128,   128,   129,   130,   133,   134,   135,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   178,   179,   180,   181,   184,   185,   188,   189,
+     190,   191,   192,   195,   196,   199,   203,   204,   207,   208,
+     209,   210,   213,   214,   215,   216,   219,   220,   223,   232,
+     241,   242
 };
 #endif
 
@@ -552,9 +557,9 @@ static const char *const yytname[] =
   "$end", "error", "$undefined", "\"true\"", "\"false\"",
   "\"boolean expression\"", "\"string expression\"", "\"error token\"",
   "\"number\"", "\"identifier\"", "\"string literal\"",
-  "\"matching regex\"", "\"substitution regex\"",
-  "\"pattern of the regex\"", "\"replacement of the regex\"",
-  "\"pattern flags of the regex\"", "\"capture reference in the regex\"",
+  "\"start of matching regex\"", "\"start of substitution regex\"",
+  "\"pattern of the regex\"", "\"substitution of the regex\"",
+  "\"pattern flags of the regex\"", "\"regex back reference\"",
   "\"unary operator\"", "\"binary operator\"", "\"start of string\"",
   "\"end of string\"", "\"start of variable name\"",
   "\"end of variable name\"", "\"start of variable expression\"",
@@ -565,15 +570,16 @@ static const char *const yytname[] =
   "\"contained in\"", "\"string equal\"", "\"string not equal\"",
   "\"string less than\"", "\"string less or equal\"",
   "\"string greater than\"", "\"string greater or equal\"",
-  "\"string concatenation\"", "\"split operator\"", "\"join operator\"",
-  "\"logical or\"", "\"logical and\"", "\"logical not\"", "\"condition\"",
-  "\"comparison\"", "\"string function\"", "\"list function\"",
-  "\"list of words\"", "\"tuple of words\"", "\"word\"", "\"string\"",
-  "\"substring\"", "\"variable\"", "\"regex substitution\"",
-  "\"regex split\"", "\"regex any\"", "\"regex capture reference\"", "'('",
-  "')'", "'{'", "'}'", "','", "':'", "$accept", "root", "cond", "comp",
-  "wordlist", "words", "string", "substr", "var", "word", "regex",
-  "regsub", "regsplit", "regany", "regref", "lstfunc", "strfunc", YY_NULL
+  "\"string concatenation\"", "\"join operator\"", "\"split operator\"",
+  "\"substitute operator\"", "\"logical or\"", "\"logical and\"",
+  "\"logical not\"", "\"condition\"", "\"comparison\"",
+  "\"string function\"", "\"list function\"", "\"list\"", "\"words\"",
+  "\"word\"", "\"string\"", "\"substring\"", "\"variable\"",
+  "\"match regex\"", "\"substitution regex\"", "\"any regex\"",
+  "\"split\"", "\"join\"", "\"sub\"", "'('", "')'", "'{'", "'}'", "':'",
+  "','", "$accept", "expr", "string", "cond", "comp", "word", "list",
+  "substr", "var", "strfunc", "listfunc", "sub", "join", "split", "words",
+  "regex", "regsub", "regany", YY_NULL
 };
 #endif
 
@@ -588,32 +594,34 @@ static const yytype_uint16 yytoknum[] =
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-      40,    41,   123,   125,    44,    58
+     315,   316,   317,    40,    41,   123,   125,    58,    44
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    66,    67,    67,    67,    68,    68,    68,    68,    68,
-      68,    68,    68,    68,    68,    69,    69,    69,    69,    69,
-      69,    69,    69,    69,    69,    69,    69,    69,    69,    69,
-      70,    70,    70,    70,    70,    71,    71,    72,    72,    72,
-      73,    73,    73,    74,    74,    74,    74,    75,    75,    75,
-      75,    75,    75,    75,    75,    75,    75,    75,    75,    76,
-      77,    78,    79,    79,    79,    80,    81,    82,    82
+       0,    69,    70,    70,    70,    71,    71,    71,    72,    72,
+      72,    72,    72,    72,    72,    72,    72,    72,    73,    73,
+      73,    73,    73,    73,    73,    73,    73,    73,    73,    73,
+      73,    73,    73,    74,    74,    74,    74,    74,    74,    74,
+      74,    74,    75,    75,    75,    75,    76,    76,    77,    77,
+      77,    77,    77,    78,    78,    79,    80,    80,    81,    81,
+      81,    81,    82,    82,    82,    82,    83,    83,    84,    85,
+      86,    86
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
-       0,     2,     2,     2,     1,     1,     1,     2,     3,     3,
-       1,     2,     3,     3,     1,     3,     3,     3,     3,     3,
+       0,     2,     2,     2,     1,     1,     2,     1,     1,     1,
+       2,     3,     3,     1,     2,     3,     3,     1,     3,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       1,     3,     3,     3,     3,     1,     3,     1,     2,     1,
-       1,     1,     1,     3,     5,     3,     3,     1,     2,     3,
-       3,     3,     1,     1,     1,     2,     4,     6,     3,     3,
-       4,     4,     1,     1,     1,     1,     4,     4,     4
+       3,     3,     3,     1,     2,     3,     3,     1,     1,     1,
+       1,     3,     1,     1,     3,     3,     1,     1,     3,     5,
+       3,     3,     1,     4,     4,     4,     4,     6,     2,     4,
+       4,     6,     4,     6,     4,     6,     1,     3,     3,     4,
+       1,     1
 };
 
 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
@@ -621,55 +629,59 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,     0,     4,     0,     5,     6,    14,    47,     0,
-      65,     0,     0,     0,     0,     0,     0,     0,     2,    10,
-      52,     0,    53,    54,    39,    40,     3,    37,    41,    42,
-       1,     0,     0,    11,    48,     0,     0,     0,     0,     0,
-       0,     0,    55,     0,    30,     7,     0,     0,     0,     0,
+       0,     0,     0,     4,     0,     8,     9,    17,    33,     0,
+      52,     0,     0,     0,     0,     0,     0,     0,     0,     3,
+      13,     0,    37,    40,    38,    39,     7,    46,     2,     5,
+      47,     1,     0,     0,    14,    34,     0,     0,     0,     0,
+       0,     0,     0,     0,    58,    43,    42,     0,     0,     0,
+      10,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    38,     0,     0,
-       0,     0,    49,    43,     0,    46,    45,     0,     0,     0,
-       0,     0,    35,     0,     0,     0,    13,    58,     8,     9,
-      12,    15,    16,    17,    18,    19,    20,     0,     0,    28,
-      51,    29,    27,    21,    22,    23,    24,    25,    26,    50,
-      68,    67,     0,     0,     0,     0,    34,     0,    33,     0,
-      62,    63,    64,    32,    56,    31,     0,     0,    36,    44,
-      66,     0,     0,    59,     0,    57,     0,    60,    61
+       0,     0,     6,     0,     0,     0,    35,    48,     0,    50,
+      51,     0,     0,     0,    70,    71,     0,     0,     0,    66,
+       0,     0,     0,     0,     0,    16,    41,    11,    12,    15,
+      18,    19,    20,    21,    22,    23,    30,    31,    32,    24,
+      25,    26,    27,    28,    29,    36,    53,     0,    54,     0,
+       0,     0,     0,     0,     0,    45,     0,    44,    60,     0,
+       0,    56,    67,    49,    55,    68,     0,     0,     0,    64,
+      62,    45,     0,    69,     0,     0,     0,     0,    61,    57,
+      65,    63,     0,    53
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int8 yydefgoto[] =
 {
-      -1,     4,    18,    19,    42,    68,    26,    27,    20,    21,
-      99,   100,   122,   123,    22,    44,    23
+      -1,     4,    28,    19,    20,    21,   124,    29,    22,    23,
+      45,    24,    25,    46,    74,    84,    85,    86
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -46
+#define YYPACT_NINF -51
 static const yytype_int16 yypact[] =
 {
-     257,   136,   277,   -46,    29,   -46,   -46,   -46,   -46,   -29,
-     -46,   164,   216,    39,   136,     7,   136,   136,    27,   -46,
-     -46,   243,   -46,   -46,   -46,   -46,   276,   -46,   -46,   -46,
-     -46,   164,   164,   -22,   -46,   100,   -18,    75,   220,     8,
-     142,   164,    -9,    19,   -46,   -46,     0,   182,   136,   136,
-     164,   164,   164,   164,   164,   164,   164,    83,    47,   142,
-     164,   164,   164,   164,   164,   164,   164,   -46,    21,   107,
-       1,    48,   -46,   -46,   277,   -46,   -46,   164,   142,    32,
-      66,    37,   -19,    42,   164,    -6,   -46,   -46,    27,    57,
-     -22,   -22,   -22,   -22,   -22,   -22,   -22,    91,    92,   -46,
-     -46,   -46,    77,   -22,   -22,   -22,   -22,   -22,   -22,   -22,
-     -46,   -46,   164,   154,   129,   -24,   -46,   164,   -46,   101,
-     -46,   -46,   -46,   -46,   -22,   -46,   109,   277,   -46,   -46,
-     -46,    67,   277,   -46,   176,   -46,   219,   -46,   -46
+     154,   126,   254,   -51,    23,   -51,   -51,   -51,   -51,   -38,
+     -51,    53,   161,    25,   126,     0,     5,   126,   126,    34,
+     -51,   220,   -51,   -51,   -51,   -51,   -51,   -51,   169,   -51,
+     -51,   -51,    53,    53,    -4,   -51,    10,     6,    -5,   196,
+      18,     4,     1,    53,   -15,   -51,   -51,    73,    76,    32,
+     -51,   112,   173,   126,   126,    53,    53,    53,    53,    53,
+      53,    53,    93,    93,     1,    53,    53,    53,    53,    53,
+      53,    53,   -51,   -27,    43,    44,   -51,   -51,   254,   -51,
+     -51,    53,    96,    81,   -51,   -51,    52,     1,   -50,   -16,
+      51,    53,   254,    54,    53,   -51,   -51,    79,   -51,    -4,
+      -4,    -4,    -4,    -4,    -4,    -4,   -51,   -51,   -51,    -4,
+      -4,    -4,    -4,    -4,    -4,    -4,   -51,    53,   -51,   142,
+      47,   111,    71,   132,    80,   -51,    53,   -51,    -4,   253,
+      53,    -4,   -51,   -51,   -51,   -51,   132,    83,   132,    -4,
+     -51,   -51,    49,   -51,    50,    57,    86,    53,   -51,   -51,
+     -51,   -51,    35,   -51
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int8 yypgoto[] =
 {
-     -46,   -46,     3,   -46,   -32,   -38,   -10,   -21,    -2,    25,
-     -45,    46,    51,   -46,    -1,   -46,   -46
+     -51,   -51,    -7,    84,   -51,   -11,   -13,   -24,    -1,   -51,
+     -51,   -51,   -51,   -51,   -35,    69,   -10,    87
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -678,98 +690,94 @@ static const yytype_int8 yypgoto[] =
 #define YYTABLE_NINF -1
 static const yytype_uint8 yytable[] =
 {
-      28,    29,    35,    81,    73,    67,    98,    83,    79,    71,
-      28,    29,    71,   101,    67,     8,    39,    37,    66,    45,
-      46,    66,    83,    10,    28,    29,    12,   102,    13,    30,
-      14,    31,    71,    28,    29,   119,    33,   116,   120,    38,
-      43,    66,    47,    48,    49,   112,   115,    74,    36,    15,
-      85,    88,    89,    97,    98,    84,    69,    70,    97,    66,
-      98,    86,    87,    83,   113,    80,    82,    40,    77,    41,
-      48,    49,    28,    29,   128,    90,    91,    92,    93,    94,
-      95,    96,   110,   119,    43,   103,   104,   105,   106,   107,
-     108,   109,    67,   116,    97,    98,   117,    85,    71,    75,
-     118,    49,   114,    80,   126,   127,    66,    66,    83,   124,
-      25,    28,    29,    67,   132,    67,    10,   134,    48,    49,
-      72,    13,   136,    14,   133,    28,    29,    87,   135,   121,
-      28,    29,    28,    29,    28,    29,   125,    82,    71,     5,
-       6,     0,   131,     7,     8,     9,     0,    66,     0,     0,
-       8,    39,    10,    11,     0,    12,     0,    13,    10,    14,
-      71,    12,     0,    13,    25,    14,     0,     0,   111,    66,
-      10,   112,     8,     9,     0,    13,   129,    14,    15,     0,
-      10,    16,     0,    12,    15,    13,    25,    14,     0,     0,
-     130,   137,    10,   112,     0,     0,    17,    13,     0,    14,
-      50,     0,    78,     0,    41,     0,    15,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    24,    32,     0,    25,     0,     0,    25,
-       0,     0,    10,     0,   138,    10,    34,    13,    50,    14,
-      13,     0,    14,    87,    76,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    50,     1,     2,     3,     0,     0,     0,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    24,     0,    25,    25,     0,     0,
-       0,     0,    10,    10,     0,     0,     0,    13,    13,    14,
-      14
+      34,    30,    44,    39,    72,    36,    49,    52,    90,    40,
+      40,    30,    72,    71,   125,    82,    47,    47,   126,    79,
+      27,    73,    75,    31,    71,    32,    10,    30,    77,    88,
+      76,    13,    89,    14,    37,    30,    71,   116,    93,    53,
+      54,   117,    41,    41,    99,   100,   101,   102,   103,   104,
+     105,   108,   117,    91,   109,   110,   111,   112,   113,   114,
+     115,     8,     9,    42,    87,    43,    43,    83,    48,    10,
+     120,   119,    12,    78,    13,    71,    14,    30,    53,    54,
+     128,    81,   132,   131,    71,   129,    92,    71,    47,    71,
+      71,    30,    82,    47,    15,    72,    16,    71,    38,   153,
+      94,    50,    51,   117,    82,    72,    89,   118,    96,   121,
+     140,   134,   139,   148,   149,   142,    33,   127,    30,   144,
+     123,   150,   130,   146,    54,   145,   135,    75,    30,     5,
+       6,   106,   107,     7,     8,     9,   152,    97,    98,   136,
+       8,   137,    10,    11,   141,    12,   147,    13,    10,    14,
+     151,    12,    27,    13,     0,    14,    53,    54,    10,     1,
+       2,     3,     0,    13,   133,    14,     0,    15,    26,    16,
+     122,    27,    17,    15,    41,    16,    95,    10,     0,    27,
+       0,    35,    13,     0,    14,    10,     0,     0,     0,    18,
+      13,    55,    14,     0,     0,   138,     0,    43,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    55,     0,     0,     0,     0,     0,
+      80,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    96,    55,     0,
+       0,     0,     0,     0,     0,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    26,     0,    27,    27,     0,     0,     0,   143,    10,
+      10,     0,     0,     0,    13,    13,    14,    14
 };
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-46)))
+  (!!((Yystate) == (-51)))
 
 #define yytable_value_is_error(Yytable_value) \
   YYID (0)
 
 static const yytype_int16 yycheck[] =
 {
-       2,     2,    12,    41,    22,    26,    12,    31,    40,    31,
-      12,    12,    31,    58,    35,     8,     9,    14,    40,    16,
-      17,    40,    31,    16,    26,    26,    19,    59,    21,     0,
-      23,    60,    31,    35,    35,    41,    11,    61,    83,    14,
-      15,    40,    17,    43,    44,    64,    78,    65,     9,    42,
-      31,    48,    49,    11,    12,    64,    31,    32,    11,    40,
-      12,    61,    61,    31,    74,    40,    41,    60,    60,    62,
-      43,    44,    74,    74,   112,    50,    51,    52,    53,    54,
-      55,    56,    61,    41,    59,    60,    61,    62,    63,    64,
-      65,    66,   113,    61,    11,    12,    64,    31,    31,    24,
-      63,    44,    77,    78,    13,    13,    40,    40,    31,    84,
-      10,   113,   113,   134,    13,   136,    16,   127,    43,    44,
-      20,    21,   132,    23,    15,   127,   127,    61,    61,    83,
-     132,   132,   134,   134,   136,   136,    85,   112,    31,     3,
-       4,    -1,   117,     7,     8,     9,    -1,    40,    -1,    -1,
-       8,     9,    16,    17,    -1,    19,    -1,    21,    16,    23,
-      31,    19,    -1,    21,    10,    23,    -1,    -1,    61,    40,
-      16,    64,     8,     9,    -1,    21,    22,    23,    42,    -1,
-      16,    45,    -1,    19,    42,    21,    10,    23,    -1,    -1,
-      61,    15,    16,    64,    -1,    -1,    60,    21,    -1,    23,
-      18,    -1,    60,    -1,    62,    -1,    42,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,     7,    60,    -1,    10,    -1,    -1,    10,
-      -1,    -1,    16,    -1,    15,    16,    20,    21,    18,    23,
-      21,    -1,    23,    61,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    18,     5,     6,     7,    -1,    -1,    -1,    25,    26,
+      11,     2,    15,    14,    28,    12,    16,    18,    43,     9,
+       9,    12,    36,    40,    64,    11,    12,    12,    68,    24,
+      10,    32,    33,     0,    40,    63,    16,    28,    22,    42,
+      20,    21,    43,    23,     9,    36,    40,    64,    48,    44,
+      45,    68,    42,    42,    55,    56,    57,    58,    59,    60,
+      61,    64,    68,    68,    65,    66,    67,    68,    69,    70,
+      71,     8,     9,    63,    63,    65,    65,    63,    63,    16,
+      81,    78,    19,    67,    21,    40,    23,    78,    44,    45,
+      91,    63,   117,    94,    40,    92,    13,    40,    12,    40,
+      40,    92,    11,    12,    41,   119,    43,    40,    14,    64,
+      68,    17,    18,    68,    11,   129,   117,    64,    64,    13,
+     123,    64,   123,    64,    64,   126,    63,    66,   119,   130,
+      68,    64,    68,   136,    45,   136,    15,   138,   129,     3,
+       4,    62,    63,     7,     8,     9,   147,    53,    54,    68,
+       8,     9,    16,    17,    64,    19,    63,    21,    16,    23,
+      64,    19,    10,    21,    -1,    23,    44,    45,    16,     5,
+       6,     7,    -1,    21,    22,    23,    -1,    41,     7,    43,
+      83,    10,    46,    41,    42,    43,    64,    16,    -1,    10,
+      -1,    20,    21,    -1,    23,    16,    -1,    -1,    -1,    63,
+      21,    18,    23,    -1,    -1,    63,    -1,    65,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,     7,    -1,    10,    10,    -1,    -1,
-      -1,    -1,    16,    16,    -1,    -1,    -1,    21,    21,    23,
-      23
+      37,    38,    39,    40,    18,    -1,    -1,    -1,    -1,    -1,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    64,    18,    -1,
+      -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,     7,    -1,    10,    10,    -1,    -1,    -1,    15,    16,
+      16,    -1,    -1,    -1,    21,    21,    23,    23
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     5,     6,     7,    67,     3,     4,     7,     8,     9,
-      16,    17,    19,    21,    23,    42,    45,    60,    68,    69,
-      74,    75,    80,    82,     7,    10,    72,    73,    74,    80,
-       0,    60,    60,    75,    20,    72,     9,    68,    75,     9,
-      60,    62,    70,    75,    81,    68,    68,    75,    43,    44,
-      18,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    73,    71,    75,
-      75,    31,    20,    22,    65,    24,    24,    60,    60,    70,
-      75,    71,    75,    31,    64,    31,    61,    61,    68,    68,
-      75,    75,    75,    75,    75,    75,    75,    11,    12,    76,
-      77,    76,    70,    75,    75,    75,    75,    75,    75,    75,
-      61,    61,    64,    72,    75,    70,    61,    64,    63,    41,
-      76,    77,    78,    79,    75,    78,    13,    13,    71,    22,
-      61,    75,    13,    15,    72,    61,    72,    15,    15
+       0,     5,     6,     7,    70,     3,     4,     7,     8,     9,
+      16,    17,    19,    21,    23,    41,    43,    46,    63,    72,
+      73,    74,    77,    78,    80,    81,     7,    10,    71,    76,
+      77,     0,    63,    63,    74,    20,    71,     9,    72,    74,
+       9,    42,    63,    65,    75,    79,    82,    12,    63,    85,
+      72,    72,    74,    44,    45,    18,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    76,    74,    83,    74,    20,    22,    67,    24,
+      24,    63,    11,    63,    84,    85,    86,    63,    75,    74,
+      83,    68,    13,    85,    68,    64,    64,    72,    72,    74,
+      74,    74,    74,    74,    74,    74,    84,    84,    75,    74,
+      74,    74,    74,    74,    74,    74,    64,    68,    64,    71,
+      74,    13,    86,    68,    75,    64,    68,    66,    74,    71,
+      68,    74,    83,    22,    64,    15,    68,     9,    63,    74,
+      75,    64,    74,    15,    74,    74,    75,    63,    64,    64,
+      64,    64,    74,    64
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -1581,212 +1589,212 @@ yyreduce:
     {
         case 2:
 /* Line 1787 of yacc.c  */
-#line 126 "util_expr_parse.y"
+#line 128 "util_expr_parse.y"
     { ctx->expr = (yyvsp[(2) - (2)].exVal); }
     break;
 
   case 3:
 /* Line 1787 of yacc.c  */
-#line 127 "util_expr_parse.y"
+#line 129 "util_expr_parse.y"
     { ctx->expr = (yyvsp[(2) - (2)].exVal); }
     break;
 
   case 4:
 /* Line 1787 of yacc.c  */
-#line 128 "util_expr_parse.y"
+#line 130 "util_expr_parse.y"
     { YYABORT; }
     break;
 
   case 5:
 /* Line 1787 of yacc.c  */
-#line 131 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_True,        NULL, NULL, ctx); }
+#line 133 "util_expr_parse.y"
+    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
     break;
 
   case 6:
 /* Line 1787 of yacc.c  */
-#line 132 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_False,       NULL, NULL, ctx); }
+#line 134 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_concat_make((yyvsp[(1) - (2)].exVal), (yyvsp[(2) - (2)].exVal), ctx); }
     break;
 
   case 7:
 /* Line 1787 of yacc.c  */
-#line 133 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_Not,         (yyvsp[(2) - (2)].exVal),   NULL, ctx); }
+#line 135 "util_expr_parse.y"
+    { YYABORT; }
     break;
 
   case 8:
 /* Line 1787 of yacc.c  */
-#line 134 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_Or,          (yyvsp[(1) - (3)].exVal),   (yyvsp[(3) - (3)].exVal),   ctx); }
+#line 138 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_True,        NULL, NULL, ctx); }
     break;
 
   case 9:
 /* Line 1787 of yacc.c  */
-#line 135 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_And,         (yyvsp[(1) - (3)].exVal),   (yyvsp[(3) - (3)].exVal),   ctx); }
+#line 139 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_False,       NULL, NULL, ctx); }
     break;
 
   case 10:
 /* Line 1787 of yacc.c  */
-#line 136 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_Comp,        (yyvsp[(1) - (1)].exVal),   NULL, ctx); }
+#line 140 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_Not,         (yyvsp[(2) - (2)].exVal),   NULL, ctx); }
     break;
 
   case 11:
 /* Line 1787 of yacc.c  */
-#line 137 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_unary_op_make(       (yyvsp[(1) - (2)].cpVal),   (yyvsp[(2) - (2)].exVal),   ctx); }
+#line 141 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_Or,          (yyvsp[(1) - (3)].exVal),   (yyvsp[(3) - (3)].exVal),   ctx); }
     break;
 
   case 12:
 /* Line 1787 of yacc.c  */
-#line 138 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_binary_op_make((yyvsp[(2) - (3)].cpVal),   (yyvsp[(1) - (3)].exVal),   (yyvsp[(3) - (3)].exVal),   ctx); }
+#line 142 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_And,         (yyvsp[(1) - (3)].exVal),   (yyvsp[(3) - (3)].exVal),   ctx); }
     break;
 
   case 13:
 /* Line 1787 of yacc.c  */
-#line 139 "util_expr_parse.y"
-    { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
+#line 143 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_Comp,        (yyvsp[(1) - (1)].exVal),   NULL, ctx); }
     break;
 
   case 14:
 /* Line 1787 of yacc.c  */
-#line 140 "util_expr_parse.y"
-    { YYABORT; }
+#line 144 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_unary_op_make(       (yyvsp[(1) - (2)].cpVal),   (yyvsp[(2) - (2)].exVal),   ctx); }
     break;
 
   case 15:
 /* Line 1787 of yacc.c  */
-#line 143 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_EQ,      (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 145 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_binary_op_make((yyvsp[(2) - (3)].cpVal),   (yyvsp[(1) - (3)].exVal),   (yyvsp[(3) - (3)].exVal),   ctx); }
     break;
 
   case 16:
 /* Line 1787 of yacc.c  */
-#line 144 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_NE,      (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 146 "util_expr_parse.y"
+    { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
     break;
 
   case 17:
 /* Line 1787 of yacc.c  */
-#line 145 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_LT,      (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 147 "util_expr_parse.y"
+    { YYABORT; }
     break;
 
   case 18:
 /* Line 1787 of yacc.c  */
-#line 146 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_LE,      (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 150 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_EQ,      (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
     break;
 
   case 19:
 /* Line 1787 of yacc.c  */
-#line 147 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_GT,      (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 151 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_NE,      (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
     break;
 
   case 20:
 /* Line 1787 of yacc.c  */
-#line 148 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_GE,      (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 152 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_LT,      (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
     break;
 
   case 21:
 /* Line 1787 of yacc.c  */
-#line 149 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_STR_EQ,  (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 153 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_LE,      (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
     break;
 
   case 22:
 /* Line 1787 of yacc.c  */
-#line 150 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_STR_NE,  (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 154 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_GT,      (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
     break;
 
   case 23:
 /* Line 1787 of yacc.c  */
-#line 151 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_STR_LT,  (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 155 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_GE,      (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
     break;
 
   case 24:
 /* Line 1787 of yacc.c  */
-#line 152 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_STR_LE,  (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 156 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_STR_EQ,  (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
     break;
 
   case 25:
 /* Line 1787 of yacc.c  */
-#line 153 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_STR_GT,  (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 157 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_STR_NE,  (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
     break;
 
   case 26:
 /* Line 1787 of yacc.c  */
-#line 154 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_STR_GE,  (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 158 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_STR_LT,  (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
     break;
 
   case 27:
 /* Line 1787 of yacc.c  */
-#line 155 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_IN,      (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 159 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_STR_LE,  (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
     break;
 
   case 28:
 /* Line 1787 of yacc.c  */
-#line 156 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_REG,     (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 160 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_STR_GT,  (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
     break;
 
   case 29:
 /* Line 1787 of yacc.c  */
-#line 157 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_NRE,     (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 161 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_STR_GE,  (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
     break;
 
   case 30:
 /* Line 1787 of yacc.c  */
-#line 160 "util_expr_parse.y"
-    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
+#line 162 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_REG,     (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
     break;
 
   case 31:
 /* Line 1787 of yacc.c  */
-#line 161 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_list_regex_make((yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 163 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_NRE,     (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
     break;
 
   case 32:
 /* Line 1787 of yacc.c  */
-#line 162 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_list_regex_make((yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
+#line 164 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_IN,      (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal), ctx); }
     break;
 
   case 33:
 /* Line 1787 of yacc.c  */
-#line 163 "util_expr_parse.y"
-    { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
+#line 167 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_Digit,  (yyvsp[(1) - (1)].cpVal), NULL, ctx); }
     break;
 
   case 34:
 /* Line 1787 of yacc.c  */
-#line 164 "util_expr_parse.y"
-    { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
+#line 168 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_String, "", NULL, ctx); }
     break;
 
   case 35:
 /* Line 1787 of yacc.c  */
-#line 167 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_ListElement, (yyvsp[(1) - (1)].exVal), NULL, ctx); }
+#line 169 "util_expr_parse.y"
+    { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
     break;
 
   case 36:
 /* Line 1787 of yacc.c  */
-#line 168 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_ListElement, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal),   ctx); }
+#line 170 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_Concat, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal),   ctx); }
     break;
 
   case 37:
@@ -1798,25 +1806,25 @@ yyreduce:
   case 38:
 /* Line 1787 of yacc.c  */
 #line 172 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_concat_make((yyvsp[(1) - (2)].exVal), (yyvsp[(2) - (2)].exVal), ctx); }
+    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
     break;
 
   case 39:
 /* Line 1787 of yacc.c  */
 #line 173 "util_expr_parse.y"
-    { YYABORT; }
+    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
     break;
 
   case 40:
 /* Line 1787 of yacc.c  */
-#line 176 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_String, (yyvsp[(1) - (1)].cpVal), NULL, ctx); }
+#line 174 "util_expr_parse.y"
+    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
     break;
 
   case 41:
 /* Line 1787 of yacc.c  */
-#line 177 "util_expr_parse.y"
-    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
+#line 175 "util_expr_parse.y"
+    { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
     break;
 
   case 42:
@@ -1827,202 +1835,195 @@ yyreduce:
 
   case 43:
 /* Line 1787 of yacc.c  */
-#line 181 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_var_make((yyvsp[(2) - (3)].cpVal), ctx); }
+#line 179 "util_expr_parse.y"
+    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
     break;
 
   case 44:
 /* Line 1787 of yacc.c  */
-#line 182 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_str_func_make((yyvsp[(2) - (5)].cpVal), (yyvsp[(4) - (5)].exVal), ctx); }
+#line 180 "util_expr_parse.y"
+    { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
     break;
 
   case 45:
 /* Line 1787 of yacc.c  */
-#line 183 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_str_word_make((yyvsp[(2) - (3)].exVal), ctx); }
+#line 181 "util_expr_parse.y"
+    { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
     break;
 
   case 46:
 /* Line 1787 of yacc.c  */
 #line 184 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_str_bool_make((yyvsp[(2) - (3)].exVal), ctx); }
+    { (yyval.exVal) = ap_expr_make(op_String, (yyvsp[(1) - (1)].cpVal), NULL, ctx); }
     break;
 
   case 47:
 /* Line 1787 of yacc.c  */
-#line 187 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_Digit,  (yyvsp[(1) - (1)].cpVal), NULL, ctx); }
+#line 185 "util_expr_parse.y"
+    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
     break;
 
   case 48:
 /* Line 1787 of yacc.c  */
 #line 188 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_String, "", NULL, ctx); }
+    { (yyval.exVal) = ap_expr_var_make((yyvsp[(2) - (3)].cpVal), ctx); }
     break;
 
   case 49:
 /* Line 1787 of yacc.c  */
 #line 189 "util_expr_parse.y"
-    { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
+    { (yyval.exVal) = ap_expr_str_func_make((yyvsp[(2) - (5)].cpVal), (yyvsp[(4) - (5)].exVal), ctx); }
     break;
 
   case 50:
 /* Line 1787 of yacc.c  */
 #line 190 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_Concat, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal),   ctx); }
+    { (yyval.exVal) = ap_expr_make(op_Bool, (yyvsp[(2) - (3)].exVal), NULL, ctx); }
     break;
 
   case 51:
 /* Line 1787 of yacc.c  */
 #line 191 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_make(op_Regsub, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal),   ctx); }
+    { (yyval.exVal) = ap_expr_make(op_Word, (yyvsp[(2) - (3)].exVal), NULL, ctx); }
     break;
 
   case 52:
 /* Line 1787 of yacc.c  */
 #line 192 "util_expr_parse.y"
-    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
+    { (yyval.exVal) = ap_expr_backref_make((yyvsp[(1) - (1)].num), ctx); }
     break;
 
   case 53:
 /* Line 1787 of yacc.c  */
-#line 193 "util_expr_parse.y"
-    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
+#line 195 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_str_func_make((yyvsp[(1) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), ctx); }
     break;
 
   case 54:
 /* Line 1787 of yacc.c  */
-#line 194 "util_expr_parse.y"
-    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
+#line 196 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_str_func_make((yyvsp[(1) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), ctx); }
     break;
 
   case 55:
 /* Line 1787 of yacc.c  */
-#line 195 "util_expr_parse.y"
-    {
-                                           (yyval.exVal) = ap_expr_make(op_Join,   (yyvsp[(2) - (2)].exVal), NULL, ctx);
-            }
+#line 199 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_list_func_make((yyvsp[(1) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), ctx); }
     break;
 
   case 56:
 /* Line 1787 of yacc.c  */
-#line 198 "util_expr_parse.y"
-    {
-                                           (yyval.exVal) = ap_expr_make(op_Join,   (yyvsp[(2) - (4)].exVal), (yyvsp[(4) - (4)].exVal),   ctx);
-            }
+#line 203 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_Sub, (yyvsp[(4) - (4)].exVal), (yyvsp[(2) - (4)].exVal), ctx); }
     break;
 
   case 57:
 /* Line 1787 of yacc.c  */
-#line 201 "util_expr_parse.y"
-    {
-                                           (yyval.exVal) = ap_expr_make(op_Join,   (yyvsp[(3) - (6)].exVal), (yyvsp[(5) - (6)].exVal),   ctx);
-            }
+#line 204 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_Sub, (yyvsp[(5) - (6)].exVal), (yyvsp[(3) - (6)].exVal), ctx); }
     break;
 
   case 58:
 /* Line 1787 of yacc.c  */
-#line 204 "util_expr_parse.y"
-    { (yyval.exVal) = (yyvsp[(2) - (3)].exVal); }
+#line 207 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_Join, (yyvsp[(2) - (2)].exVal), NULL, ctx); }
     break;
 
   case 59:
 /* Line 1787 of yacc.c  */
-#line 207 "util_expr_parse.y"
-    {
-                ap_expr_t *e = ap_expr_regex_make((yyvsp[(2) - (3)].cpVal), (yyvsp[(3) - (3)].cpVal), NULL, 0, ctx);
-                if (!e) {
-                    ctx->error = "Failed to compile regular expression";
-                    YYERROR;
-                }
-                (yyval.exVal) = e;
-            }
+#line 208 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_Join, (yyvsp[(3) - (4)].exVal), NULL, ctx); }
     break;
 
   case 60:
 /* Line 1787 of yacc.c  */
-#line 216 "util_expr_parse.y"
-    {
-                ap_expr_t *e = ap_expr_regex_make((yyvsp[(2) - (4)].cpVal), (yyvsp[(4) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), 0, ctx);
-                if (!e) {
-                    ctx->error = "Failed to compile regular expression";
-                    YYERROR;
-                }
-                (yyval.exVal) = e;
-            }
+#line 209 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_Join, (yyvsp[(2) - (4)].exVal), (yyvsp[(4) - (4)].exVal),   ctx); }
     break;
 
   case 61:
 /* Line 1787 of yacc.c  */
-#line 225 "util_expr_parse.y"
-    {
-                /* Returns a list:
-                 * <word> ~= split/://
-                 *  => split around ':', replace it with empty
-                 * <word> ~= split/:/\n/
-                 *  => split around ':', replace it with '\n'
-                 * <list> ~= split/.*?Ip Address:([^,]+)/$1/
-                 *  => split around the whole match, replace it with $1
-                 */
-                ap_expr_t *e = ap_expr_regex_make((yyvsp[(2) - (4)].cpVal), (yyvsp[(4) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), 1, ctx);
-                if (!e) {
-                    ctx->error = "Failed to compile regular expression";
-                    YYERROR;
-                }
-                (yyval.exVal) = e;
-            }
+#line 210 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_Join, (yyvsp[(3) - (6)].exVal), (yyvsp[(5) - (6)].exVal),   ctx); }
     break;
 
   case 62:
 /* Line 1787 of yacc.c  */
-#line 242 "util_expr_parse.y"
-    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
+#line 213 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_Split, (yyvsp[(4) - (4)].exVal), (yyvsp[(2) - (4)].exVal), ctx); }
     break;
 
   case 63:
 /* Line 1787 of yacc.c  */
-#line 243 "util_expr_parse.y"
-    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
+#line 214 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_Split, (yyvsp[(5) - (6)].exVal), (yyvsp[(3) - (6)].exVal), ctx); }
     break;
 
   case 64:
 /* Line 1787 of yacc.c  */
-#line 244 "util_expr_parse.y"
-    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
+#line 215 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_Split, (yyvsp[(4) - (4)].exVal), (yyvsp[(2) - (4)].exVal), ctx); }
     break;
 
   case 65:
 /* Line 1787 of yacc.c  */
-#line 247 "util_expr_parse.y"
-    {
-                int *n = apr_palloc(ctx->pool, sizeof(int));
-                *n = (yyvsp[(1) - (1)].num);
-                (yyval.exVal) = ap_expr_make(op_Regref, n, NULL, ctx);
-            }
+#line 216 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_Split, (yyvsp[(5) - (6)].exVal), (yyvsp[(3) - (6)].exVal), ctx); }
     break;
 
   case 66:
 /* Line 1787 of yacc.c  */
-#line 254 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_list_func_make((yyvsp[(1) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), ctx); }
+#line 219 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_ListElement, (yyvsp[(1) - (1)].exVal), NULL, ctx); }
     break;
 
   case 67:
 /* Line 1787 of yacc.c  */
-#line 258 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_str_func_make((yyvsp[(1) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), ctx); }
+#line 220 "util_expr_parse.y"
+    { (yyval.exVal) = ap_expr_make(op_ListElement, (yyvsp[(1) - (3)].exVal), (yyvsp[(3) - (3)].exVal),   ctx); }
     break;
 
   case 68:
 /* Line 1787 of yacc.c  */
-#line 259 "util_expr_parse.y"
-    { (yyval.exVal) = ap_expr_str_func_make((yyvsp[(1) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), ctx); }
+#line 223 "util_expr_parse.y"
+    {
+                ap_expr_t *e = ap_expr_regex_make((yyvsp[(2) - (3)].cpVal), NULL, (yyvsp[(3) - (3)].cpVal), ctx);
+                if (!e) {
+                    ctx->error = "Failed to compile regular expression";
+                    YYERROR;
+                }
+                (yyval.exVal) = e;
+            }
+    break;
+
+  case 69:
+/* Line 1787 of yacc.c  */
+#line 232 "util_expr_parse.y"
+    {
+                ap_expr_t *e = ap_expr_regex_make((yyvsp[(2) - (4)].cpVal), (yyvsp[(3) - (4)].exVal), (yyvsp[(4) - (4)].cpVal), ctx);
+                if (!e) {
+                    ctx->error = "Failed to compile regular expression";
+                    YYERROR;
+                }
+                (yyval.exVal) = e;
+            }
+    break;
+
+  case 70:
+/* Line 1787 of yacc.c  */
+#line 241 "util_expr_parse.y"
+    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
+    break;
+
+  case 71:
+/* Line 1787 of yacc.c  */
+#line 242 "util_expr_parse.y"
+    { (yyval.exVal) = (yyvsp[(1) - (1)].exVal); }
     break;
 
 
 /* Line 1787 of yacc.c  */
-#line 2026 "util_expr_parse.c"
+#line 2027 "util_expr_parse.c"
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -2254,7 +2255,7 @@ yyreturn:
 
 
 /* Line 2050 of yacc.c  */
-#line 262 "util_expr_parse.y"
+#line 245 "util_expr_parse.y"
 
 
 void yyerror(ap_expr_parse_ctx_t *ctx, const char *s)
index 3f9ee26377868a9848133117c3854b97cb45b386..396e9ecb48eb7eb48f68c2ec2ef277199829a156 100644 (file)
@@ -59,7 +59,7 @@ extern int ap_expr_yydebug;
      T_REG_MATCH = 268,
      T_REG_SUBST = 269,
      T_REG_FLAGS = 270,
-     T_REG_REF = 271,
+     T_BACKREF = 271,
      T_OP_UNARY = 272,
      T_OP_BINARY = 273,
      T_STR_BEGIN = 274,
@@ -84,11 +84,12 @@ extern int ap_expr_yydebug;
      T_OP_STR_GT = 293,
      T_OP_STR_GE = 294,
      T_OP_CONCAT = 295,
-     T_OP_SPLIT = 296,
-     T_OP_JOIN = 297,
-     T_OP_OR = 298,
-     T_OP_AND = 299,
-     T_OP_NOT = 300
+     T_OP_JOIN = 296,
+     T_OP_SPLIT = 297,
+     T_OP_SUB = 298,
+     T_OP_OR = 299,
+     T_OP_AND = 300,
+     T_OP_NOT = 301
    };
 #endif
 
@@ -105,7 +106,7 @@ typedef union YYSTYPE
 
 
 /* Line 2053 of yacc.c  */
-#line 109 "util_expr_parse.h"
+#line 110 "util_expr_parse.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
index fdb9da7aa2c9e973a1d3d0ab588b9be593d6a4b8..fc13bcbe6d7637105dd3cdf533822385ca24a141 100644 (file)
@@ -347,8 +347,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg ,yyscan_t yyscanner );
        *yy_cp = '\0'; \
        yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 74
-#define YY_END_OF_BUFFER 75
+#define YY_NUM_RULES 73
+#define YY_END_OF_BUFFER 74
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -356,25 +356,25 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[157] =
+static yyconst flex_int16_t yy_accept[155] =
     {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   75,   73,
-       15,   14,    1,   15,   15,   15,   16,   46,   17,   73,
-       73,   73,   72,   73,   47,   27,   70,   73,   35,   33,
-       37,   71,   71,   71,   71,   71,   71,   71,   71,   71,
-       71,   71,   71,   71,   73,   26,   22,   21,   25,   24,
-       14,   24,   24,   24,   23,   66,   65,   29,   30,   14,
-       30,   30,   30,   31,    2,    3,   13,    6,    6,    5,
-       11,   12,    8,    9,   10,   13,   16,   34,   40,   32,
-       20,   42,   70,   63,   63,   63,   63,   63,   63,   19,
-
-       36,   33,   39,   38,   71,   71,   60,   71,   58,   57,
-       61,   71,   56,   55,   28,   28,   59,   71,   43,   71,
-       71,   44,   21,    4,    6,    6,    0,    5,    7,   18,
-       62,   49,   51,   53,   48,   52,   54,   50,   41,   71,
-       71,   45,   71,   71,    6,    5,    5,    5,    7,   71,
-       67,   71,   68,   69,   64,    0
+        0,    0,    0,    0,    0,    0,   74,   72,   15,   14,
+        1,   15,   15,   15,   16,   46,   17,   72,   72,   72,
+       71,   72,   47,   27,   69,   72,   35,   33,   37,   70,
+       70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
+       70,   70,   72,   26,   22,   21,   25,   24,   14,   24,
+       24,   24,   23,   29,   30,   14,   30,   30,   30,   31,
+        2,    3,   13,    6,    6,    5,   11,   12,    8,    9,
+       10,   13,   16,   34,   40,   32,   20,   42,   69,   63,
+       63,   63,   63,   63,   63,   19,   36,   33,   39,   38,
+
+       70,   70,   60,   70,   58,   57,   61,   70,   56,   55,
+       28,   28,   59,   70,   43,   70,   70,   70,   44,   21,
+        4,    6,    6,    0,    5,    7,   18,   62,   49,   51,
+       53,   48,   52,   54,   50,   41,   70,   70,   45,   70,
+       64,   70,    6,    5,    5,    5,    7,   70,   65,   70,
+       67,   68,   66,    0
     } ;
 
 static yyconst YY_CHAR yy_ec[256] =
@@ -418,115 +418,105 @@ static yyconst YY_CHAR yy_meta[49] =
         4,    4,    4,    4,    1,    1,    1,    1
     } ;
 
-static yyconst flex_uint16_t yy_base[171] =
+static yyconst flex_uint16_t yy_base[168] =
     {   0,
         0,    0,    0,    6,   30,    0,   78,    0,  124,  126,
-      170,  213,    0,    0,  132,  134,    0,    0,  244,  455,
-      455,  455,  455,    0,  198,  245,   16,  116,  455,    5,
-      197,  232,  455,  275,  455,  455,   10,  193,  219,  118,
-      217,    0,  200,  196,  208,  101,  197,  195,  115,  308,
-      116,  190,  191,  188,  177,  455,  455,    0,  455,  455,
-      455,  144,  177,  340,  455,  455,  455,  455,  455,  455,
-      152,  170,  370,  455,  455,  196,  455,   13,  170,  174,
-      455,  455,  455,  455,  455,    0,  144,  455,  455,  455,
-      195,  455,  177,    0,  173,  120,  175,  123,  181,  455,
-
-      455,  455,  455,  455,    0,  181,    0,  174,    0,    0,
-        0,  175,    0,    0,  455,    0,    0,  164,    0,  171,
-      137,  455,    0,  455,  139,  181,  184,  187,    0,  455,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  138,
-      136,    0,  138,  134,  455,  455,  455,  455,  455,  122,
-        0,   86,    0,    0,    0,  455,  414,  418,  422,  426,
-      430,  434,  438,  442,  444,  446,  448,    3,  450,    1
+        0,    0,  132,  134,    0,    0,  251,  365,  365,  365,
+      365,    0,  205,  159,   16,  116,  365,    5,  204,  239,
+      365,  189,  365,  365,   10,  199,  225,  118,  224,    0,
+      207,  203,  215,  101,  203,  201,  115,  222,  116,  197,
+      108,  192,  185,  365,  365,    0,  365,  365,  365,  144,
+      179,  254,  365,  365,  365,  365,  152,  177,  284,  365,
+      365,  201,  365,   13,  162,  165,  365,  365,  365,  365,
+      365,    0,  152,  365,  365,  365,  199,  365,  168,    0,
+      177,  120,  179,  123,  185,  365,  365,  365,  365,  365,
+
+        0,  185,    0,  178,    0,    0,    0,  179,    0,    0,
+      365,    0,    0,  168,    0,  168,  173,  151,  365,    0,
+      365,  172,  175,  181,  192,    0,  365,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  152,  136,    0,  138,
+        0,  134,  365,  365,  365,  365,  365,  118,    0,   86,
+        0,    0,    0,  365,  328,  332,  336,  340,  344,  348,
+      352,  354,  356,  358,    3,  360,    1
     } ;
 
-static yyconst flex_int16_t yy_def[171] =
+static yyconst flex_int16_t yy_def[168] =
     {   0,
-      157,  157,  158,  158,  156,    5,  156,    7,  159,  159,
-      160,  160,  161,  161,  162,  162,  163,  163,  156,  156,
-      156,  156,  156,  156,  156,  164,  156,  156,  156,  156,
-      156,  156,  156,  165,  156,  156,  156,  156,  156,  156,
-      156,  166,  166,  166,  166,  166,  166,  166,  166,  166,
-      166,  166,   50,  166,  156,  156,  156,  167,  156,  156,
-      156,  156,  156,  164,  156,  156,  156,  156,  156,  156,
-      156,  156,  164,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  168,  156,  156,  156,  156,
-      156,  156,  156,  169,  169,  169,  169,  169,  169,  156,
-
-      156,  156,  156,  156,  166,  166,  166,  166,  166,  166,
-      166,  166,  166,  166,  156,  166,  166,  166,  166,  166,
-      166,  156,  167,  156,  156,  156,  156,  156,  170,  156,
-      169,  169,  169,  169,  169,  169,  169,  169,  166,  166,
-      166,  166,  166,  166,  156,  156,  156,  156,  156,  166,
-      166,  166,  166,  166,  166,    0,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156
+      155,  155,  156,  156,  154,    5,  154,    7,  157,  157,
+      158,  158,  159,  159,  160,  160,  154,  154,  154,  154,
+      154,  154,  154,  161,  154,  154,  154,  154,  154,  154,
+      154,  162,  154,  154,  154,  154,  154,  154,  154,  163,
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+       48,  163,  154,  154,  154,  164,  154,  154,  154,  154,
+      154,  161,  154,  154,  154,  154,  154,  154,  161,  154,
+      154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
+      154,  165,  154,  154,  154,  154,  154,  154,  154,  166,
+      166,  166,  166,  166,  166,  154,  154,  154,  154,  154,
+
+      163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
+      154,  163,  163,  163,  163,  163,  163,  163,  154,  164,
+      154,  154,  154,  154,  154,  167,  154,  166,  166,  166,
+      166,  166,  166,  166,  166,  163,  163,  163,  163,  163,
+      163,  163,  154,  154,  154,  154,  154,  163,  163,  163,
+      163,  163,  163,    0,  154,  154,  154,  154,  154,  154,
+      154,  154,  154,  154,  154,  154,  154
     } ;
 
-static yyconst flex_uint16_t yy_nxt[504] =
+static yyconst flex_uint16_t yy_nxt[414] =
     {   0,
-      156,  156,   22,  149,   23,  129,   24,   25,   22,  156,
-       23,  156,   24,   25,   75,   75,   75,   87,   87,   90,
-       90,   90,  156,   26,   93,   93,   93,  125,  125,   26,
-       20,   27,   27,   28,   29,   20,   30,   31,   32,   33,
-       33,   34,   35,   36,   37,   37,   37,   38,   39,   40,
-       41,   42,   42,   20,   20,   43,   42,   42,   44,   45,
-       46,   47,   48,   49,   50,   51,   52,   42,   42,   42,
-       53,   54,   42,   42,   33,   55,   33,   20,   56,   56,
+      154,  154,   20,  147,   21,  126,   22,   23,   20,  154,
+       21,  154,   22,   23,   71,   71,   71,   83,   83,   86,
+       86,   86,  154,   24,   89,   89,   89,  122,  122,   24,
+       18,   25,   25,   26,   27,   18,   28,   29,   30,   31,
+       31,   32,   33,   34,   35,   35,   35,   36,   37,   38,
+       39,   40,   40,   18,   18,   41,   40,   40,   42,   43,
+       44,   45,   46,   47,   48,   49,   50,   40,   40,   40,
+       51,   52,   40,   40,   31,   53,   31,   18,   54,   54,
+       54,   54,   54,   54,   54,   54,   54,   54,   54,   54,
+       54,   54,   54,   54,   54,   55,   54,   54,   54,   56,
+
+       56,   54,   54,   56,   56,   56,   56,   56,   56,   56,
        56,   56,   56,   56,   56,   56,   56,   56,   56,   56,
-       56,   56,   56,   56,   56,   57,   56,   56,   56,   58,
-
-       58,   56,   56,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   58,   58,   58,   58,   58,   58,   58,   58,
-       58,   58,   56,   56,   59,   56,   61,  155,   61,  109,
-       62,   63,   62,   63,   70,   88,   70,  102,   71,   72,
-       71,   72,  110,  113,  117,   87,   87,   64,  133,   64,
-      154,  136,  118,  145,  145,   73,  114,   73,   75,   75,
-       75,  134,  153,   89,  137,  103,   75,   75,   75,  152,
-       65,  151,   65,   67,   67,   67,   67,   67,  150,  144,
-       67,   67,   67,   67,  126,  126,  127,   67,  128,  128,
-      128,   93,   93,   93,   67,  146,  146,  147,  147,  147,
-
-      147,  148,  148,  148,  143,  142,  141,  140,  139,  138,
-      135,  132,  130,  124,   76,   67,   67,   67,   67,   67,
-       67,   76,  122,   67,   67,   67,   67,  121,  120,  119,
-       67,  112,  111,  108,  107,  106,  104,   67,  101,  100,
-       92,   91,   76,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,   67,   78,
-       79,   80,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,   81,  156,  156,   82,  156,  156,  156,  156,  156,
-       83,  156,  156,  156,   84,  156,   85,  156,   86,   93,
-       93,   93,  156,  156,  156,  156,  156,  156,  156,  156,
-
-      156,  156,  156,   95,  156,   96,   97,  156,   98,  156,
-       99,  115,  115,  115,  115,  115,  156,  156,  115,  115,
-      115,  115,  156,  156,  156,  115,  156,  156,  156,  156,
-      156,  156,  116,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  115,   78,   79,   80,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,   81,  156,  156,   82,
-      156,  156,  156,  156,  156,   83,  156,  156,  156,   84,
-      156,   85,  156,   86,   78,   79,   80,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,   81,  156,  156,   82,
-
-      156,  156,  156,  156,  156,   83,  156,  156,  156,   84,
-      156,   85,  156,   86,   20,   20,   20,   20,   21,   21,
-       21,   21,   60,   60,   60,   60,   66,   66,   66,   66,
-       68,   68,   68,   68,   69,   69,   69,   69,   74,   74,
-       74,   74,   77,  156,   77,   77,   94,   94,  105,  105,
-      123,  123,  131,  131,   19,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-
-      156,  156,  156
+       56,   56,   54,   54,   57,   54,   59,  153,   59,  105,
+       60,   61,   60,   61,   66,   84,   66,   98,   67,   68,
+       67,   68,  106,  109,  113,  116,  152,   62,  130,   62,
+      117,  133,  114,   83,   83,   69,  110,   69,   71,   71,
+       71,  131,  151,   85,  134,   99,   71,   71,   71,  150,
+       63,  149,   63,   74,   75,   76,  123,  123,  124,  125,
+      125,  125,   89,   89,   89,   77,  143,  143,   78,  144,
+      144,  145,  148,  142,   79,  145,  145,  145,   80,  141,
+
+       81,  140,   82,   89,   89,   89,  146,  146,  146,  139,
+      138,  137,  136,  135,  132,  129,  127,   91,  121,   92,
+       93,   72,   94,   72,   95,  111,  111,  111,  111,  111,
+      119,  118,  111,  111,  111,  111,  115,  108,  107,  111,
+      104,  103,  102,  100,   97,   96,  112,   88,   87,   72,
+      154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
+      154,  154,  154,  154,  154,  154,  154,  111,   74,   75,
+       76,  154,  154,  154,  154,  154,  154,  154,  154,  154,
+       77,  154,  154,   78,  154,  154,  154,  154,  154,   79,
+      154,  154,  154,   80,  154,   81,  154,   82,   74,   75,
+
+       76,  154,  154,  154,  154,  154,  154,  154,  154,  154,
+       77,  154,  154,   78,  154,  154,  154,  154,  154,   79,
+      154,  154,  154,   80,  154,   81,  154,   82,   18,   18,
+       18,   18,   19,   19,   19,   19,   58,   58,   58,   58,
+       64,   64,   64,   64,   65,   65,   65,   65,   70,   70,
+       70,   70,   73,  154,   73,   73,   90,   90,  101,  101,
+      120,  120,  128,  128,   17,  154,  154,  154,  154,  154,
+      154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
+      154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
+      154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
+
+      154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
+      154,  154,  154
     } ;
 
-static yyconst flex_int16_t yy_chk[504] =
+static yyconst flex_int16_t yy_chk[414] =
     {   0,
-        0,    0,    3,  170,    3,  168,    3,    3,    4,    0,
-        4,    0,    4,    4,   24,   24,   24,   27,   27,   30,
-       30,   30,    0,    3,   37,   37,   37,   78,   78,    4,
+        0,    0,    3,  167,    3,  165,    3,    3,    4,    0,
+        4,    0,    4,    4,   22,   22,   22,   25,   25,   28,
+       28,   28,    0,    3,   35,   35,   35,   74,   74,    4,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
@@ -537,49 +527,39 @@ static yyconst flex_int16_t yy_chk[504] =
 
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
-        7,    7,    7,    7,    7,    7,    9,  152,   10,   46,
-        9,    9,   10,   10,   15,   28,   16,   40,   15,   15,
-       16,   16,   46,   49,   51,   87,   87,    9,   96,   10,
-      150,   98,   51,  125,  125,   15,   49,   16,   62,   62,
-       62,   96,  144,   28,   98,   40,   71,   71,   71,  143,
-        9,  141,   10,   11,   11,   11,   11,   11,  140,  121,
-       11,   11,   11,   11,   79,   79,   79,   11,   80,   80,
-       80,   93,   93,   93,   11,  126,  126,  126,  127,  127,
-
-      127,  128,  128,  128,  120,  118,  112,  108,  106,   99,
-       97,   95,   91,   76,   72,   11,   12,   12,   12,   12,
-       12,   63,   55,   12,   12,   12,   12,   54,   53,   52,
-       12,   48,   47,   45,   44,   43,   41,   12,   39,   38,
-       32,   31,   25,   19,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   12,   26,
-       26,   26,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   26,    0,    0,   26,    0,    0,    0,    0,    0,
-       26,    0,    0,    0,   26,    0,   26,    0,   26,   34,
-       34,   34,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,   34,    0,   34,   34,    0,   34,    0,
-       34,   50,   50,   50,   50,   50,    0,    0,   50,   50,
-       50,   50,    0,    0,    0,   50,    0,    0,    0,    0,
-        0,    0,   50,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   50,   64,   64,   64,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   64,    0,    0,   64,
-        0,    0,    0,    0,    0,   64,    0,    0,    0,   64,
-        0,   64,    0,   64,   73,   73,   73,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   73,    0,    0,   73,
-
-        0,    0,    0,    0,    0,   73,    0,    0,    0,   73,
-        0,   73,    0,   73,  157,  157,  157,  157,  158,  158,
-      158,  158,  159,  159,  159,  159,  160,  160,  160,  160,
-      161,  161,  161,  161,  162,  162,  162,  162,  163,  163,
-      163,  163,  164,    0,  164,  164,  165,  165,  166,  166,
-      167,  167,  169,  169,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-      156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
-
-      156,  156,  156
+        7,    7,    7,    7,    7,    7,    9,  150,   10,   44,
+        9,    9,   10,   10,   13,   26,   14,   38,   13,   13,
+       14,   14,   44,   47,   49,   51,  148,    9,   92,   10,
+       51,   94,   49,   83,   83,   13,   47,   14,   60,   60,
+       60,   92,  142,   26,   94,   38,   67,   67,   67,  140,
+        9,  138,   10,   24,   24,   24,   75,   75,   75,   76,
+       76,   76,   89,   89,   89,   24,  122,  122,   24,  123,
+      123,  123,  137,  118,   24,  124,  124,  124,   24,  117,
+
+       24,  116,   24,   32,   32,   32,  125,  125,  125,  114,
+      108,  104,  102,   95,   93,   91,   87,   32,   72,   32,
+       32,   68,   32,   61,   32,   48,   48,   48,   48,   48,
+       53,   52,   48,   48,   48,   48,   50,   46,   45,   48,
+       43,   42,   41,   39,   37,   36,   48,   30,   29,   23,
+       17,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   48,   62,   62,
+       62,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       62,    0,    0,   62,    0,    0,    0,    0,    0,   62,
+        0,    0,    0,   62,    0,   62,    0,   62,   69,   69,
+
+       69,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       69,    0,    0,   69,    0,    0,    0,    0,    0,   69,
+        0,    0,    0,   69,    0,   69,    0,   69,  155,  155,
+      155,  155,  156,  156,  156,  156,  157,  157,  157,  157,
+      158,  158,  158,  158,  159,  159,  159,  159,  160,  160,
+      160,  160,  161,    0,  161,  161,  162,  162,  163,  163,
+      164,  164,  166,  166,  154,  154,  154,  154,  154,  154,
+      154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
+      154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
+      154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
+
+      154,  154,  154,  154,  154,  154,  154,  154,  154,  154,
+      154,  154,  154
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -740,17 +720,16 @@ static int unreachable = 0;
 #define STR_RETURN() \
     (apr_pstrdup(yyextra->pool, (*str_ptr = '\0', str_ptr = str_buf)))
 
-#line 744 "util_expr_scan.c"
+#line 724 "util_expr_scan.c"
 
 #define INITIAL 0
 #define str 1
 #define expr 2
 #define var 3
 #define vararg 4
-#define split 5
-#define regex 6
-#define regsub 7
-#define regflags 8
+#define regex 5
+#define regsub 6
+#define regflags 7
 
 #ifndef YY_NO_UNISTD_H
 /* Special case for "unistd.h", since it is non-ANSI. We include it way
@@ -1048,7 +1027,7 @@ YY_DECL
  /*
   * Back off INITIAL pushes
   */
-#line 1052 "util_expr_scan.c"
+#line 1031 "util_expr_scan.c"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -1075,13 +1054,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 157 )
+                               if ( yy_current_state >= 155 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 156 );
+               while ( yy_current_state != 154 );
                yy_cp = yyg->yy_last_accepting_cpos;
                yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1149,7 +1128,7 @@ YY_RULE_SETUP
         return T_STRING;
     }
     yylval->num = yytext[1] - '0';
-    return T_REG_REF;
+    return T_BACKREF;
 }
        YY_BREAK
 /* variable inside string/arg */
@@ -1378,6 +1357,7 @@ YY_RULE_SETUP
 #line 359 "util_expr_scan.l"
 {
     if (yytext[0] == str_stop) {
+        yylval->cpVal = STR_RETURN();
         STATE_POP(0); /* <regex> */
         if (str_flag == 'm') {
             STATE_PUSH(regflags, 0);
@@ -1385,7 +1365,6 @@ YY_RULE_SETUP
         else {
             STATE_PUSH(regsub, 0);
         }
-        yylval->cpVal = STR_RETURN();
         return T_REG_MATCH;
     }
     STR_APPEND_CHECK(yytext[0], 1);
@@ -1397,12 +1376,12 @@ YY_RULE_SETUP
 #line 373 "util_expr_scan.l"
 {
     if (yytext[0] == str_stop) {
+        yylval->cpVal = STR_RETURN();
         STATE_POP(0); /* <regsub> */
         STATE_PUSH(regflags, 0);
+        return T_STRING;
     }
-    else {
-        STR_APPEND_CHECK(yytext[0], 1);
-    }
+    STR_APPEND_CHECK(yytext[0], 1);
 }
        YY_BREAK
 case 31:
@@ -1410,22 +1389,20 @@ case 31:
 YY_RULE_SETUP
 #line 382 "util_expr_scan.l"
 {
-    if (ap_strchr_c("ismg", yytext[0])) {
-        STR_APPEND_NOCHECK(yytext[0]);
-    }
-    else if (apr_isalnum(yytext[0])) {
-        PERROR("Invalid regexp flag(s)");
-    }
-    else {
+    if (!ap_strchr_c("ismg", yytext[0])) {
+        if (apr_isalnum(yytext[0])) {
+            PERROR("Invalid regexp flag(s)");
+        }
         yyless(0); /* not a flags, rewind */
         yylval->cpVal = STR_RETURN();
         STATE_POP(1); /* <regflags> */
         return T_REG_FLAGS;
     }
+    STR_APPEND_NOCHECK(yytext[0]);
 }
        YY_BREAK
 case YY_STATE_EOF(regflags):
-#line 396 "util_expr_scan.l"
+#line 394 "util_expr_scan.l"
 {
     yylval->cpVal = STR_RETURN();
     STATE_POP(1); /* <regflags> */
@@ -1434,17 +1411,17 @@ case YY_STATE_EOF(regflags):
        YY_BREAK
 case YY_STATE_EOF(regex):
 case YY_STATE_EOF(regsub):
-#line 401 "util_expr_scan.l"
+#line 399 "util_expr_scan.l"
 {
     PERROR("Unterminated regexp");
 }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 405 "util_expr_scan.l"
+#line 403 "util_expr_scan.l"
 {
     yylval->num = yytext[1] - '0';
-    return T_REG_REF;
+    return T_BACKREF;
 }
        YY_BREAK
 /*
@@ -1452,153 +1429,153 @@ YY_RULE_SETUP
   */
 case 33:
 YY_RULE_SETUP
-#line 413 "util_expr_scan.l"
+#line 411 "util_expr_scan.l"
 { return T_OP_STR_EQ; }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 414 "util_expr_scan.l"
+#line 412 "util_expr_scan.l"
 { return T_OP_STR_NE; }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 415 "util_expr_scan.l"
+#line 413 "util_expr_scan.l"
 { return T_OP_STR_LT; }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 416 "util_expr_scan.l"
+#line 414 "util_expr_scan.l"
 { return T_OP_STR_LE; }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 417 "util_expr_scan.l"
+#line 415 "util_expr_scan.l"
 { return T_OP_STR_GT; }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 418 "util_expr_scan.l"
+#line 416 "util_expr_scan.l"
 { return T_OP_STR_GE; }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 419 "util_expr_scan.l"
+#line 417 "util_expr_scan.l"
 { return T_OP_REG; }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 420 "util_expr_scan.l"
+#line 418 "util_expr_scan.l"
 { return T_OP_NRE; }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 421 "util_expr_scan.l"
+#line 419 "util_expr_scan.l"
 { return T_OP_AND; }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 422 "util_expr_scan.l"
+#line 420 "util_expr_scan.l"
 { return T_OP_AND; }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 423 "util_expr_scan.l"
+#line 421 "util_expr_scan.l"
 { return T_OP_OR; }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 424 "util_expr_scan.l"
+#line 422 "util_expr_scan.l"
 { return T_OP_OR; }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 425 "util_expr_scan.l"
+#line 423 "util_expr_scan.l"
 { return T_OP_NOT; }
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 426 "util_expr_scan.l"
+#line 424 "util_expr_scan.l"
 { return T_OP_NOT; }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 427 "util_expr_scan.l"
+#line 425 "util_expr_scan.l"
 { return T_OP_CONCAT; }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 428 "util_expr_scan.l"
+#line 426 "util_expr_scan.l"
 { return T_OP_IN; }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 429 "util_expr_scan.l"
+#line 427 "util_expr_scan.l"
 { return T_OP_EQ; }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 430 "util_expr_scan.l"
+#line 428 "util_expr_scan.l"
 { return T_OP_NE; }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 431 "util_expr_scan.l"
+#line 429 "util_expr_scan.l"
 { return T_OP_GE; }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 432 "util_expr_scan.l"
+#line 430 "util_expr_scan.l"
 { return T_OP_LE; }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 433 "util_expr_scan.l"
+#line 431 "util_expr_scan.l"
 { return T_OP_GT; }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 434 "util_expr_scan.l"
+#line 432 "util_expr_scan.l"
 { return T_OP_LT; }
        YY_BREAK
 /* for compatibility with ssl_expr */
 case 55:
 YY_RULE_SETUP
-#line 437 "util_expr_scan.l"
+#line 435 "util_expr_scan.l"
 { return T_OP_LT; }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 438 "util_expr_scan.l"
+#line 436 "util_expr_scan.l"
 { return T_OP_LE; }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 439 "util_expr_scan.l"
+#line 437 "util_expr_scan.l"
 { return T_OP_GT; }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 440 "util_expr_scan.l"
+#line 438 "util_expr_scan.l"
 { return T_OP_GE; }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 441 "util_expr_scan.l"
+#line 439 "util_expr_scan.l"
 { return T_OP_NE; }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 442 "util_expr_scan.l"
+#line 440 "util_expr_scan.l"
 { return T_OP_EQ; }
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 443 "util_expr_scan.l"
+#line 441 "util_expr_scan.l"
 { return T_OP_IN; }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 445 "util_expr_scan.l"
+#line 443 "util_expr_scan.l"
 {
     yylval->cpVal = apr_pstrdup(yyextra->pool, yytext + 1);
     return T_OP_BINARY;
@@ -1606,72 +1583,55 @@ YY_RULE_SETUP
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 450 "util_expr_scan.l"
+#line 448 "util_expr_scan.l"
 {
     yylval->cpVal = apr_pstrdup(yyextra->pool, yytext + 1);
     return T_OP_UNARY;
 }
        YY_BREAK
-/* Split a string (or list) into a(nother) list */
+/* Apply subtitution to a string */
 case 64:
 YY_RULE_SETUP
-#line 456 "util_expr_scan.l"
+#line 454 "util_expr_scan.l"
 {
-    STATE_PUSH(split, 0);
-    return T_OP_SPLIT;
+    return T_OP_SUB;
 }
        YY_BREAK
+/* Join a list into a string */
 case 65:
 YY_RULE_SETUP
-#line 460 "util_expr_scan.l"
+#line 459 "util_expr_scan.l"
 {
-    STATE_POP(0); /* <split> */
-    STATE_PUSH(regex, 1);
-    str_stop = yytext[0];
-    str_flag = 'S';
+    return T_OP_JOIN;
 }
        YY_BREAK
+/* Split a string (or list) into a(nother) list */
 case 66:
-/* rule 66 can match eol */
 YY_RULE_SETUP
-#line 466 "util_expr_scan.l"
+#line 464 "util_expr_scan.l"
 {
-    PERROR("Expecting split regular expression");
-}
-       YY_BREAK
-case YY_STATE_EOF(split):
-#line 469 "util_expr_scan.l"
-{
-    PERROR("Unterminated split");
-}
-       YY_BREAK
-/* Join a list into a string */
-case 67:
-YY_RULE_SETUP
-#line 474 "util_expr_scan.l"
-{
-    return T_OP_JOIN;
+    return T_OP_SPLIT;
 }
        YY_BREAK
 /*
   * Specials
   */
-case 68:
+case 67:
 YY_RULE_SETUP
-#line 481 "util_expr_scan.l"
+#line 471 "util_expr_scan.l"
 { return T_TRUE; }
        YY_BREAK
-case 69:
+case 68:
 YY_RULE_SETUP
-#line 482 "util_expr_scan.l"
+#line 472 "util_expr_scan.l"
 { return T_FALSE; }
        YY_BREAK
 /*
   * Digits
   */
-case 70:
+case 69:
 YY_RULE_SETUP
-#line 487 "util_expr_scan.l"
+#line 477 "util_expr_scan.l"
 {
     yylval->cpVal = apr_pstrdup(yyextra->pool, yytext);
     return T_DIGIT;
@@ -1680,9 +1640,9 @@ YY_RULE_SETUP
 /*
   * Identifiers
   */
-case 71:
+case 70:
 YY_RULE_SETUP
-#line 495 "util_expr_scan.l"
+#line 485 "util_expr_scan.l"
 {
     yylval->cpVal = apr_pstrdup(yyextra->pool, yytext);
     return T_ID;
@@ -1691,9 +1651,9 @@ YY_RULE_SETUP
 /*
   * These are parts of the grammar and are returned as is
   */
-case 72:
+case 71:
 YY_RULE_SETUP
-#line 503 "util_expr_scan.l"
+#line 493 "util_expr_scan.l"
 {
     return yytext[0];
 }
@@ -1701,20 +1661,20 @@ YY_RULE_SETUP
 /*
   * Anything else is an error
   */
-case 73:
-/* rule 73 can match eol */
+case 72:
+/* rule 72 can match eol */
 YY_RULE_SETUP
-#line 510 "util_expr_scan.l"
+#line 500 "util_expr_scan.l"
 {
     PERROR_CHAR("Parse error near character ", yytext[0]);
 }
        YY_BREAK
-case 74:
+case 73:
 YY_RULE_SETUP
-#line 514 "util_expr_scan.l"
+#line 504 "util_expr_scan.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
        YY_BREAK
-#line 1718 "util_expr_scan.c"
+#line 1678 "util_expr_scan.c"
 case YY_STATE_EOF(INITIAL):
        yyterminate();
 
@@ -2010,7 +1970,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 157 )
+                       if ( yy_current_state >= 155 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
@@ -2039,11 +1999,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 157 )
+               if ( yy_current_state >= 155 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
-       yy_is_jam = (yy_current_state == 156);
+       yy_is_jam = (yy_current_state == 154);
 
        (void)yyg;
        return yy_is_jam ? 0 : yy_current_state;
@@ -2873,7 +2833,7 @@ void ap_expr_yyfree (void * ptr , yyscan_t yyscanner)
 
 #define YYTABLES_NAME "yytables"
 
-#line 514 "util_expr_scan.l"
+#line 504 "util_expr_scan.l"