[Groonga-commit] groonga/groonga at f9e4ff7 [master] Add support for array literal in script syntax

Back to archive index
Kouhei Sutou null+****@clear*****
Wed Apr 17 13:02:20 JST 2019


Kouhei Sutou	2019-04-17 13:02:20 +0900 (Wed, 17 Apr 2019)

  Revision: f9e4ff7b204a65b68b895f762702f9e217c67a60
  https://github.com/groonga/groonga/commit/f9e4ff7b204a65b68b895f762702f9e217c67a60

  Message:
    Add support for array literal in script syntax
    
    TODO:
    
      * Add support for expression in array literal such as ["a" + "b"]

  Added files:
    test/command/suite/select/filter/vector/equal_complex.expected
    test/command/suite/select/filter/vector/equal_complex.test
  Modified files:
    lib/expr.c
    lib/grn_ecmascript.c
    lib/grn_ecmascript.lemon
    test/command/suite/select/filter/vector/equal.expected
    test/command/suite/select/filter/vector/equal.test
    test/command/suite/select/filter/vector/not_equal.expected
    test/command/suite/select/filter/vector/not_equal.test

  Modified: lib/expr.c (+5 -0)
===================================================================
--- lib/expr.c    2019-04-17 12:11:06 +0900 (b2cc25ad9)
+++ lib/expr.c    2019-04-17 13:02:20 +0900 (143795d22)
@@ -5105,6 +5105,7 @@ typedef struct {
   grn_hash *weight_set;
   snip_cond *snip_conds;
   grn_hash *object_literal;
+  grn_obj *array_literal;
   int paren_depth;
   struct {
     const char *string;
@@ -6609,6 +6610,7 @@ grn_expr_parse(grn_ctx *ctx, grn_obj *expr,
     efsi.opt.weight_vector = NULL;
     efsi.weight_set = NULL;
     efsi.object_literal = NULL;
+    efsi.array_literal = NULL;
     efsi.paren_depth = 0;
     efsi.pending_token.string = NULL;
     efsi.pending_token.string_length = 0;
@@ -6659,6 +6661,9 @@ grn_expr_parse(grn_ctx *ctx, grn_obj *expr,
       });
       grn_hash_close(ctx, efsi.object_literal);
     }
+    if (efsi.array_literal) {
+      GRN_OBJ_FIN(ctx, efsi.array_literal);
+    }
   } else {
     ERR(GRN_INVALID_ARGUMENT, "variable is not defined correctly");
   }

  Modified: lib/grn_ecmascript.c (+953 -800)
===================================================================
--- lib/grn_ecmascript.c    2019-04-17 12:11:06 +0900 (afd1373a4)
+++ lib/grn_ecmascript.c    2019-04-17 13:02:20 +0900 (073a3009d)
@@ -95,13 +95,13 @@
 #endif
 /************* Begin control #defines *****************************************/
 #define YYCODETYPE unsigned char
-#define YYNOCODE 114
+#define YYNOCODE 113
 #define YYACTIONTYPE unsigned short int
 #define grn_expr_parserTOKENTYPE  int 
 typedef union {
   int yyinit;
   grn_expr_parserTOKENTYPE yy0;
-  void * yy217;
+  void * yy165;
 } YYMINORTYPE;
 #ifndef YYSTACKDEPTH
 #define YYSTACKDEPTH 100
@@ -116,17 +116,17 @@ typedef union {
 #define grn_expr_parserCTX_PARAM
 #define grn_expr_parserCTX_FETCH
 #define grn_expr_parserCTX_STORE
-#define YYNSTATE             147
-#define YYNRULE              137
+#define YYNSTATE             146
+#define YYNRULE              133
 #define YYNTOKEN             76
-#define YY_MAX_SHIFT         146
-#define YY_MIN_SHIFTREDUCE   234
-#define YY_MAX_SHIFTREDUCE   370
-#define YY_ERROR_ACTION      371
-#define YY_ACCEPT_ACTION     372
-#define YY_NO_ACTION         373
-#define YY_MIN_REDUCE        374
-#define YY_MAX_REDUCE        510
+#define YY_MAX_SHIFT         145
+#define YY_MIN_SHIFTREDUCE   228
+#define YY_MAX_SHIFTREDUCE   360
+#define YY_ERROR_ACTION      361
+#define YY_ACCEPT_ACTION     362
+#define YY_NO_ACTION         363
+#define YY_MIN_REDUCE        364
+#define YY_MAX_REDUCE        496
 /************* End control #defines *******************************************/
 #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])))
 
@@ -193,425 +193,395 @@ typedef union {
 **  yy_default[]       Default action for each state.
 **
 *********** Begin parsing tables **********************************************/
-#define YY_ACTTAB_COUNT (1820)
+#define YY_ACTTAB_COUNT (1663)
 static const YYACTIONTYPE yy_action[] = {
- /*     0 */   374,    3,   73,  117,  117,  138,  378,  326,    2,  377,
- /*    10 */    55,   84,  131,    1,  133,   72,  372,   80,  114,   10,
- /*    20 */   383,   80,   76,  114,  114,   92,  128,  127,  141,  140,
- /*    30 */   139,  122,   89,  105,  118,  106,  106,  106,   92,   76,
- /*    40 */   383,  383,   76,   76,  326,   75,  381,   85,   84,  146,
- /*    50 */     9,  380,   72,  464,   67,   66,   54,   53,   52,   70,
- /*    60 */    69,   68,   65,   64,   62,   61,   60,  351,  352,  353,
- /*    70 */   354,  355,    4,  129,   71,   59,   58,   76,  129,  129,
- /*    80 */    92,  128,  127,  141,  140,  139,  122,   89,  105,  118,
- /*    90 */   106,  106,  106,   92,   76,   79,  463,   76,   76,   79,
- /*   100 */   366,  117,  117,  138,  379,  326,    2,   77,   55,   84,
- /*   110 */   131,    1,    5,   72,   79,  120,  112,  506,   79,   76,
- /*   120 */   120,  120,   92,  128,  127,  141,  140,  139,  122,   89,
- /*   130 */   105,  118,  106,  106,  106,   92,   76,  458,  135,   76,
- /*   140 */    76,    7,  303,   63,   78,  349,   74,  112,  135,  442,
- /*   150 */   486,  376,   67,   66,  505,  138,  375,   70,   69,   68,
- /*   160 */    65,   64,   62,   61,   60,  351,  352,  353,  354,  355,
- /*   170 */     4,   51,   50,   49,   48,   47,   46,   45,   44,   43,
- /*   180 */    42,   41,   40,   39,   38,   37,   83,   67,   66,  315,
- /*   190 */    57,   56,   70,   69,   68,   65,   64,   62,   61,   60,
- /*   200 */   351,  352,  353,  354,  355,    4,  113,  320,  316,   76,
- /*   210 */   457,  457,   92,  128,  127,  141,  140,  139,  122,   89,
- /*   220 */   105,  118,  106,  106,  106,   92,   76,   31,   30,   76,
- /*   230 */    76,    7,  132,   63,    6,  349,   74,  452,  319,  360,
- /*   240 */   134,   76,   88,   88,   92,  128,  127,  141,  140,  139,
- /*   250 */   122,   89,  105,  118,  106,  106,  106,   92,   76,  462,
- /*   260 */    32,   76,   76,   11,   88,    7,  242,   63,   28,  349,
- /*   270 */    74,   24,  307,  360,  359,   28,    7,   67,   66,   23,
- /*   280 */   349,   74,   70,   69,   68,   65,   64,   62,   61,   60,
- /*   290 */   351,  352,  353,  354,  355,    4,  357,    7,    8,   63,
- /*   300 */   137,  349,   74,  348,  367,  359,   33,   36,   35,   29,
- /*   310 */    28,   67,   66,  300,  301,   34,   70,   69,   68,   65,
- /*   320 */    64,   62,   61,   60,  351,  352,  353,  354,  355,    4,
- /*   330 */   356,  358,   25,   26,   28,  351,  352,  353,  354,  355,
- /*   340 */     4,  373,  373,   67,   66,  373,  373,  373,   70,   69,
- /*   350 */    68,   65,   64,   62,   61,   60,  351,  352,  353,  354,
- /*   360 */   355,    4,   76,  457,  457,   92,  128,  127,  141,  140,
- /*   370 */   139,  122,   89,  105,  118,  106,  106,  106,   92,   76,
- /*   380 */   373,  373,   76,   76,  373,  373,  373,  373,  373,  373,
- /*   390 */   454,  306,  373,  373,  373,   76,  449,  449,   92,  128,
- /*   400 */   127,  141,  140,  139,  122,   89,  105,  118,  106,  106,
- /*   410 */   106,   92,   76,  373,  373,   76,   76,  373,  373,  373,
- /*   420 */   373,  373,  116,  120,  373,  373,  373,   76,  120,  120,
- /*   430 */    92,  128,  127,  141,  140,  139,  122,   89,  105,  118,
- /*   440 */   106,  106,  106,   92,   76,  123,  373,   76,   76,   76,
- /*   450 */   123,  123,   92,  128,  127,  141,  140,  139,  122,   89,
- /*   460 */   105,  118,  106,  106,  106,   92,   76,  373,  373,   76,
- /*   470 */    76,  373,    7,  373,   63,  129,  349,   74,  373,   76,
- /*   480 */   129,  129,   92,  128,  127,  141,  140,  139,  122,   89,
- /*   490 */   105,  118,  106,  106,  106,   92,   76,  373,  373,   76,
- /*   500 */    76,    7,  373,   63,  373,  349,   74,  373,  373,  373,
- /*   510 */   373,  373,  373,  373,  373,  373,  373,  373,   67,   66,
- /*   520 */   373,  373,  373,   70,   69,   68,   65,   64,   62,   61,
- /*   530 */    60,  351,  352,  130,  354,  355,    4,  373,  373,  373,
- /*   540 */   373,  373,  373,  373,  373,  373,  373,   67,   66,  373,
- /*   550 */   373,  373,   70,   69,   68,   65,   64,   62,   61,   60,
- /*   560 */   351,  352,  353,  354,  355,    4,   76,  503,  503,   92,
- /*   570 */   128,  127,  141,  140,  139,  122,   89,  105,  118,  106,
- /*   580 */   106,  106,   92,   76,  373,  373,   76,   76,  373,   76,
- /*   590 */   502,  502,   92,  128,  127,  141,  140,  139,  122,   89,
- /*   600 */   105,  118,  106,  106,  106,   92,   76,  373,  373,   76,
- /*   610 */    76,   76,  396,  396,   92,  128,  127,  141,  140,  139,
- /*   620 */   122,   89,  105,  118,  106,  106,  106,   92,   76,  373,
- /*   630 */   373,   76,   76,  373,  373,  373,   76,  395,  395,   92,
- /*   640 */   128,  127,  141,  140,  139,  122,   89,  105,  118,  106,
- /*   650 */   106,  106,   92,   76,  373,  373,   76,   76,   76,  394,
- /*   660 */   394,   92,  128,  127,  141,  140,  139,  122,   89,  105,
- /*   670 */   118,  106,  106,  106,   92,   76,  373,  373,   76,   76,
- /*   680 */    76,  393,  393,   92,  128,  127,  141,  140,  139,  122,
- /*   690 */    89,  105,  118,  106,  106,  106,   92,   76,  373,  373,
- /*   700 */    76,   76,   76,  392,  392,   92,  128,  127,  141,  140,
- /*   710 */   139,  122,   89,  105,  118,  106,  106,  106,   92,   76,
- /*   720 */   373,  373,   76,   76,   76,  391,  391,   92,  128,  127,
- /*   730 */   141,  140,  139,  122,   89,  105,  118,  106,  106,  106,
- /*   740 */    92,   76,  373,  373,   76,   76,   76,  390,  390,   92,
- /*   750 */   128,  127,  141,  140,  139,  122,   89,  105,  118,  106,
- /*   760 */   106,  106,   92,   76,  373,  373,   76,   76,   76,  389,
- /*   770 */   389,   92,  128,  127,  141,  140,  139,  122,   89,  105,
- /*   780 */   118,  106,  106,  106,   92,   76,  373,  373,   76,   76,
- /*   790 */    76,  388,  388,   92,  128,  127,  141,  140,  139,  122,
- /*   800 */    89,  105,  118,  106,  106,  106,   92,   76,  373,  373,
- /*   810 */    76,   76,   76,  387,  387,   92,  128,  127,  141,  140,
- /*   820 */   139,  122,   89,  105,  118,  106,  106,  106,   92,   76,
- /*   830 */   373,  373,   76,   76,   76,  386,  386,   92,  128,  127,
- /*   840 */   141,  140,  139,  122,   89,  105,  118,  106,  106,  106,
- /*   850 */    92,   76,  373,  373,   76,   76,   76,  450,  450,   92,
- /*   860 */   128,  127,  141,  140,  139,  122,   89,  105,  118,  106,
- /*   870 */   106,  106,   92,   76,  373,  373,   76,   76,   76,  445,
- /*   880 */   445,   92,  128,  127,  141,  140,  139,  122,   89,  105,
- /*   890 */   118,  106,  106,  106,   92,   76,  373,  373,   76,   76,
- /*   900 */    76,  397,  397,   92,  128,  127,  141,  140,  139,  122,
- /*   910 */    89,  105,  118,  106,  106,  106,   92,   76,  373,  373,
- /*   920 */    76,   76,   76,  145,  145,   92,  128,  127,  141,  140,
- /*   930 */   139,  122,   89,  105,  118,  106,  106,  106,   92,   76,
- /*   940 */   373,  373,   76,   76,   76,  385,  385,   92,  128,  127,
- /*   950 */   141,  140,  139,  122,   89,  105,  118,  106,  106,  106,
- /*   960 */    92,   76,  373,  373,   76,   76,   76,  384,  384,   92,
- /*   970 */   128,  127,  141,  140,  139,  122,   89,  105,  118,  106,
- /*   980 */   106,  106,   92,   76,  373,   76,   76,   76,  124,  373,
- /*   990 */   115,  141,  140,  139,  122,   89,  105,  118,  106,  106,
- /*  1000 */   106,  124,   76,  373,   76,   76,   76,  124,  373,  373,
- /*  1010 */   136,  140,  139,  122,   89,  105,  118,  106,  106,  106,
- /*  1020 */   124,   76,  373,   76,   76,   76,  124,  373,  373,  144,
- /*  1030 */   140,  139,  122,   89,  105,  118,  106,  106,  106,  124,
- /*  1040 */    76,  373,   76,   76,   76,  124,  373,  373,  373,  143,
- /*  1050 */   139,  122,   89,  105,  118,  106,  106,  106,  124,   76,
- /*  1060 */   373,   76,   76,   76,  124,  373,  373,  373,  373,  142,
- /*  1070 */   122,   89,  105,  118,  106,  106,  106,  124,   76,  373,
- /*  1080 */   373,   76,   76,  373,  373,  373,  373,   27,   22,   21,
- /*  1090 */    20,   19,   18,   17,   16,   15,   14,   13,   12,   76,
- /*  1100 */   373,  373,  124,  373,  373,  373,  373,  373,  126,   89,
- /*  1110 */   105,  118,  106,  106,  106,  124,   76,  373,  373,   76,
- /*  1120 */    76,  373,   76,  373,  373,  124,  373,  373,  373,  373,
- /*  1130 */   300,  301,   90,  105,  118,  106,  106,  106,  124,   76,
- /*  1140 */   373,   76,   76,   76,  124,  373,  373,  373,  373,  373,
- /*  1150 */   373,   91,  105,  118,  106,  106,  106,  124,   76,  373,
- /*  1160 */   373,   76,   76,  373,  373,   87,   86,   82,   81,  326,
- /*  1170 */    75,  327,   85,   84,  146,    9,  461,   72,  373,   87,
- /*  1180 */    86,   82,   81,  326,   75,  373,   85,   84,  146,    9,
- /*  1190 */   373,   72,   76,  373,  373,  124,  373,  373,  373,  373,
- /*  1200 */   373,  373,  373,   93,  118,  106,  106,  106,  124,   76,
- /*  1210 */   373,  373,   76,   76,   76,  373,  373,  124,  373,  373,
- /*  1220 */   373,  373,  373,  373,  373,   94,  118,  106,  106,  106,
- /*  1230 */   124,   76,  373,  373,   76,   76,   76,  373,  373,  124,
- /*  1240 */   373,  373,  373,  373,  373,  373,  373,   95,  118,  106,
- /*  1250 */   106,  106,  124,   76,  373,   76,   76,   76,  124,  373,
- /*  1260 */   373,  373,  373,  373,  373,  373,   96,  118,  106,  106,
- /*  1270 */   106,  124,   76,  373,  373,   76,   76,  373,  373,   76,
- /*  1280 */   373,  373,  124,  373,  373,  373,  373,  373,  373,  373,
- /*  1290 */    97,  118,  106,  106,  106,  124,   76,  373,   76,   76,
- /*  1300 */    76,  124,  373,  373,  373,  373,  373,  373,  373,   98,
- /*  1310 */   118,  106,  106,  106,  124,   76,  373,  373,   76,   76,
- /*  1320 */    76,  373,  373,  124,  373,  373,  373,  373,  373,  373,
- /*  1330 */   373,   99,  118,  106,  106,  106,  124,   76,  373,   76,
- /*  1340 */    76,   76,  124,  373,  373,  373,  373,  373,  373,  373,
- /*  1350 */   100,  118,  106,  106,  106,  124,   76,  373,  373,   76,
- /*  1360 */    76,  373,  373,   76,  373,  373,  124,  373,  373,  373,
- /*  1370 */   373,  373,  373,  373,  101,  118,  106,  106,  106,  124,
- /*  1380 */    76,  373,   76,   76,   76,  124,  373,  373,  373,  373,
- /*  1390 */   373,  373,  373,  102,  118,  106,  106,  106,  124,   76,
- /*  1400 */   373,  373,   76,   76,   76,  373,  373,  124,  373,  373,
- /*  1410 */   373,  373,  373,  373,  373,  103,  118,  106,  106,  106,
- /*  1420 */   124,   76,  373,   76,   76,   76,  124,  373,  373,  373,
- /*  1430 */   373,  373,  373,  373,  104,  118,  106,  106,  106,  124,
- /*  1440 */    76,  373,  373,   76,   76,  373,  373,   76,  373,  373,
- /*  1450 */   124,  373,  373,  373,  373,  373,  373,  373,  107,  118,
- /*  1460 */   106,  106,  106,  124,   76,  373,   76,   76,   76,  124,
- /*  1470 */   373,  373,  373,  373,  373,  373,  373,  109,  118,  106,
- /*  1480 */   106,  106,  124,   76,  373,  373,   76,   76,   76,  373,
- /*  1490 */   373,  124,  373,  373,  373,  373,  373,  373,  373,  111,
- /*  1500 */   118,  106,  106,  106,  124,   76,  373,   76,   76,   76,
- /*  1510 */   124,  373,  373,  373,  373,  373,  373,  373,  373,  119,
- /*  1520 */   106,  106,  106,  124,   76,  373,  373,   76,   76,  373,
- /*  1530 */   373,   76,  373,  373,  124,  373,  373,  373,  373,  373,
- /*  1540 */   373,  373,  373,  121,  106,  106,  106,  124,   76,  373,
- /*  1550 */    76,   76,   76,  124,  373,  373,  373,  373,  373,  373,
- /*  1560 */   373,  373,  125,  106,  106,  106,  124,   76,  373,  373,
- /*  1570 */    76,   76,  373,  373,  379,   76,  373,  373,  124,  373,
- /*  1580 */   373,  373,  373,  373,   76,  373,  373,  124,  373,  436,
- /*  1590 */   436,  124,   76,  373,  373,   76,   76,  108,  108,  108,
- /*  1600 */   124,   76,  373,   76,   76,   76,  124,  373,  373,  373,
- /*  1610 */   373,   76,  373,  373,  124,  373,  110,  110,  110,  124,
- /*  1620 */    76,  373,  373,   76,   76,  428,  428,  124,   76,  373,
- /*  1630 */    76,   76,   76,  124,  373,  373,  373,  373,  373,  373,
- /*  1640 */   373,  373,  373,  373,  427,  427,  124,   76,  373,   76,
- /*  1650 */    76,   76,  124,  373,  373,  373,  373,  373,   76,  373,
- /*  1660 */   373,  124,  373,  439,  439,  124,   76,  373,   76,   76,
- /*  1670 */    76,  124,  438,  438,  124,   76,  373,  373,   76,   76,
- /*  1680 */   373,  373,  437,  437,  124,   76,  373,   76,   76,   76,
- /*  1690 */   124,  373,  373,  373,  373,   76,  373,  373,  124,  373,
- /*  1700 */   373,  436,  436,  124,   76,  373,  373,   76,   76,  435,
- /*  1710 */   435,  124,   76,  373,   76,   76,   76,  124,  373,  373,
- /*  1720 */   373,  373,  373,  373,  373,  373,  373,  373,  434,  434,
- /*  1730 */   124,   76,  373,   76,   76,   76,  124,  373,  373,  373,
- /*  1740 */   373,  373,   76,  373,  373,  124,  373,  433,  433,  124,
- /*  1750 */    76,  373,   76,   76,   76,  124,  432,  432,  124,   76,
- /*  1760 */   373,  373,   76,   76,  373,  373,  431,  431,  124,   76,
- /*  1770 */   373,   76,   76,   76,  124,  373,  373,  373,  373,   76,
- /*  1780 */   373,  373,  124,  373,  373,  430,  430,  124,   76,  373,
- /*  1790 */   373,   76,   76,  429,  429,  124,   76,  373,   76,   76,
- /*  1800 */    76,  124,  373,  373,  373,  373,  373,  373,  373,  373,
- /*  1810 */   373,  373,  426,  426,  124,   76,  373,  373,   76,   76,
+ /*     0 */   364,    3,   72,  115,  115,  137,  368,  323,    2,  367,
+ /*    10 */    54,   83,  130,    1,  371,   71,  362,   79,  112,   82,
+ /*    20 */   373,   79,   75,  112,  112,   90,  127,  126,  140,  139,
+ /*    30 */   138,  121,   87,  103,  117,  104,  104,  104,   90,   75,
+ /*    40 */   373,  373,   75,   75,  323,   74,  132,   84,   83,  145,
+ /*    50 */     9,  370,   71,  369,   66,   65,   53,   52,   51,   69,
+ /*    60 */    68,   67,   64,   63,   61,   60,   59,  348,  349,  350,
+ /*    70 */   351,  352,    6,  128,   70,   58,   57,   75,  128,  128,
+ /*    80 */    90,  127,  126,  140,  139,  138,  121,   87,  103,  117,
+ /*    90 */   104,  104,  104,   90,   75,   78,  456,   75,   75,   78,
+ /*   100 */   115,  115,  137,  432,  479,  323,    2,  110,   54,   83,
+ /*   110 */   130,    1,    4,   71,   78,  119,  491,  137,   78,   75,
+ /*   120 */   119,  119,   90,  127,  126,  140,  139,  138,  121,   87,
+ /*   130 */   103,  117,  104,  104,  104,   90,   75,  110,  134,   75,
+ /*   140 */    75,    7,  300,   62,   77,  346,   73,   30,   29,  451,
+ /*   150 */   134,  356,   66,   65,   56,   55,  366,   69,   68,   67,
+ /*   160 */    64,   63,   61,   60,   59,  348,  349,  350,  351,  352,
+ /*   170 */     6,   50,   49,   48,   47,   46,   45,   44,   43,   42,
+ /*   180 */    41,   40,   39,   38,   37,   36,  365,   66,   65,  312,
+ /*   190 */    35,   34,   69,   68,   67,   64,   63,   61,   60,   59,
+ /*   200 */   348,  349,  350,  351,  352,    6,  111,  457,  313,   75,
+ /*   210 */   450,  450,   90,  127,  126,  140,  139,  138,  121,   87,
+ /*   220 */   103,  117,  104,  104,  104,   90,   75,  304,  345,   75,
+ /*   230 */    75,  492,   23,   27,   21,   27,  445,   75,  450,  450,
+ /*   240 */    90,  127,  126,  140,  139,  138,  121,   87,  103,  117,
+ /*   250 */   104,  104,  104,   90,   75,  294,  295,   75,   75,  317,
+ /*   260 */   236,   76,   27,  131,  447,  316,  133,   31,  357,   22,
+ /*   270 */    33,   75,  442,  442,   90,  127,  126,  140,  139,  138,
+ /*   280 */   121,   87,  103,  117,  104,  104,  104,   90,   75,  297,
+ /*   290 */   303,   75,   75,   32,   24,  363,  363,  114,   75,  435,
+ /*   300 */   435,   90,  127,  126,  140,  139,  138,  121,   87,  103,
+ /*   310 */   117,  104,  104,  104,   90,   75,   28,  119,   75,   75,
+ /*   320 */   116,   75,  119,  119,   90,  127,  126,  140,  139,  138,
+ /*   330 */   121,   87,  103,  117,  104,  104,  104,   90,   75,  363,
+ /*   340 */    25,   75,   75,  363,  122,  363,  363,  363,   75,  122,
+ /*   350 */   122,   90,  127,  126,  140,  139,  138,  121,   87,  103,
+ /*   360 */   117,  104,  104,  104,   90,   75,  128,  363,   75,   75,
+ /*   370 */    75,  128,  128,   90,  127,  126,  140,  139,  138,  121,
+ /*   380 */    87,  103,  117,  104,  104,  104,   90,   75,  363,  363,
+ /*   390 */    75,   75,    7,  363,   62,  363,  346,   73,   75,  386,
+ /*   400 */   386,   90,  127,  126,  140,  139,  138,  121,   87,  103,
+ /*   410 */   117,  104,  104,  104,   90,   75,  363,  363,   75,   75,
+ /*   420 */    75,  385,  385,   90,  127,  126,  140,  139,  138,  121,
+ /*   430 */    87,  103,  117,  104,  104,  104,   90,   75,   66,   65,
+ /*   440 */    75,   75,  455,   69,   68,   67,   64,   63,   61,   60,
+ /*   450 */    59,  348,  349,  129,  351,  352,    6,    7,   27,   62,
+ /*   460 */   363,  346,   73,   75,  384,  384,   90,  127,  126,  140,
+ /*   470 */   139,  138,  121,   87,  103,  117,  104,  104,  104,   90,
+ /*   480 */    75,  363,  363,   75,   75,   75,  383,  383,   90,  127,
+ /*   490 */   126,  140,  139,  138,  121,   87,  103,  117,  104,  104,
+ /*   500 */   104,   90,   75,   66,   65,   75,   75,  363,   69,   68,
+ /*   510 */    67,   64,   63,   61,   60,   59,  348,  349,  350,  351,
+ /*   520 */   352,    6,   75,  382,  382,   90,  127,  126,  140,  139,
+ /*   530 */   138,  121,   87,  103,  117,  104,  104,  104,   90,   75,
+ /*   540 */   363,  363,   75,   75,  363,   75,  381,  381,   90,  127,
+ /*   550 */   126,  140,  139,  138,  121,   87,  103,  117,  104,  104,
+ /*   560 */   104,   90,   75,  363,  363,   75,   75,   75,  380,  380,
+ /*   570 */    90,  127,  126,  140,  139,  138,  121,   87,  103,  117,
+ /*   580 */   104,  104,  104,   90,   75,  363,  363,   75,   75,   75,
+ /*   590 */   379,  379,   90,  127,  126,  140,  139,  138,  121,   87,
+ /*   600 */   103,  117,  104,  104,  104,   90,   75,  363,  363,   75,
+ /*   610 */    75,   75,  378,  378,   90,  127,  126,  140,  139,  138,
+ /*   620 */   121,   87,  103,  117,  104,  104,  104,   90,   75,  363,
+ /*   630 */   363,   75,   75,   75,  377,  377,   90,  127,  126,  140,
+ /*   640 */   139,  138,  121,   87,  103,  117,  104,  104,  104,   90,
+ /*   650 */    75,  363,  363,   75,   75,   75,  376,  376,   90,  127,
+ /*   660 */   126,  140,  139,  138,  121,   87,  103,  117,  104,  104,
+ /*   670 */   104,   90,   75,  363,  363,   75,   75,   75,  443,  443,
+ /*   680 */    90,  127,  126,  140,  139,  138,  121,   87,  103,  117,
+ /*   690 */   104,  104,  104,   90,   75,  363,  363,   75,   75,   75,
+ /*   700 */   438,  438,   90,  127,  126,  140,  139,  138,  121,   87,
+ /*   710 */   103,  117,  104,  104,  104,   90,   75,  363,  363,   75,
+ /*   720 */    75,   75,  489,  489,   90,  127,  126,  140,  139,  138,
+ /*   730 */   121,   87,  103,  117,  104,  104,  104,   90,   75,  363,
+ /*   740 */   363,   75,   75,   75,  387,  387,   90,  127,  126,  140,
+ /*   750 */   139,  138,  121,   87,  103,  117,  104,  104,  104,   90,
+ /*   760 */    75,  363,  363,   75,   75,   75,  144,  144,   90,  127,
+ /*   770 */   126,  140,  139,  138,  121,   87,  103,  117,  104,  104,
+ /*   780 */   104,   90,   75,  363,  363,   75,   75,   75,  375,  375,
+ /*   790 */    90,  127,  126,  140,  139,  138,  121,   87,  103,  117,
+ /*   800 */   104,  104,  104,   90,   75,  363,  363,   75,   75,   75,
+ /*   810 */   374,  374,   90,  127,  126,  140,  139,  138,  121,   87,
+ /*   820 */   103,  117,  104,  104,  104,   90,   75,  363,   75,   75,
+ /*   830 */    75,  123,  363,  113,  140,  139,  138,  121,   87,  103,
+ /*   840 */   117,  104,  104,  104,  123,   75,  363,   75,   75,   75,
+ /*   850 */   123,  363,  363,  135,  139,  138,  121,   87,  103,  117,
+ /*   860 */   104,  104,  104,  123,   75,  363,   75,   75,   75,  123,
+ /*   870 */   363,  363,  143,  139,  138,  121,   87,  103,  117,  104,
+ /*   880 */   104,  104,  123,   75,    5,   75,   75,   75,  123,  363,
+ /*   890 */   363,  363,  142,  138,  121,   87,  103,  117,  104,  104,
+ /*   900 */   104,  123,   75,  363,   75,   75,   75,  123,  363,  363,
+ /*   910 */   363,  363,  141,  121,   87,  103,  117,  104,  104,  104,
+ /*   920 */   123,   75,  363,  363,   75,   75,  363,  363,  363,  363,
+ /*   930 */    26,   20,   19,   18,   17,   16,   15,   14,   13,   12,
+ /*   940 */    11,   10,   75,  363,  363,  123,  363,  363,    8,  363,
+ /*   950 */   136,  125,   87,  103,  117,  104,  104,  104,  123,   75,
+ /*   960 */   363,  363,   75,   75,  363,   75,  363,  363,  123,  363,
+ /*   970 */   363,  363,  363,  294,  295,   88,  103,  117,  104,  104,
+ /*   980 */   104,  123,   75,  363,   75,   75,   75,  123,  363,  363,
+ /*   990 */   363,  363,  363,  363,   89,  103,  117,  104,  104,  104,
+ /*  1000 */   123,   75,  363,  363,   75,   75,  363,  363,   86,   85,
+ /*  1010 */    81,   80,  323,   74,  324,   84,   83,  145,    9,  454,
+ /*  1020 */    71,  363,   86,   85,   81,   80,  323,   74,  363,   84,
+ /*  1030 */    83,  145,    9,  363,   71,   75,  363,  363,  123,  363,
+ /*  1040 */   363,  363,  363,  363,  363,  363,   91,  117,  104,  104,
+ /*  1050 */   104,  123,   75,  363,  363,   75,   75,   75,  363,  363,
+ /*  1060 */   123,  363,  363,  363,  363,  363,  363,  363,   92,  117,
+ /*  1070 */   104,  104,  104,  123,   75,  363,  363,   75,   75,   75,
+ /*  1080 */   363,  363,  123,  363,  363,  363,  363,  363,  363,  363,
+ /*  1090 */    93,  117,  104,  104,  104,  123,   75,  363,   75,   75,
+ /*  1100 */    75,  123,  363,  363,  363,  363,  363,  363,  363,   94,
+ /*  1110 */   117,  104,  104,  104,  123,   75,  363,  363,   75,   75,
+ /*  1120 */   363,  363,   75,  363,  363,  123,  363,    7,  363,  363,
+ /*  1130 */   363,  346,   73,   95,  117,  104,  104,  104,  123,   75,
+ /*  1140 */   363,   75,   75,   75,  123,  363,  363,  363,  363,  363,
+ /*  1150 */   363,  363,   96,  117,  104,  104,  104,  123,   75,  363,
+ /*  1160 */   363,   75,   75,   75,  363,  363,  123,  363,  363,  363,
+ /*  1170 */   363,  363,  363,  363,   97,  117,  104,  104,  104,  123,
+ /*  1180 */    75,  363,   75,   75,   75,  123,  348,  349,  350,  351,
+ /*  1190 */   352,    6,  363,   98,  117,  104,  104,  104,  123,   75,
+ /*  1200 */   363,  363,   75,   75,  363,  363,   75,  363,  363,  123,
+ /*  1210 */   363,  363,  363,  363,  363,  363,  363,   99,  117,  104,
+ /*  1220 */   104,  104,  123,   75,  363,   75,   75,   75,  123,  363,
+ /*  1230 */   363,  363,  363,  363,  363,  363,  100,  117,  104,  104,
+ /*  1240 */   104,  123,   75,  363,  363,   75,   75,   75,  363,  363,
+ /*  1250 */   123,  363,  363,  363,  363,  363,  363,  363,  101,  117,
+ /*  1260 */   104,  104,  104,  123,   75,  363,   75,   75,   75,  123,
+ /*  1270 */   363,  363,  363,  363,  363,  363,  363,  102,  117,  104,
+ /*  1280 */   104,  104,  123,   75,  363,  363,   75,   75,  363,  363,
+ /*  1290 */    75,  363,  363,  123,  363,  363,  363,  363,  363,  363,
+ /*  1300 */   363,  105,  117,  104,  104,  104,  123,   75,  363,   75,
+ /*  1310 */    75,   75,  123,  363,  363,  363,  363,  363,  363,  363,
+ /*  1320 */   107,  117,  104,  104,  104,  123,   75,  363,  363,   75,
+ /*  1330 */    75,   75,  363,  363,  123,  363,  363,  363,  363,  363,
+ /*  1340 */   363,  363,  109,  117,  104,  104,  104,  123,   75,  363,
+ /*  1350 */    75,   75,   75,  123,  363,  363,  363,  363,  363,  363,
+ /*  1360 */   363,  363,  118,  104,  104,  104,  123,   75,  363,  363,
+ /*  1370 */    75,   75,  363,  363,   75,  363,  363,  123,  363,  363,
+ /*  1380 */   363,  363,  363,  363,  363,  363,  120,  104,  104,  104,
+ /*  1390 */   123,   75,  363,   75,   75,   75,  123,  363,  363,  363,
+ /*  1400 */   363,  363,  363,  363,  363,  124,  104,  104,  104,  123,
+ /*  1410 */    75,  363,  363,   75,   75,  363,  363,  369,   75,  363,
+ /*  1420 */   363,  123,  363,  363,  363,  363,  363,   75,  363,  363,
+ /*  1430 */   123,  363,  426,  426,  123,   75,  363,  363,   75,   75,
+ /*  1440 */   106,  106,  106,  123,   75,  363,   75,   75,   75,  123,
+ /*  1450 */   363,  363,  363,  363,   75,  363,  363,  123,  363,  108,
+ /*  1460 */   108,  108,  123,   75,  363,  363,   75,   75,  418,  418,
+ /*  1470 */   123,   75,  363,   75,   75,   75,  123,  363,  363,  363,
+ /*  1480 */   363,  363,  363,  363,  363,  363,  363,  417,  417,  123,
+ /*  1490 */    75,  363,   75,   75,   75,  123,  363,  363,  363,  363,
+ /*  1500 */   363,   75,  363,  363,  123,  363,  429,  429,  123,   75,
+ /*  1510 */   363,   75,   75,   75,  123,  428,  428,  123,   75,  363,
+ /*  1520 */   363,   75,   75,  363,  363,  427,  427,  123,   75,  363,
+ /*  1530 */    75,   75,   75,  123,  363,  363,  363,  363,   75,  363,
+ /*  1540 */   363,  123,  363,  363,  426,  426,  123,   75,  363,  363,
+ /*  1550 */    75,   75,  425,  425,  123,   75,  363,   75,   75,   75,
+ /*  1560 */   123,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+ /*  1570 */   363,  424,  424,  123,   75,  363,   75,   75,   75,  123,
+ /*  1580 */   363,  363,  363,  363,  363,   75,  363,  363,  123,  363,
+ /*  1590 */   423,  423,  123,   75,  363,   75,   75,   75,  123,  422,
+ /*  1600 */   422,  123,   75,  363,  363,   75,   75,  363,  363,  421,
+ /*  1610 */   421,  123,   75,  363,   75,   75,   75,  123,  363,  363,
+ /*  1620 */   363,  363,   75,  363,  363,  123,  363,  363,  420,  420,
+ /*  1630 */   123,   75,  363,  363,   75,   75,  419,  419,  123,   75,
+ /*  1640 */   363,   75,   75,   75,  123,  363,  363,  363,  363,  363,
+ /*  1650 */   363,  363,  363,  363,  363,  416,  416,  123,   75,  363,
+ /*  1660 */   363,   75,   75,
 };
 static const YYCODETYPE yy_lookahead[] = {
- /*     0 */    82,    1,    2,  107,  108,  109,   82,    7,    8,   82,
- /*    10 */    10,   11,   12,   13,   12,   15,   77,   78,   79,  105,
+ /*     0 */    82,    1,    2,  106,  107,  108,   82,    7,    8,   82,
+ /*    10 */    10,   11,   12,   13,   82,   15,   77,   78,   79,   11,
  /*    20 */    83,   82,   83,   84,   85,   86,   87,   88,   89,   90,
  /*    30 */    91,   92,   93,   94,   95,   96,   97,   98,   99,  100,
- /*    40 */   103,  104,  103,  104,    7,    8,   82,   10,   11,   12,
- /*    50 */    13,   82,   15,    0,   54,   55,   51,   52,   53,   59,
+ /*    40 */   103,  104,  103,  104,    7,    8,   12,   10,   11,   12,
+ /*    50 */    13,   82,   15,   82,   54,   55,   51,   52,   53,   59,
  /*    60 */    60,   61,   62,   63,   64,   65,   66,   67,   68,   69,
  /*    70 */    70,   71,   72,   79,   56,   57,   58,   83,   84,   85,
  /*    80 */    86,   87,   88,   89,   90,   91,   92,   93,   94,   95,
  /*    90 */    96,   97,   98,   99,  100,   78,    0,  103,  104,   82,
- /*   100 */    69,  107,  108,  109,   82,    7,    8,   54,   10,   11,
- /*   110 */    12,   13,   16,   15,   78,   79,   81,   30,   82,   83,
+ /*   100 */   106,  107,  108,  101,  102,    7,    8,   81,   10,   11,
+ /*   110 */    12,   13,   16,   15,   78,   79,  107,  108,   82,   83,
  /*   120 */    84,   85,   86,   87,   88,   89,   90,   91,   92,   93,
- /*   130 */    94,   95,   96,   97,   98,   99,  100,  112,  113,  103,
- /*   140 */   104,    8,   14,   10,   16,   12,   13,  112,  113,  101,
- /*   150 */   102,   82,   54,   55,  108,  109,   82,   59,   60,   61,
+ /*   130 */    94,   95,   96,   97,   98,   99,  100,  111,  112,  103,
+ /*   140 */   104,    8,   14,   10,   16,   12,   13,    3,    4,  111,
+ /*   150 */   112,   69,   54,   55,   54,   55,   82,   59,   60,   61,
  /*   160 */    62,   63,   64,   65,   66,   67,   68,   69,   70,   71,
  /*   170 */    72,   36,   37,   38,   39,   40,   41,   42,   43,   44,
- /*   180 */    45,   46,   47,   48,   49,   50,   11,   54,   55,   56,
- /*   190 */    54,   55,   59,   60,   61,   62,   63,   64,   65,   66,
- /*   200 */    67,   68,   69,   70,   71,   72,   80,   69,   75,   83,
+ /*   180 */    45,   46,   47,   48,   49,   50,   82,   54,   55,   56,
+ /*   190 */    34,   35,   59,   60,   61,   62,   63,   64,   65,   66,
+ /*   200 */    67,   68,   69,   70,   71,   72,   80,    0,   75,   83,
  /*   210 */    84,   85,   86,   87,   88,   89,   90,   91,   92,   93,
- /*   220 */    94,   95,   96,   97,   98,   99,  100,    3,    4,  103,
- /*   230 */   104,    8,   41,   10,    8,   12,   13,  111,   67,   16,
- /*   240 */    56,   83,   84,   85,   86,   87,   88,   89,   90,   91,
- /*   250 */    92,   93,   94,   95,   96,   97,   98,   99,  100,    0,
- /*   260 */    31,  103,  104,  105,  106,    8,   14,   10,   16,   12,
- /*   270 */    13,   30,    9,   16,   16,   16,    8,   54,   55,   16,
- /*   280 */    12,   13,   59,   60,   61,   62,   63,   64,   65,   66,
- /*   290 */    67,   68,   69,   70,   71,   72,   73,    8,   72,   10,
- /*   300 */    74,   12,   13,    9,   12,   16,   32,   34,   35,    5,
- /*   310 */    16,   54,   55,   60,   61,   33,   59,   60,   61,   62,
- /*   320 */    63,   64,   65,   66,   67,   68,   69,   70,   71,   72,
- /*   330 */    73,   73,   30,   29,   16,   67,   68,   69,   70,   71,
- /*   340 */    72,  114,  114,   54,   55,  114,  114,  114,   59,   60,
- /*   350 */    61,   62,   63,   64,   65,   66,   67,   68,   69,   70,
- /*   360 */    71,   72,   83,   84,   85,   86,   87,   88,   89,   90,
- /*   370 */    91,   92,   93,   94,   95,   96,   97,   98,   99,  100,
- /*   380 */   114,  114,  103,  104,  114,  114,  114,  114,  114,  114,
- /*   390 */   111,   73,  114,  114,  114,   83,   84,   85,   86,   87,
- /*   400 */    88,   89,   90,   91,   92,   93,   94,   95,   96,   97,
- /*   410 */    98,   99,  100,  114,  114,  103,  104,  114,  114,  114,
- /*   420 */   114,  114,  110,   79,  114,  114,  114,   83,   84,   85,
- /*   430 */    86,   87,   88,   89,   90,   91,   92,   93,   94,   95,
- /*   440 */    96,   97,   98,   99,  100,   79,  114,  103,  104,   83,
- /*   450 */    84,   85,   86,   87,   88,   89,   90,   91,   92,   93,
- /*   460 */    94,   95,   96,   97,   98,   99,  100,  114,  114,  103,
- /*   470 */   104,  114,    8,  114,   10,   79,   12,   13,  114,   83,
- /*   480 */    84,   85,   86,   87,   88,   89,   90,   91,   92,   93,
- /*   490 */    94,   95,   96,   97,   98,   99,  100,  114,  114,  103,
- /*   500 */   104,    8,  114,   10,  114,   12,   13,  114,  114,  114,
- /*   510 */   114,  114,  114,  114,  114,  114,  114,  114,   54,   55,
- /*   520 */   114,  114,  114,   59,   60,   61,   62,   63,   64,   65,
- /*   530 */    66,   67,   68,   69,   70,   71,   72,  114,  114,  114,
- /*   540 */   114,  114,  114,  114,  114,  114,  114,   54,   55,  114,
- /*   550 */   114,  114,   59,   60,   61,   62,   63,   64,   65,   66,
- /*   560 */    67,   68,   69,   70,   71,   72,   83,   84,   85,   86,
- /*   570 */    87,   88,   89,   90,   91,   92,   93,   94,   95,   96,
- /*   580 */    97,   98,   99,  100,  114,  114,  103,  104,  114,   83,
+ /*   220 */    94,   95,   96,   97,   98,   99,  100,    9,    9,  103,
+ /*   230 */   104,   30,   16,   16,   16,   16,  110,   83,   84,   85,
+ /*   240 */    86,   87,   88,   89,   90,   91,   92,   93,   94,   95,
+ /*   250 */    96,   97,   98,   99,  100,   60,   61,  103,  104,   69,
+ /*   260 */    14,   54,   16,   41,  110,   67,   56,   31,   12,   30,
+ /*   270 */    33,   83,   84,   85,   86,   87,   88,   89,   90,   91,
+ /*   280 */    92,   93,   94,   95,   96,   97,   98,   99,  100,   73,
+ /*   290 */    73,  103,  104,   32,   30,  113,  113,  109,   83,   84,
+ /*   300 */    85,   86,   87,   88,   89,   90,   91,   92,   93,   94,
+ /*   310 */    95,   96,   97,   98,   99,  100,    5,   79,  103,  104,
+ /*   320 */   105,   83,   84,   85,   86,   87,   88,   89,   90,   91,
+ /*   330 */    92,   93,   94,   95,   96,   97,   98,   99,  100,  113,
+ /*   340 */    29,  103,  104,  113,   79,  113,  113,  113,   83,   84,
+ /*   350 */    85,   86,   87,   88,   89,   90,   91,   92,   93,   94,
+ /*   360 */    95,   96,   97,   98,   99,  100,   79,  113,  103,  104,
+ /*   370 */    83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
+ /*   380 */    93,   94,   95,   96,   97,   98,   99,  100,  113,  113,
+ /*   390 */   103,  104,    8,  113,   10,  113,   12,   13,   83,   84,
+ /*   400 */    85,   86,   87,   88,   89,   90,   91,   92,   93,   94,
+ /*   410 */    95,   96,   97,   98,   99,  100,  113,  113,  103,  104,
+ /*   420 */    83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
+ /*   430 */    93,   94,   95,   96,   97,   98,   99,  100,   54,   55,
+ /*   440 */   103,  104,    0,   59,   60,   61,   62,   63,   64,   65,
+ /*   450 */    66,   67,   68,   69,   70,   71,   72,    8,   16,   10,
+ /*   460 */   113,   12,   13,   83,   84,   85,   86,   87,   88,   89,
+ /*   470 */    90,   91,   92,   93,   94,   95,   96,   97,   98,   99,
+ /*   480 */   100,  113,  113,  103,  104,   83,   84,   85,   86,   87,
+ /*   490 */    88,   89,   90,   91,   92,   93,   94,   95,   96,   97,
+ /*   500 */    98,   99,  100,   54,   55,  103,  104,  113,   59,   60,
+ /*   510 */    61,   62,   63,   64,   65,   66,   67,   68,   69,   70,
+ /*   520 */    71,   72,   83,   84,   85,   86,   87,   88,   89,   90,
+ /*   530 */    91,   92,   93,   94,   95,   96,   97,   98,   99,  100,
+ /*   540 */   113,  113,  103,  104,  113,   83,   84,   85,   86,   87,
+ /*   550 */    88,   89,   90,   91,   92,   93,   94,   95,   96,   97,
+ /*   560 */    98,   99,  100,  113,  113,  103,  104,   83,   84,   85,
+ /*   570 */    86,   87,   88,   89,   90,   91,   92,   93,   94,   95,
+ /*   580 */    96,   97,   98,   99,  100,  113,  113,  103,  104,   83,
  /*   590 */    84,   85,   86,   87,   88,   89,   90,   91,   92,   93,
- /*   600 */    94,   95,   96,   97,   98,   99,  100,  114,  114,  103,
+ /*   600 */    94,   95,   96,   97,   98,   99,  100,  113,  113,  103,
  /*   610 */   104,   83,   84,   85,   86,   87,   88,   89,   90,   91,
- /*   620 */    92,   93,   94,   95,   96,   97,   98,   99,  100,  114,
- /*   630 */   114,  103,  104,  114,  114,  114,   83,   84,   85,   86,
- /*   640 */    87,   88,   89,   90,   91,   92,   93,   94,   95,   96,
- /*   650 */    97,   98,   99,  100,  114,  114,  103,  104,   83,   84,
- /*   660 */    85,   86,   87,   88,   89,   90,   91,   92,   93,   94,
- /*   670 */    95,   96,   97,   98,   99,  100,  114,  114,  103,  104,
- /*   680 */    83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
- /*   690 */    93,   94,   95,   96,   97,   98,   99,  100,  114,  114,
- /*   700 */   103,  104,   83,   84,   85,   86,   87,   88,   89,   90,
- /*   710 */    91,   92,   93,   94,   95,   96,   97,   98,   99,  100,
- /*   720 */   114,  114,  103,  104,   83,   84,   85,   86,   87,   88,
- /*   730 */    89,   90,   91,   92,   93,   94,   95,   96,   97,   98,
- /*   740 */    99,  100,  114,  114,  103,  104,   83,   84,   85,   86,
- /*   750 */    87,   88,   89,   90,   91,   92,   93,   94,   95,   96,
- /*   760 */    97,   98,   99,  100,  114,  114,  103,  104,   83,   84,
- /*   770 */    85,   86,   87,   88,   89,   90,   91,   92,   93,   94,
- /*   780 */    95,   96,   97,   98,   99,  100,  114,  114,  103,  104,
- /*   790 */    83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
- /*   800 */    93,   94,   95,   96,   97,   98,   99,  100,  114,  114,
- /*   810 */   103,  104,   83,   84,   85,   86,   87,   88,   89,   90,
- /*   820 */    91,   92,   93,   94,   95,   96,   97,   98,   99,  100,
- /*   830 */   114,  114,  103,  104,   83,   84,   85,   86,   87,   88,
- /*   840 */    89,   90,   91,   92,   93,   94,   95,   96,   97,   98,
- /*   850 */    99,  100,  114,  114,  103,  104,   83,   84,   85,   86,
- /*   860 */    87,   88,   89,   90,   91,   92,   93,   94,   95,   96,
- /*   870 */    97,   98,   99,  100,  114,  114,  103,  104,   83,   84,
- /*   880 */    85,   86,   87,   88,   89,   90,   91,   92,   93,   94,
- /*   890 */    95,   96,   97,   98,   99,  100,  114,  114,  103,  104,
- /*   900 */    83,   84,   85,   86,   87,   88,   89,   90,   91,   92,
- /*   910 */    93,   94,   95,   96,   97,   98,   99,  100,  114,  114,
- /*   920 */   103,  104,   83,   84,   85,   86,   87,   88,   89,   90,
- /*   930 */    91,   92,   93,   94,   95,   96,   97,   98,   99,  100,
- /*   940 */   114,  114,  103,  104,   83,   84,   85,   86,   87,   88,
- /*   950 */    89,   90,   91,   92,   93,   94,   95,   96,   97,   98,
- /*   960 */    99,  100,  114,  114,  103,  104,   83,   84,   85,   86,
- /*   970 */    87,   88,   89,   90,   91,   92,   93,   94,   95,   96,
- /*   980 */    97,   98,   99,  100,  114,   83,  103,  104,   86,  114,
- /*   990 */    88,   89,   90,   91,   92,   93,   94,   95,   96,   97,
- /*  1000 */    98,   99,  100,  114,   83,  103,  104,   86,  114,  114,
- /*  1010 */    89,   90,   91,   92,   93,   94,   95,   96,   97,   98,
- /*  1020 */    99,  100,  114,   83,  103,  104,   86,  114,  114,   89,
- /*  1030 */    90,   91,   92,   93,   94,   95,   96,   97,   98,   99,
- /*  1040 */   100,  114,   83,  103,  104,   86,  114,  114,  114,   90,
- /*  1050 */    91,   92,   93,   94,   95,   96,   97,   98,   99,  100,
- /*  1060 */   114,   83,  103,  104,   86,  114,  114,  114,  114,   91,
- /*  1070 */    92,   93,   94,   95,   96,   97,   98,   99,  100,  114,
- /*  1080 */   114,  103,  104,  114,  114,  114,  114,   17,   18,   19,
- /*  1090 */    20,   21,   22,   23,   24,   25,   26,   27,   28,   83,
- /*  1100 */   114,  114,   86,  114,  114,  114,  114,  114,   92,   93,
- /*  1110 */    94,   95,   96,   97,   98,   99,  100,  114,  114,  103,
- /*  1120 */   104,  114,   83,  114,  114,   86,  114,  114,  114,  114,
- /*  1130 */    60,   61,   93,   94,   95,   96,   97,   98,   99,  100,
- /*  1140 */   114,   83,  103,  104,   86,  114,  114,  114,  114,  114,
- /*  1150 */   114,   93,   94,   95,   96,   97,   98,   99,  100,  114,
- /*  1160 */   114,  103,  104,  114,  114,    3,    4,    5,    6,    7,
- /*  1170 */     8,    9,   10,   11,   12,   13,    0,   15,  114,    3,
- /*  1180 */     4,    5,    6,    7,    8,  114,   10,   11,   12,   13,
- /*  1190 */   114,   15,   83,  114,  114,   86,  114,  114,  114,  114,
- /*  1200 */   114,  114,  114,   94,   95,   96,   97,   98,   99,  100,
- /*  1210 */   114,  114,  103,  104,   83,  114,  114,   86,  114,  114,
- /*  1220 */   114,  114,  114,  114,  114,   94,   95,   96,   97,   98,
- /*  1230 */    99,  100,  114,  114,  103,  104,   83,  114,  114,   86,
- /*  1240 */   114,  114,  114,  114,  114,  114,  114,   94,   95,   96,
- /*  1250 */    97,   98,   99,  100,  114,   83,  103,  104,   86,  114,
- /*  1260 */   114,  114,  114,  114,  114,  114,   94,   95,   96,   97,
- /*  1270 */    98,   99,  100,  114,  114,  103,  104,  114,  114,   83,
- /*  1280 */   114,  114,   86,  114,  114,  114,  114,  114,  114,  114,
- /*  1290 */    94,   95,   96,   97,   98,   99,  100,  114,   83,  103,
- /*  1300 */   104,   86,  114,  114,  114,  114,  114,  114,  114,   94,
- /*  1310 */    95,   96,   97,   98,   99,  100,  114,  114,  103,  104,
- /*  1320 */    83,  114,  114,   86,  114,  114,  114,  114,  114,  114,
- /*  1330 */   114,   94,   95,   96,   97,   98,   99,  100,  114,   83,
- /*  1340 */   103,  104,   86,  114,  114,  114,  114,  114,  114,  114,
- /*  1350 */    94,   95,   96,   97,   98,   99,  100,  114,  114,  103,
- /*  1360 */   104,  114,  114,   83,  114,  114,   86,  114,  114,  114,
- /*  1370 */   114,  114,  114,  114,   94,   95,   96,   97,   98,   99,
- /*  1380 */   100,  114,   83,  103,  104,   86,  114,  114,  114,  114,
- /*  1390 */   114,  114,  114,   94,   95,   96,   97,   98,   99,  100,
- /*  1400 */   114,  114,  103,  104,   83,  114,  114,   86,  114,  114,
- /*  1410 */   114,  114,  114,  114,  114,   94,   95,   96,   97,   98,
- /*  1420 */    99,  100,  114,   83,  103,  104,   86,  114,  114,  114,
- /*  1430 */   114,  114,  114,  114,   94,   95,   96,   97,   98,   99,
- /*  1440 */   100,  114,  114,  103,  104,  114,  114,   83,  114,  114,
- /*  1450 */    86,  114,  114,  114,  114,  114,  114,  114,   94,   95,
- /*  1460 */    96,   97,   98,   99,  100,  114,   83,  103,  104,   86,
- /*  1470 */   114,  114,  114,  114,  114,  114,  114,   94,   95,   96,
- /*  1480 */    97,   98,   99,  100,  114,  114,  103,  104,   83,  114,
- /*  1490 */   114,   86,  114,  114,  114,  114,  114,  114,  114,   94,
- /*  1500 */    95,   96,   97,   98,   99,  100,  114,   83,  103,  104,
- /*  1510 */    86,  114,  114,  114,  114,  114,  114,  114,  114,   95,
- /*  1520 */    96,   97,   98,   99,  100,  114,  114,  103,  104,  114,
- /*  1530 */   114,   83,  114,  114,   86,  114,  114,  114,  114,  114,
- /*  1540 */   114,  114,  114,   95,   96,   97,   98,   99,  100,  114,
- /*  1550 */    83,  103,  104,   86,  114,  114,  114,  114,  114,  114,
- /*  1560 */   114,  114,   95,   96,   97,   98,   99,  100,  114,  114,
- /*  1570 */   103,  104,  114,  114,   82,   83,  114,  114,   86,  114,
- /*  1580 */   114,  114,  114,  114,   83,  114,  114,   86,  114,   97,
- /*  1590 */    98,   99,  100,  114,  114,  103,  104,   96,   97,   98,
- /*  1600 */    99,  100,  114,   83,  103,  104,   86,  114,  114,  114,
- /*  1610 */   114,   83,  114,  114,   86,  114,   96,   97,   98,   99,
- /*  1620 */   100,  114,  114,  103,  104,   97,   98,   99,  100,  114,
- /*  1630 */    83,  103,  104,   86,  114,  114,  114,  114,  114,  114,
- /*  1640 */   114,  114,  114,  114,   97,   98,   99,  100,  114,   83,
- /*  1650 */   103,  104,   86,  114,  114,  114,  114,  114,   83,  114,
- /*  1660 */   114,   86,  114,   97,   98,   99,  100,  114,   83,  103,
- /*  1670 */   104,   86,   97,   98,   99,  100,  114,  114,  103,  104,
- /*  1680 */   114,  114,   97,   98,   99,  100,  114,   83,  103,  104,
- /*  1690 */    86,  114,  114,  114,  114,   83,  114,  114,   86,  114,
- /*  1700 */   114,   97,   98,   99,  100,  114,  114,  103,  104,   97,
- /*  1710 */    98,   99,  100,  114,   83,  103,  104,   86,  114,  114,
- /*  1720 */   114,  114,  114,  114,  114,  114,  114,  114,   97,   98,
- /*  1730 */    99,  100,  114,   83,  103,  104,   86,  114,  114,  114,
- /*  1740 */   114,  114,   83,  114,  114,   86,  114,   97,   98,   99,
- /*  1750 */   100,  114,   83,  103,  104,   86,   97,   98,   99,  100,
- /*  1760 */   114,  114,  103,  104,  114,  114,   97,   98,   99,  100,
- /*  1770 */   114,   83,  103,  104,   86,  114,  114,  114,  114,   83,
- /*  1780 */   114,  114,   86,  114,  114,   97,   98,   99,  100,  114,
- /*  1790 */   114,  103,  104,   97,   98,   99,  100,  114,   83,  103,
- /*  1800 */   104,   86,  114,  114,  114,  114,  114,  114,  114,  114,
- /*  1810 */   114,  114,   97,   98,   99,  100,  114,  114,  103,  104,
+ /*   620 */    92,   93,   94,   95,   96,   97,   98,   99,  100,  113,
+ /*   630 */   113,  103,  104,   83,   84,   85,   86,   87,   88,   89,
+ /*   640 */    90,   91,   92,   93,   94,   95,   96,   97,   98,   99,
+ /*   650 */   100,  113,  113,  103,  104,   83,   84,   85,   86,   87,
+ /*   660 */    88,   89,   90,   91,   92,   93,   94,   95,   96,   97,
+ /*   670 */    98,   99,  100,  113,  113,  103,  104,   83,   84,   85,
+ /*   680 */    86,   87,   88,   89,   90,   91,   92,   93,   94,   95,
+ /*   690 */    96,   97,   98,   99,  100,  113,  113,  103,  104,   83,
+ /*   700 */    84,   85,   86,   87,   88,   89,   90,   91,   92,   93,
+ /*   710 */    94,   95,   96,   97,   98,   99,  100,  113,  113,  103,
+ /*   720 */   104,   83,   84,   85,   86,   87,   88,   89,   90,   91,
+ /*   730 */    92,   93,   94,   95,   96,   97,   98,   99,  100,  113,
+ /*   740 */   113,  103,  104,   83,   84,   85,   86,   87,   88,   89,
+ /*   750 */    90,   91,   92,   93,   94,   95,   96,   97,   98,   99,
+ /*   760 */   100,  113,  113,  103,  104,   83,   84,   85,   86,   87,
+ /*   770 */    88,   89,   90,   91,   92,   93,   94,   95,   96,   97,
+ /*   780 */    98,   99,  100,  113,  113,  103,  104,   83,   84,   85,
+ /*   790 */    86,   87,   88,   89,   90,   91,   92,   93,   94,   95,
+ /*   800 */    96,   97,   98,   99,  100,  113,  113,  103,  104,   83,
+ /*   810 */    84,   85,   86,   87,   88,   89,   90,   91,   92,   93,
+ /*   820 */    94,   95,   96,   97,   98,   99,  100,  113,   83,  103,
+ /*   830 */   104,   86,  113,   88,   89,   90,   91,   92,   93,   94,
+ /*   840 */    95,   96,   97,   98,   99,  100,  113,   83,  103,  104,
+ /*   850 */    86,  113,  113,   89,   90,   91,   92,   93,   94,   95,
+ /*   860 */    96,   97,   98,   99,  100,  113,   83,  103,  104,   86,
+ /*   870 */   113,  113,   89,   90,   91,   92,   93,   94,   95,   96,
+ /*   880 */    97,   98,   99,  100,    8,   83,  103,  104,   86,  113,
+ /*   890 */   113,  113,   90,   91,   92,   93,   94,   95,   96,   97,
+ /*   900 */    98,   99,  100,  113,   83,  103,  104,   86,  113,  113,
+ /*   910 */   113,  113,   91,   92,   93,   94,   95,   96,   97,   98,
+ /*   920 */    99,  100,  113,  113,  103,  104,  113,  113,  113,  113,
+ /*   930 */    17,   18,   19,   20,   21,   22,   23,   24,   25,   26,
+ /*   940 */    27,   28,   83,  113,  113,   86,  113,  113,   72,  113,
+ /*   950 */    74,   92,   93,   94,   95,   96,   97,   98,   99,  100,
+ /*   960 */   113,  113,  103,  104,  113,   83,  113,  113,   86,  113,
+ /*   970 */   113,  113,  113,   60,   61,   93,   94,   95,   96,   97,
+ /*   980 */    98,   99,  100,  113,   83,  103,  104,   86,  113,  113,
+ /*   990 */   113,  113,  113,  113,   93,   94,   95,   96,   97,   98,
+ /*  1000 */    99,  100,  113,  113,  103,  104,  113,  113,    3,    4,
+ /*  1010 */     5,    6,    7,    8,    9,   10,   11,   12,   13,    0,
+ /*  1020 */    15,  113,    3,    4,    5,    6,    7,    8,  113,   10,
+ /*  1030 */    11,   12,   13,  113,   15,   83,  113,  113,   86,  113,
+ /*  1040 */   113,  113,  113,  113,  113,  113,   94,   95,   96,   97,
+ /*  1050 */    98,   99,  100,  113,  113,  103,  104,   83,  113,  113,
+ /*  1060 */    86,  113,  113,  113,  113,  113,  113,  113,   94,   95,
+ /*  1070 */    96,   97,   98,   99,  100,  113,  113,  103,  104,   83,
+ /*  1080 */   113,  113,   86,  113,  113,  113,  113,  113,  113,  113,
+ /*  1090 */    94,   95,   96,   97,   98,   99,  100,  113,   83,  103,
+ /*  1100 */   104,   86,  113,  113,  113,  113,  113,  113,  113,   94,
+ /*  1110 */    95,   96,   97,   98,   99,  100,  113,  113,  103,  104,
+ /*  1120 */   113,  113,   83,  113,  113,   86,  113,    8,  113,  113,
+ /*  1130 */   113,   12,   13,   94,   95,   96,   97,   98,   99,  100,
+ /*  1140 */   113,   83,  103,  104,   86,  113,  113,  113,  113,  113,
+ /*  1150 */   113,  113,   94,   95,   96,   97,   98,   99,  100,  113,
+ /*  1160 */   113,  103,  104,   83,  113,  113,   86,  113,  113,  113,
+ /*  1170 */   113,  113,  113,  113,   94,   95,   96,   97,   98,   99,
+ /*  1180 */   100,  113,   83,  103,  104,   86,   67,   68,   69,   70,
+ /*  1190 */    71,   72,  113,   94,   95,   96,   97,   98,   99,  100,
+ /*  1200 */   113,  113,  103,  104,  113,  113,   83,  113,  113,   86,
+ /*  1210 */   113,  113,  113,  113,  113,  113,  113,   94,   95,   96,
+ /*  1220 */    97,   98,   99,  100,  113,   83,  103,  104,   86,  113,
+ /*  1230 */   113,  113,  113,  113,  113,  113,   94,   95,   96,   97,
+ /*  1240 */    98,   99,  100,  113,  113,  103,  104,   83,  113,  113,
+ /*  1250 */    86,  113,  113,  113,  113,  113,  113,  113,   94,   95,
+ /*  1260 */    96,   97,   98,   99,  100,  113,   83,  103,  104,   86,
+ /*  1270 */   113,  113,  113,  113,  113,  113,  113,   94,   95,   96,
+ /*  1280 */    97,   98,   99,  100,  113,  113,  103,  104,  113,  113,
+ /*  1290 */    83,  113,  113,   86,  113,  113,  113,  113,  113,  113,
+ /*  1300 */   113,   94,   95,   96,   97,   98,   99,  100,  113,   83,
+ /*  1310 */   103,  104,   86,  113,  113,  113,  113,  113,  113,  113,
+ /*  1320 */    94,   95,   96,   97,   98,   99,  100,  113,  113,  103,
+ /*  1330 */   104,   83,  113,  113,   86,  113,  113,  113,  113,  113,
+ /*  1340 */   113,  113,   94,   95,   96,   97,   98,   99,  100,  113,
+ /*  1350 */    83,  103,  104,   86,  113,  113,  113,  113,  113,  113,
+ /*  1360 */   113,  113,   95,   96,   97,   98,   99,  100,  113,  113,
+ /*  1370 */   103,  104,  113,  113,   83,  113,  113,   86,  113,  113,
+ /*  1380 */   113,  113,  113,  113,  113,  113,   95,   96,   97,   98,
+ /*  1390 */    99,  100,  113,   83,  103,  104,   86,  113,  113,  113,
+ /*  1400 */   113,  113,  113,  113,  113,   95,   96,   97,   98,   99,
+ /*  1410 */   100,  113,  113,  103,  104,  113,  113,   82,   83,  113,
+ /*  1420 */   113,   86,  113,  113,  113,  113,  113,   83,  113,  113,
+ /*  1430 */    86,  113,   97,   98,   99,  100,  113,  113,  103,  104,
+ /*  1440 */    96,   97,   98,   99,  100,  113,   83,  103,  104,   86,
+ /*  1450 */   113,  113,  113,  113,   83,  113,  113,   86,  113,   96,
+ /*  1460 */    97,   98,   99,  100,  113,  113,  103,  104,   97,   98,
+ /*  1470 */    99,  100,  113,   83,  103,  104,   86,  113,  113,  113,
+ /*  1480 */   113,  113,  113,  113,  113,  113,  113,   97,   98,   99,
+ /*  1490 */   100,  113,   83,  103,  104,   86,  113,  113,  113,  113,
+ /*  1500 */   113,   83,  113,  113,   86,  113,   97,   98,   99,  100,
+ /*  1510 */   113,   83,  103,  104,   86,   97,   98,   99,  100,  113,
+ /*  1520 */   113,  103,  104,  113,  113,   97,   98,   99,  100,  113,
+ /*  1530 */    83,  103,  104,   86,  113,  113,  113,  113,   83,  113,
+ /*  1540 */   113,   86,  113,  113,   97,   98,   99,  100,  113,  113,
+ /*  1550 */   103,  104,   97,   98,   99,  100,  113,   83,  103,  104,
+ /*  1560 */    86,  113,  113,  113,  113,  113,  113,  113,  113,  113,
+ /*  1570 */   113,   97,   98,   99,  100,  113,   83,  103,  104,   86,
+ /*  1580 */   113,  113,  113,  113,  113,   83,  113,  113,   86,  113,
+ /*  1590 */    97,   98,   99,  100,  113,   83,  103,  104,   86,   97,
+ /*  1600 */    98,   99,  100,  113,  113,  103,  104,  113,  113,   97,
+ /*  1610 */    98,   99,  100,  113,   83,  103,  104,   86,  113,  113,
+ /*  1620 */   113,  113,   83,  113,  113,   86,  113,  113,   97,   98,
+ /*  1630 */    99,  100,  113,  113,  103,  104,   97,   98,   99,  100,
+ /*  1640 */   113,   83,  103,  104,   86,  113,  113,  113,  113,  113,
+ /*  1650 */   113,  113,  113,  113,  113,   97,   98,   99,  100,  113,
+ /*  1660 */   113,  103,  104,
 };
-#define YY_SHIFT_COUNT    (146)
+#define YY_SHIFT_COUNT    (145)
 #define YY_SHIFT_MIN      (0)
-#define YY_SHIFT_MAX      (1176)
+#define YY_SHIFT_MAX      (1119)
 static const unsigned short int yy_shift_ofst[] = {
- /*     0 */     0,  464,   98,  133,  289,  133,  493,  493,  493,  493,
- /*    10 */   223,  257,  493,  493,  493,  493,  493,  493,  493,  493,
- /*    20 */   493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
- /*    30 */   493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
- /*    40 */   493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
- /*    50 */   493,  493,  493,  493,  493,   98,  493,  493,  493,  493,
- /*    60 */   493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
- /*    70 */   493,  493,  268,    2,   31,   37,  226,    2,   31, 1162,
- /*    80 */  1176,   37,   37,   37,   37,   37,   37,   37,  258,  135,
- /*    90 */   135,  135, 1070,    5,    5,    5,    5,    5,    5,    5,
- /*   100 */     5,    5,    5,    5,    5,    5,   18,    5,   18,    5,
- /*   110 */    18,    5,   53,   96,  259,  224,  263,  128,  136,  136,
- /*   120 */   294,  136,  273,  318,  253,  136,  273,  224,  304,  252,
- /*   130 */    87,  175,  138,  191,  171,  184,  229,  292,  241,  282,
- /*   140 */   274,  229,  282,  274,  229,  302,  175,
+ /*     0 */     0,  384,   98,  133,  133,  449,  449,  449,  449,  449,
+ /*    10 */   449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+ /*    20 */   449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+ /*    30 */   449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+ /*    40 */   449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+ /*    50 */   449,  449,  449,  449,   98,  449,  449,  449,  449,  449,
+ /*    60 */   449,  449,  449,  449,  449,  449,  449,  449,  449,  449,
+ /*    70 */   449, 1119,   34,   82,   37,  876,   34,   82, 1005, 1019,
+ /*    80 */    37,   37,   37,   37,   37,   37,   37,  135,  135,  135,
+ /*    90 */   913,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+ /*   100 */     5,    5,    5,    5,   18,    5,   18,    5,   18,    5,
+ /*   110 */   207,   96,  442,  144,  218,  128,  216,  100,  100,  219,
+ /*   120 */   100,  156,  217,  195,  100,  156,  144,  311,  246,  201,
+ /*   130 */     8,  190,  222,  198,  210,  236,  256,  239,  237,  261,
+ /*   140 */   236,  237,  261,  236,  264,    8,
 };
-#define YY_REDUCE_COUNT (88)
-#define YY_REDUCE_MIN   (-104)
-#define YY_REDUCE_MAX   (1715)
+#define YY_REDUCE_COUNT (86)
+#define YY_REDUCE_MIN   (-103)
+#define YY_REDUCE_MAX   (1558)
 static const short yy_reduce_ofst[] = {
- /*     0 */   -61,   -6,   36,  126,  158,  279,  312,  344,  366,  396,
- /*    10 */   483,  506,  528,  553,  575,  597,  619,  641,  663,  685,
- /*    20 */   707,  729,  751,  773,  795,  817,  839,  861,  883,  902,
- /*    30 */   921,  940,  959,  978, 1016, 1039, 1058, 1109, 1131, 1153,
- /*    40 */  1172, 1196, 1215, 1237, 1256, 1280, 1299, 1321, 1340, 1364,
- /*    50 */  1383, 1405, 1424, 1448, 1467, 1492, 1501, 1520, 1528, 1547,
- /*    60 */  1566, 1575, 1585, 1604, 1612, 1631, 1650, 1659, 1669, 1688,
- /*    70 */  1696, 1715,  -63,   35, -104,   17,   48,   25,   46,  -82,
- /*    80 */   -82,  -76,  -73,  -36,  -31,   22,   69,   74,  -86,
+ /*     0 */   -61,   -6,   36,  126,  154,  188,  215,  238,  265,  287,
+ /*    10 */   315,  337,  380,  402,  439,  462,  484,  506,  528,  550,
+ /*    20 */   572,  594,  616,  638,  660,  682,  704,  726,  745,  764,
+ /*    30 */   783,  802,  821,  859,  882,  901,  952,  974,  996, 1015,
+ /*    40 */  1039, 1058, 1080, 1099, 1123, 1142, 1164, 1183, 1207, 1226,
+ /*    50 */  1248, 1267, 1291, 1310, 1335, 1344, 1363, 1371, 1390, 1409,
+ /*    60 */  1418, 1428, 1447, 1455, 1474, 1493, 1502, 1512, 1531, 1539,
+ /*    70 */  1558,  -63,   26, -103,   17,    2,   38,    9,  -82,  -82,
+ /*    80 */   -76,  -73,  -68,  -31,  -29,   74,  104,
 };
 static const YYACTIONTYPE yy_default[] = {
- /*     0 */   371,  444,  371,  451,  371,  453,  448,  371,  371,  371,
- /*    10 */   371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
- /*    20 */   371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
- /*    30 */   371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
- /*    40 */   371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
- /*    50 */   371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
- /*    60 */   371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
- /*    70 */   371,  371,  371,  508,  444,  371,  484,  371,  371,  371,
- /*    80 */   371,  371,  371,  371,  371,  371,  371,  371,  371,  476,
- /*    90 */   405,  404,  482,  420,  419,  418,  417,  416,  415,  414,
- /*   100 */   413,  412,  411,  410,  409,  477,  479,  408,  425,  407,
- /*   110 */   424,  406,  371,  371,  371,  398,  371,  371,  478,  423,
- /*   120 */   371,  422,  475,  371,  482,  421,  403,  471,  470,  371,
- /*   130 */   493,  489,  371,  371,  371,  510,  400,  371,  371,  474,
- /*   140 */   473,  472,  402,  401,  399,  371,  371,
+ /*     0 */   361,  437,  361,  444,  446,  441,  434,  361,  361,  361,
+ /*    10 */   361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+ /*    20 */   361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+ /*    30 */   361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+ /*    40 */   361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+ /*    50 */   361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+ /*    60 */   361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
+ /*    70 */   361,  361,  494,  437,  361,  477,  361,  361,  361,  361,
+ /*    80 */   361,  361,  361,  361,  361,  361,  361,  469,  395,  394,
+ /*    90 */   475,  410,  409,  408,  407,  406,  405,  404,  403,  402,
+ /*   100 */   401,  400,  399,  470,  472,  398,  415,  397,  414,  396,
+ /*   110 */   361,  361,  361,  388,  361,  361,  361,  471,  413,  361,
+ /*   120 */   412,  468,  361,  475,  411,  393,  464,  463,  361,  486,
+ /*   130 */   482,  361,  361,  361,  496,  390,  361,  361,  467,  466,
+ /*   140 */   465,  392,  391,  389,  361,  361,
 };
 /********** End of lemon-generated parsing tables *****************************/
 
@@ -823,15 +793,14 @@ static const char *const yyTokenName[] = {
   /*  102 */ "member_expression_part",
   /*  103 */ "object_literal",
   /*  104 */ "array_literal",
-  /*  105 */ "elision",
-  /*  106 */ "element_list",
-  /*  107 */ "property_name_and_value_list",
-  /*  108 */ "property_name_and_value",
-  /*  109 */ "property_name",
-  /*  110 */ "argument_list",
-  /*  111 */ "output_column",
-  /*  112 */ "adjust_expression",
-  /*  113 */ "adjust_match_expression",
+  /*  105 */ "element_list",
+  /*  106 */ "property_name_and_value_list",
+  /*  107 */ "property_name_and_value",
+  /*  108 */ "property_name",
+  /*  109 */ "argument_list",
+  /*  110 */ "output_column",
+  /*  111 */ "adjust_expression",
+  /*  112 */ "adjust_match_expression",
 };
 #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */
 
@@ -908,74 +877,70 @@ static const char *const yyRuleName[] = {
  /*  66 */ "postfix_expression ::= lefthand_side_expression INCR",
  /*  67 */ "postfix_expression ::= lefthand_side_expression DECR",
  /*  68 */ "call_expression ::= member_expression arguments",
- /*  69 */ "object_literal ::= BRACEL property_name_and_value_list BRACER",
- /*  70 */ "property_name_and_value_list ::=",
- /*  71 */ "property_name_and_value ::= property_name COLON assignment_expression",
- /*  72 */ "member_expression_part ::= BRACKETL expression BRACKETR",
- /*  73 */ "arguments ::= PARENL argument_list PARENR",
- /*  74 */ "argument_list ::=",
- /*  75 */ "argument_list ::= assignment_expression",
- /*  76 */ "argument_list ::= argument_list COMMA assignment_expression",
- /*  77 */ "output_columns ::=",
- /*  78 */ "output_columns ::= output_column",
- /*  79 */ "output_columns ::= output_columns COMMA",
- /*  80 */ "output_columns ::= output_columns COMMA output_column",
- /*  81 */ "output_column ::= STAR",
- /*  82 */ "output_column ::= NONEXISTENT_COLUMN",
- /*  83 */ "output_column ::= assignment_expression",
- /*  84 */ "adjuster ::= adjuster PLUS adjust_expression",
- /*  85 */ "adjust_expression ::= adjust_match_expression STAR DECIMAL",
- /*  86 */ "adjust_match_expression ::= IDENTIFIER MATCH STRING",
- /*  87 */ "input ::= query",
- /*  88 */ "input ::= expression",
- /*  89 */ "input ::= START_OUTPUT_COLUMNS output_columns",
- /*  90 */ "input ::= START_ADJUSTER adjuster",
- /*  91 */ "query ::= query_element",
- /*  92 */ "query_element ::= QSTRING",
- /*  93 */ "query_element ::= PARENL query PARENR",
- /*  94 */ "expression ::= assignment_expression",
- /*  95 */ "assignment_expression ::= conditional_expression",
- /*  96 */ "conditional_expression ::= logical_or_expression",
- /*  97 */ "logical_or_expression ::= logical_and_expression",
- /*  98 */ "logical_and_expression ::= bitwise_or_expression",
- /*  99 */ "bitwise_or_expression ::= bitwise_xor_expression",
- /* 100 */ "bitwise_xor_expression ::= bitwise_and_expression",
- /* 101 */ "bitwise_and_expression ::= equality_expression",
- /* 102 */ "equality_expression ::= relational_expression",
- /* 103 */ "relational_expression ::= shift_expression",
- /* 104 */ "shift_expression ::= additive_expression",
- /* 105 */ "additive_expression ::= multiplicative_expression",
- /* 106 */ "multiplicative_expression ::= unary_expression",
- /* 107 */ "unary_expression ::= postfix_expression",
- /* 108 */ "postfix_expression ::= lefthand_side_expression",
- /* 109 */ "lefthand_side_expression ::= call_expression",
- /* 110 */ "lefthand_side_expression ::= member_expression",
- /* 111 */ "member_expression ::= primary_expression",
- /* 112 */ "member_expression ::= member_expression member_expression_part",
- /* 113 */ "primary_expression ::= object_literal",
- /* 114 */ "primary_expression ::= PARENL expression PARENR",
- /* 115 */ "primary_expression ::= IDENTIFIER",
- /* 116 */ "primary_expression ::= array_literal",
- /* 117 */ "primary_expression ::= DECIMAL",
- /* 118 */ "primary_expression ::= HEX_INTEGER",
- /* 119 */ "primary_expression ::= STRING",
- /* 120 */ "primary_expression ::= BOOLEAN",
- /* 121 */ "primary_expression ::= NULL",
- /* 122 */ "array_literal ::= BRACKETL elision BRACKETR",
- /* 123 */ "array_literal ::= BRACKETL element_list elision BRACKETR",
- /* 124 */ "array_literal ::= BRACKETL element_list BRACKETR",
- /* 125 */ "elision ::= COMMA",
- /* 126 */ "elision ::= elision COMMA",
- /* 127 */ "element_list ::= assignment_expression",
- /* 128 */ "element_list ::= elision assignment_expression",
- /* 129 */ "element_list ::= element_list elision assignment_expression",
- /* 130 */ "property_name_and_value_list ::= property_name_and_value",
- /* 131 */ "property_name_and_value_list ::= property_name_and_value_list COMMA property_name_and_value",
- /* 132 */ "property_name ::= STRING",
- /* 133 */ "member_expression_part ::= DOT IDENTIFIER",
- /* 134 */ "adjuster ::=",
- /* 135 */ "adjuster ::= adjust_expression",
- /* 136 */ "adjust_expression ::= adjust_match_expression",
+ /*  69 */ "array_literal ::= BRACKETL element_list BRACKETR",
+ /*  70 */ "element_list ::=",
+ /*  71 */ "element_list ::= assignment_expression",
+ /*  72 */ "object_literal ::= BRACEL property_name_and_value_list BRACER",
+ /*  73 */ "property_name_and_value_list ::=",
+ /*  74 */ "property_name_and_value ::= property_name COLON assignment_expression",
+ /*  75 */ "member_expression_part ::= BRACKETL expression BRACKETR",
+ /*  76 */ "arguments ::= PARENL argument_list PARENR",
+ /*  77 */ "argument_list ::=",
+ /*  78 */ "argument_list ::= assignment_expression",
+ /*  79 */ "argument_list ::= argument_list COMMA assignment_expression",
+ /*  80 */ "output_columns ::=",
+ /*  81 */ "output_columns ::= output_column",
+ /*  82 */ "output_columns ::= output_columns COMMA",
+ /*  83 */ "output_columns ::= output_columns COMMA output_column",
+ /*  84 */ "output_column ::= STAR",
+ /*  85 */ "output_column ::= NONEXISTENT_COLUMN",
+ /*  86 */ "output_column ::= assignment_expression",
+ /*  87 */ "adjuster ::= adjuster PLUS adjust_expression",
+ /*  88 */ "adjust_expression ::= adjust_match_expression STAR DECIMAL",
+ /*  89 */ "adjust_match_expression ::= IDENTIFIER MATCH STRING",
+ /*  90 */ "input ::= query",
+ /*  91 */ "input ::= expression",
+ /*  92 */ "input ::= START_OUTPUT_COLUMNS output_columns",
+ /*  93 */ "input ::= START_ADJUSTER adjuster",
+ /*  94 */ "query ::= query_element",
+ /*  95 */ "query_element ::= QSTRING",
+ /*  96 */ "query_element ::= PARENL query PARENR",
+ /*  97 */ "expression ::= assignment_expression",
+ /*  98 */ "assignment_expression ::= conditional_expression",
+ /*  99 */ "conditional_expression ::= logical_or_expression",
+ /* 100 */ "logical_or_expression ::= logical_and_expression",
+ /* 101 */ "logical_and_expression ::= bitwise_or_expression",
+ /* 102 */ "bitwise_or_expression ::= bitwise_xor_expression",
+ /* 103 */ "bitwise_xor_expression ::= bitwise_and_expression",
+ /* 104 */ "bitwise_and_expression ::= equality_expression",
+ /* 105 */ "equality_expression ::= relational_expression",
+ /* 106 */ "relational_expression ::= shift_expression",
+ /* 107 */ "shift_expression ::= additive_expression",
+ /* 108 */ "additive_expression ::= multiplicative_expression",
+ /* 109 */ "multiplicative_expression ::= unary_expression",
+ /* 110 */ "unary_expression ::= postfix_expression",
+ /* 111 */ "postfix_expression ::= lefthand_side_expression",
+ /* 112 */ "lefthand_side_expression ::= call_expression",
+ /* 113 */ "lefthand_side_expression ::= member_expression",
+ /* 114 */ "member_expression ::= primary_expression",
+ /* 115 */ "member_expression ::= member_expression member_expression_part",
+ /* 116 */ "primary_expression ::= object_literal",
+ /* 117 */ "primary_expression ::= PARENL expression PARENR",
+ /* 118 */ "primary_expression ::= IDENTIFIER",
+ /* 119 */ "primary_expression ::= array_literal",
+ /* 120 */ "primary_expression ::= DECIMAL",
+ /* 121 */ "primary_expression ::= HEX_INTEGER",
+ /* 122 */ "primary_expression ::= STRING",
+ /* 123 */ "primary_expression ::= BOOLEAN",
+ /* 124 */ "primary_expression ::= NULL",
+ /* 125 */ "element_list ::= element_list COMMA assignment_expression",
+ /* 126 */ "property_name_and_value_list ::= property_name_and_value",
+ /* 127 */ "property_name_and_value_list ::= property_name_and_value_list COMMA property_name_and_value",
+ /* 128 */ "property_name ::= STRING",
+ /* 129 */ "member_expression_part ::= DOT IDENTIFIER",
+ /* 130 */ "adjuster ::=",
+ /* 131 */ "adjuster ::= adjust_expression",
+ /* 132 */ "adjust_expression ::= adjust_match_expression",
 };
 #endif /* NDEBUG */
 
@@ -1107,7 +1072,7 @@ static void yy_destructor(
 
   (void)efsi;
 
-#line 1111 "../../groonga/lib/grn_ecmascript.c"
+#line 1076 "../../groonga/lib/grn_ecmascript.c"
 }
       break;
 /********* End destructor definitions *****************************************/
@@ -1397,150 +1362,280 @@ static void yy_shift(
   yyTraceShift(yypParser, yyNewState, "Shift");
 }
 
-/* The following table contains information about every rule that
-** is used during the reduce.
-*/
-static const struct {
-  YYCODETYPE lhs;       /* Symbol on the left-hand side of the rule */
-  signed char nrhs;     /* Negative of the number of RHS symbols in the rule */
-} yyRuleInfo[] = {
-  {   78,   -2 }, /* (0) query ::= query query_element */
-  {   78,   -3 }, /* (1) query ::= query LOGICAL_AND query_element */
-  {   78,   -3 }, /* (2) query ::= query LOGICAL_AND_NOT query_element */
-  {   78,   -3 }, /* (3) query ::= query LOGICAL_OR query_element */
-  {   78,   -3 }, /* (4) query ::= query NEGATIVE query_element */
-  {   82,   -2 }, /* (5) query_element ::= ADJUST query_element */
-  {   82,   -2 }, /* (6) query_element ::= RELATIVE_OP query_element */
-  {   82,   -3 }, /* (7) query_element ::= IDENTIFIER RELATIVE_OP query_element */
-  {   82,   -3 }, /* (8) query_element ::= BRACEL expression BRACER */
-  {   82,   -2 }, /* (9) query_element ::= EVAL primary_expression */
-  {   79,   -3 }, /* (10) expression ::= expression COMMA assignment_expression */
-  {   84,   -3 }, /* (11) assignment_expression ::= lefthand_side_expression ASSIGN assignment_expression */
-  {   84,   -3 }, /* (12) assignment_expression ::= lefthand_side_expression STAR_ASSIGN assignment_expression */
-  {   84,   -3 }, /* (13) assignment_expression ::= lefthand_side_expression SLASH_ASSIGN assignment_expression */
-  {   84,   -3 }, /* (14) assignment_expression ::= lefthand_side_expression MOD_ASSIGN assignment_expression */
-  {   84,   -3 }, /* (15) assignment_expression ::= lefthand_side_expression PLUS_ASSIGN assignment_expression */
-  {   84,   -3 }, /* (16) assignment_expression ::= lefthand_side_expression MINUS_ASSIGN assignment_expression */
-  {   84,   -3 }, /* (17) assignment_expression ::= lefthand_side_expression SHIFTL_ASSIGN assignment_expression */
-  {   84,   -3 }, /* (18) assignment_expression ::= lefthand_side_expression SHIFTR_ASSIGN assignment_expression */
-  {   84,   -3 }, /* (19) assignment_expression ::= lefthand_side_expression SHIFTRR_ASSIGN assignment_expression */
-  {   84,   -3 }, /* (20) assignment_expression ::= lefthand_side_expression AND_ASSIGN assignment_expression */
-  {   84,   -3 }, /* (21) assignment_expression ::= lefthand_side_expression XOR_ASSIGN assignment_expression */
-  {   84,   -3 }, /* (22) assignment_expression ::= lefthand_side_expression OR_ASSIGN assignment_expression */
-  {   85,   -5 }, /* (23) conditional_expression ::= logical_or_expression QUESTION assignment_expression COLON assignment_expression */
-  {   87,   -3 }, /* (24) logical_or_expression ::= logical_or_expression LOGICAL_OR logical_and_expression */
-  {   88,   -3 }, /* (25) logical_and_expression ::= logical_and_expression LOGICAL_AND bitwise_or_expression */
-  {   88,   -3 }, /* (26) logical_and_expression ::= logical_and_expression LOGICAL_AND_NOT bitwise_or_expression */
-  {   89,   -3 }, /* (27) bitwise_or_expression ::= bitwise_or_expression BITWISE_OR bitwise_xor_expression */
-  {   90,   -3 }, /* (28) bitwise_xor_expression ::= bitwise_xor_expression BITWISE_XOR bitwise_and_expression */
-  {   91,   -3 }, /* (29) bitwise_and_expression ::= bitwise_and_expression BITWISE_AND equality_expression */
-  {   92,   -3 }, /* (30) equality_expression ::= equality_expression EQUAL relational_expression */
-  {   92,   -3 }, /* (31) equality_expression ::= equality_expression NOT_EQUAL relational_expression */
-  {   93,   -3 }, /* (32) relational_expression ::= relational_expression LESS shift_expression */
-  {   93,   -3 }, /* (33) relational_expression ::= relational_expression GREATER shift_expression */
-  {   93,   -3 }, /* (34) relational_expression ::= relational_expression LESS_EQUAL shift_expression */
-  {   93,   -3 }, /* (35) relational_expression ::= relational_expression GREATER_EQUAL shift_expression */
-  {   93,   -3 }, /* (36) relational_expression ::= relational_expression IN shift_expression */
-  {   93,   -3 }, /* (37) relational_expression ::= relational_expression MATCH shift_expression */
-  {   93,   -3 }, /* (38) relational_expression ::= relational_expression NEAR shift_expression */
-  {   93,   -3 }, /* (39) relational_expression ::= relational_expression NEAR2 shift_expression */
-  {   93,   -3 }, /* (40) relational_expression ::= relational_expression SIMILAR shift_expression */
-  {   93,   -3 }, /* (41) relational_expression ::= relational_expression TERM_EXTRACT shift_expression */
-  {   93,   -3 }, /* (42) relational_expression ::= relational_expression QUORUM shift_expression */
-  {   93,   -3 }, /* (43) relational_expression ::= relational_expression LCP shift_expression */
-  {   93,   -3 }, /* (44) relational_expression ::= relational_expression PREFIX shift_expression */
-  {   93,   -3 }, /* (45) relational_expression ::= relational_expression SUFFIX shift_expression */
-  {   93,   -3 }, /* (46) relational_expression ::= relational_expression REGEXP shift_expression */
-  {   94,   -3 }, /* (47) shift_expression ::= shift_expression SHIFTL additive_expression */
-  {   94,   -3 }, /* (48) shift_expression ::= shift_expression SHIFTR additive_expression */
-  {   94,   -3 }, /* (49) shift_expression ::= shift_expression SHIFTRR additive_expression */
-  {   95,   -3 }, /* (50) additive_expression ::= additive_expression PLUS multiplicative_expression */
-  {   95,   -3 }, /* (51) additive_expression ::= additive_expression MINUS multiplicative_expression */
-  {   96,   -3 }, /* (52) multiplicative_expression ::= multiplicative_expression STAR unary_expression */
-  {   96,   -3 }, /* (53) multiplicative_expression ::= multiplicative_expression SLASH unary_expression */
-  {   96,   -3 }, /* (54) multiplicative_expression ::= multiplicative_expression MOD unary_expression */
-  {   97,   -2 }, /* (55) unary_expression ::= DELETE unary_expression */
-  {   97,   -2 }, /* (56) unary_expression ::= INCR unary_expression */
-  {   97,   -2 }, /* (57) unary_expression ::= DECR unary_expression */
-  {   97,   -2 }, /* (58) unary_expression ::= PLUS unary_expression */
-  {   97,   -2 }, /* (59) unary_expression ::= MINUS unary_expression */
-  {   97,   -2 }, /* (60) unary_expression ::= NOT unary_expression */
-  {   97,   -2 }, /* (61) unary_expression ::= BITWISE_NOT unary_expression */
-  {   97,   -2 }, /* (62) unary_expression ::= ADJUST unary_expression */
-  {   97,   -2 }, /* (63) unary_expression ::= EXACT unary_expression */
-  {   97,   -2 }, /* (64) unary_expression ::= PARTIAL unary_expression */
-  {   97,   -2 }, /* (65) unary_expression ::= UNSPLIT unary_expression */
-  {   98,   -2 }, /* (66) postfix_expression ::= lefthand_side_expression INCR */
-  {   98,   -2 }, /* (67) postfix_expression ::= lefthand_side_expression DECR */
-  {   99,   -2 }, /* (68) call_expression ::= member_expression arguments */
-  {  103,   -3 }, /* (69) object_literal ::= BRACEL property_name_and_value_list BRACER */
-  {  107,    0 }, /* (70) property_name_and_value_list ::= */
-  {  108,   -3 }, /* (71) property_name_and_value ::= property_name COLON assignment_expression */
-  {  102,   -3 }, /* (72) member_expression_part ::= BRACKETL expression BRACKETR */
-  {  101,   -3 }, /* (73) arguments ::= PARENL argument_list PARENR */
-  {  110,    0 }, /* (74) argument_list ::= */
-  {  110,   -1 }, /* (75) argument_list ::= assignment_expression */
-  {  110,   -3 }, /* (76) argument_list ::= argument_list COMMA assignment_expression */
-  {   80,    0 }, /* (77) output_columns ::= */
-  {   80,   -1 }, /* (78) output_columns ::= output_column */
-  {   80,   -2 }, /* (79) output_columns ::= output_columns COMMA */
-  {   80,   -3 }, /* (80) output_columns ::= output_columns COMMA output_column */
-  {  111,   -1 }, /* (81) output_column ::= STAR */
-  {  111,   -1 }, /* (82) output_column ::= NONEXISTENT_COLUMN */
-  {  111,   -1 }, /* (83) output_column ::= assignment_expression */
-  {   81,   -3 }, /* (84) adjuster ::= adjuster PLUS adjust_expression */
-  {  112,   -3 }, /* (85) adjust_expression ::= adjust_match_expression STAR DECIMAL */
-  {  113,   -3 }, /* (86) adjust_match_expression ::= IDENTIFIER MATCH STRING */
-  {   77,   -1 }, /* (87) input ::= query */
-  {   77,   -1 }, /* (88) input ::= expression */
-  {   77,   -2 }, /* (89) input ::= START_OUTPUT_COLUMNS output_columns */
-  {   77,   -2 }, /* (90) input ::= START_ADJUSTER adjuster */
-  {   78,   -1 }, /* (91) query ::= query_element */
-  {   82,   -1 }, /* (92) query_element ::= QSTRING */
-  {   82,   -3 }, /* (93) query_element ::= PARENL query PARENR */
-  {   79,   -1 }, /* (94) expression ::= assignment_expression */
-  {   84,   -1 }, /* (95) assignment_expression ::= conditional_expression */
-  {   85,   -1 }, /* (96) conditional_expression ::= logical_or_expression */
-  {   87,   -1 }, /* (97) logical_or_expression ::= logical_and_expression */
-  {   88,   -1 }, /* (98) logical_and_expression ::= bitwise_or_expression */
-  {   89,   -1 }, /* (99) bitwise_or_expression ::= bitwise_xor_expression */
-  {   90,   -1 }, /* (100) bitwise_xor_expression ::= bitwise_and_expression */
-  {   91,   -1 }, /* (101) bitwise_and_expression ::= equality_expression */
-  {   92,   -1 }, /* (102) equality_expression ::= relational_expression */
-  {   93,   -1 }, /* (103) relational_expression ::= shift_expression */
-  {   94,   -1 }, /* (104) shift_expression ::= additive_expression */
-  {   95,   -1 }, /* (105) additive_expression ::= multiplicative_expression */
-  {   96,   -1 }, /* (106) multiplicative_expression ::= unary_expression */
-  {   97,   -1 }, /* (107) unary_expression ::= postfix_expression */
-  {   98,   -1 }, /* (108) postfix_expression ::= lefthand_side_expression */
-  {   86,   -1 }, /* (109) lefthand_side_expression ::= call_expression */
-  {   86,   -1 }, /* (110) lefthand_side_expression ::= member_expression */
-  {  100,   -1 }, /* (111) member_expression ::= primary_expression */
-  {  100,   -2 }, /* (112) member_expression ::= member_expression member_expression_part */
-  {   83,   -1 }, /* (113) primary_expression ::= object_literal */
-  {   83,   -3 }, /* (114) primary_expression ::= PARENL expression PARENR */
-  {   83,   -1 }, /* (115) primary_expression ::= IDENTIFIER */
-  {   83,   -1 }, /* (116) primary_expression ::= array_literal */
-  {   83,   -1 }, /* (117) primary_expression ::= DECIMAL */
-  {   83,   -1 }, /* (118) primary_expression ::= HEX_INTEGER */
-  {   83,   -1 }, /* (119) primary_expression ::= STRING */
-  {   83,   -1 }, /* (120) primary_expression ::= BOOLEAN */
-  {   83,   -1 }, /* (121) primary_expression ::= NULL */
-  {  104,   -3 }, /* (122) array_literal ::= BRACKETL elision BRACKETR */
-  {  104,   -4 }, /* (123) array_literal ::= BRACKETL element_list elision BRACKETR */
-  {  104,   -3 }, /* (124) array_literal ::= BRACKETL element_list BRACKETR */
-  {  105,   -1 }, /* (125) elision ::= COMMA */
-  {  105,   -2 }, /* (126) elision ::= elision COMMA */
-  {  106,   -1 }, /* (127) element_list ::= assignment_expression */
-  {  106,   -2 }, /* (128) element_list ::= elision assignment_expression */
-  {  106,   -3 }, /* (129) element_list ::= element_list elision assignment_expression */
-  {  107,   -1 }, /* (130) property_name_and_value_list ::= property_name_and_value */
-  {  107,   -3 }, /* (131) property_name_and_value_list ::= property_name_and_value_list COMMA property_name_and_value */
-  {  109,   -1 }, /* (132) property_name ::= STRING */
-  {  102,   -2 }, /* (133) member_expression_part ::= DOT IDENTIFIER */
-  {   81,    0 }, /* (134) adjuster ::= */
-  {   81,   -1 }, /* (135) adjuster ::= adjust_expression */
-  {  112,   -1 }, /* (136) adjust_expression ::= adjust_match_expression */
+/* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side
+** of that rule */
+static const YYCODETYPE yyRuleInfoLhs[] = {
+    78,  /* (0) query ::= query query_element */
+    78,  /* (1) query ::= query LOGICAL_AND query_element */
+    78,  /* (2) query ::= query LOGICAL_AND_NOT query_element */
+    78,  /* (3) query ::= query LOGICAL_OR query_element */
+    78,  /* (4) query ::= query NEGATIVE query_element */
+    82,  /* (5) query_element ::= ADJUST query_element */
+    82,  /* (6) query_element ::= RELATIVE_OP query_element */
+    82,  /* (7) query_element ::= IDENTIFIER RELATIVE_OP query_element */
+    82,  /* (8) query_element ::= BRACEL expression BRACER */
+    82,  /* (9) query_element ::= EVAL primary_expression */
+    79,  /* (10) expression ::= expression COMMA assignment_expression */
+    84,  /* (11) assignment_expression ::= lefthand_side_expression ASSIGN assignment_expression */
+    84,  /* (12) assignment_expression ::= lefthand_side_expression STAR_ASSIGN assignment_expression */
+    84,  /* (13) assignment_expression ::= lefthand_side_expression SLASH_ASSIGN assignment_expression */
+    84,  /* (14) assignment_expression ::= lefthand_side_expression MOD_ASSIGN assignment_expression */
+    84,  /* (15) assignment_expression ::= lefthand_side_expression PLUS_ASSIGN assignment_expression */
+    84,  /* (16) assignment_expression ::= lefthand_side_expression MINUS_ASSIGN assignment_expression */
+    84,  /* (17) assignment_expression ::= lefthand_side_expression SHIFTL_ASSIGN assignment_expression */
+    84,  /* (18) assignment_expression ::= lefthand_side_expression SHIFTR_ASSIGN assignment_expression */
+    84,  /* (19) assignment_expression ::= lefthand_side_expression SHIFTRR_ASSIGN assignment_expression */
+    84,  /* (20) assignment_expression ::= lefthand_side_expression AND_ASSIGN assignment_expression */
+    84,  /* (21) assignment_expression ::= lefthand_side_expression XOR_ASSIGN assignment_expression */
+    84,  /* (22) assignment_expression ::= lefthand_side_expression OR_ASSIGN assignment_expression */
+    85,  /* (23) conditional_expression ::= logical_or_expression QUESTION assignment_expression COLON assignment_expression */
+    87,  /* (24) logical_or_expression ::= logical_or_expression LOGICAL_OR logical_and_expression */
+    88,  /* (25) logical_and_expression ::= logical_and_expression LOGICAL_AND bitwise_or_expression */
+    88,  /* (26) logical_and_expression ::= logical_and_expression LOGICAL_AND_NOT bitwise_or_expression */
+    89,  /* (27) bitwise_or_expression ::= bitwise_or_expression BITWISE_OR bitwise_xor_expression */
+    90,  /* (28) bitwise_xor_expression ::= bitwise_xor_expression BITWISE_XOR bitwise_and_expression */
+    91,  /* (29) bitwise_and_expression ::= bitwise_and_expression BITWISE_AND equality_expression */
+    92,  /* (30) equality_expression ::= equality_expression EQUAL relational_expression */
+    92,  /* (31) equality_expression ::= equality_expression NOT_EQUAL relational_expression */
+    93,  /* (32) relational_expression ::= relational_expression LESS shift_expression */
+    93,  /* (33) relational_expression ::= relational_expression GREATER shift_expression */
+    93,  /* (34) relational_expression ::= relational_expression LESS_EQUAL shift_expression */
+    93,  /* (35) relational_expression ::= relational_expression GREATER_EQUAL shift_expression */
+    93,  /* (36) relational_expression ::= relational_expression IN shift_expression */
+    93,  /* (37) relational_expression ::= relational_expression MATCH shift_expression */
+    93,  /* (38) relational_expression ::= relational_expression NEAR shift_expression */
+    93,  /* (39) relational_expression ::= relational_expression NEAR2 shift_expression */
+    93,  /* (40) relational_expression ::= relational_expression SIMILAR shift_expression */
+    93,  /* (41) relational_expression ::= relational_expression TERM_EXTRACT shift_expression */
+    93,  /* (42) relational_expression ::= relational_expression QUORUM shift_expression */
+    93,  /* (43) relational_expression ::= relational_expression LCP shift_expression */
+    93,  /* (44) relational_expression ::= relational_expression PREFIX shift_expression */
+    93,  /* (45) relational_expression ::= relational_expression SUFFIX shift_expression */
+    93,  /* (46) relational_expression ::= relational_expression REGEXP shift_expression */
+    94,  /* (47) shift_expression ::= shift_expression SHIFTL additive_expression */
+    94,  /* (48) shift_expression ::= shift_expression SHIFTR additive_expression */
+    94,  /* (49) shift_expression ::= shift_expression SHIFTRR additive_expression */
+    95,  /* (50) additive_expression ::= additive_expression PLUS multiplicative_expression */
+    95,  /* (51) additive_expression ::= additive_expression MINUS multiplicative_expression */
+    96,  /* (52) multiplicative_expression ::= multiplicative_expression STAR unary_expression */
+    96,  /* (53) multiplicative_expression ::= multiplicative_expression SLASH unary_expression */
+    96,  /* (54) multiplicative_expression ::= multiplicative_expression MOD unary_expression */
+    97,  /* (55) unary_expression ::= DELETE unary_expression */
+    97,  /* (56) unary_expression ::= INCR unary_expression */
+    97,  /* (57) unary_expression ::= DECR unary_expression */
+    97,  /* (58) unary_expression ::= PLUS unary_expression */
+    97,  /* (59) unary_expression ::= MINUS unary_expression */
+    97,  /* (60) unary_expression ::= NOT unary_expression */
+    97,  /* (61) unary_expression ::= BITWISE_NOT unary_expression */
+    97,  /* (62) unary_expression ::= ADJUST unary_expression */
+    97,  /* (63) unary_expression ::= EXACT unary_expression */
+    97,  /* (64) unary_expression ::= PARTIAL unary_expression */
+    97,  /* (65) unary_expression ::= UNSPLIT unary_expression */
+    98,  /* (66) postfix_expression ::= lefthand_side_expression INCR */
+    98,  /* (67) postfix_expression ::= lefthand_side_expression DECR */
+    99,  /* (68) call_expression ::= member_expression arguments */
+   104,  /* (69) array_literal ::= BRACKETL element_list BRACKETR */
+   105,  /* (70) element_list ::= */
+   105,  /* (71) element_list ::= assignment_expression */
+   103,  /* (72) object_literal ::= BRACEL property_name_and_value_list BRACER */
+   106,  /* (73) property_name_and_value_list ::= */
+   107,  /* (74) property_name_and_value ::= property_name COLON assignment_expression */
+   102,  /* (75) member_expression_part ::= BRACKETL expression BRACKETR */
+   101,  /* (76) arguments ::= PARENL argument_list PARENR */
+   109,  /* (77) argument_list ::= */
+   109,  /* (78) argument_list ::= assignment_expression */
+   109,  /* (79) argument_list ::= argument_list COMMA assignment_expression */
+    80,  /* (80) output_columns ::= */
+    80,  /* (81) output_columns ::= output_column */
+    80,  /* (82) output_columns ::= output_columns COMMA */
+    80,  /* (83) output_columns ::= output_columns COMMA output_column */
+   110,  /* (84) output_column ::= STAR */
+   110,  /* (85) output_column ::= NONEXISTENT_COLUMN */
+   110,  /* (86) output_column ::= assignment_expression */
+    81,  /* (87) adjuster ::= adjuster PLUS adjust_expression */
+   111,  /* (88) adjust_expression ::= adjust_match_expression STAR DECIMAL */
+   112,  /* (89) adjust_match_expression ::= IDENTIFIER MATCH STRING */
+    77,  /* (90) input ::= query */
+    77,  /* (91) input ::= expression */
+    77,  /* (92) input ::= START_OUTPUT_COLUMNS output_columns */
+    77,  /* (93) input ::= START_ADJUSTER adjuster */
+    78,  /* (94) query ::= query_element */
+    82,  /* (95) query_element ::= QSTRING */
+    82,  /* (96) query_element ::= PARENL query PARENR */
+    79,  /* (97) expression ::= assignment_expression */
+    84,  /* (98) assignment_expression ::= conditional_expression */
+    85,  /* (99) conditional_expression ::= logical_or_expression */
+    87,  /* (100) logical_or_expression ::= logical_and_expression */
+    88,  /* (101) logical_and_expression ::= bitwise_or_expression */
+    89,  /* (102) bitwise_or_expression ::= bitwise_xor_expression */
+    90,  /* (103) bitwise_xor_expression ::= bitwise_and_expression */
+    91,  /* (104) bitwise_and_expression ::= equality_expression */
+    92,  /* (105) equality_expression ::= relational_expression */
+    93,  /* (106) relational_expression ::= shift_expression */
+    94,  /* (107) shift_expression ::= additive_expression */
+    95,  /* (108) additive_expression ::= multiplicative_expression */
+    96,  /* (109) multiplicative_expression ::= unary_expression */
+    97,  /* (110) unary_expression ::= postfix_expression */
+    98,  /* (111) postfix_expression ::= lefthand_side_expression */
+    86,  /* (112) lefthand_side_expression ::= call_expression */
+    86,  /* (113) lefthand_side_expression ::= member_expression */
+   100,  /* (114) member_expression ::= primary_expression */
+   100,  /* (115) member_expression ::= member_expression member_expression_part */
+    83,  /* (116) primary_expression ::= object_literal */
+    83,  /* (117) primary_expression ::= PARENL expression PARENR */
+    83,  /* (118) primary_expression ::= IDENTIFIER */
+    83,  /* (119) primary_expression ::= array_literal */
+    83,  /* (120) primary_expression ::= DECIMAL */
+    83,  /* (121) primary_expression ::= HEX_INTEGER */
+    83,  /* (122) primary_expression ::= STRING */
+    83,  /* (123) primary_expression ::= BOOLEAN */
+    83,  /* (124) primary_expression ::= NULL */
+   105,  /* (125) element_list ::= element_list COMMA assignment_expression */
+   106,  /* (126) property_name_and_value_list ::= property_name_and_value */
+   106,  /* (127) property_name_and_value_list ::= property_name_and_value_list COMMA property_name_and_value */
+   108,  /* (128) property_name ::= STRING */
+   102,  /* (129) member_expression_part ::= DOT IDENTIFIER */
+    81,  /* (130) adjuster ::= */
+    81,  /* (131) adjuster ::= adjust_expression */
+   111,  /* (132) adjust_expression ::= adjust_match_expression */
+};
+
+/* For rule J, yyRuleInfoNRhs[J] contains the negative of the number
+** of symbols on the right-hand side of that rule. */
+static const signed char yyRuleInfoNRhs[] = {
+   -2,  /* (0) query ::= query query_element */
+   -3,  /* (1) query ::= query LOGICAL_AND query_element */
+   -3,  /* (2) query ::= query LOGICAL_AND_NOT query_element */
+   -3,  /* (3) query ::= query LOGICAL_OR query_element */
+   -3,  /* (4) query ::= query NEGATIVE query_element */
+   -2,  /* (5) query_element ::= ADJUST query_element */
+   -2,  /* (6) query_element ::= RELATIVE_OP query_element */
+   -3,  /* (7) query_element ::= IDENTIFIER RELATIVE_OP query_element */
+   -3,  /* (8) query_element ::= BRACEL expression BRACER */
+   -2,  /* (9) query_element ::= EVAL primary_expression */
+   -3,  /* (10) expression ::= expression COMMA assignment_expression */
+   -3,  /* (11) assignment_expression ::= lefthand_side_expression ASSIGN assignment_expression */
+   -3,  /* (12) assignment_expression ::= lefthand_side_expression STAR_ASSIGN assignment_expression */
+   -3,  /* (13) assignment_expression ::= lefthand_side_expression SLASH_ASSIGN assignment_expression */
+   -3,  /* (14) assignment_expression ::= lefthand_side_expression MOD_ASSIGN assignment_expression */
+   -3,  /* (15) assignment_expression ::= lefthand_side_expression PLUS_ASSIGN assignment_expression */
+   -3,  /* (16) assignment_expression ::= lefthand_side_expression MINUS_ASSIGN assignment_expression */
+   -3,  /* (17) assignment_expression ::= lefthand_side_expression SHIFTL_ASSIGN assignment_expression */
+   -3,  /* (18) assignment_expression ::= lefthand_side_expression SHIFTR_ASSIGN assignment_expression */
+   -3,  /* (19) assignment_expression ::= lefthand_side_expression SHIFTRR_ASSIGN assignment_expression */
+   -3,  /* (20) assignment_expression ::= lefthand_side_expression AND_ASSIGN assignment_expression */
+   -3,  /* (21) assignment_expression ::= lefthand_side_expression XOR_ASSIGN assignment_expression */
+   -3,  /* (22) assignment_expression ::= lefthand_side_expression OR_ASSIGN assignment_expression */
+   -5,  /* (23) conditional_expression ::= logical_or_expression QUESTION assignment_expression COLON assignment_expression */
+   -3,  /* (24) logical_or_expression ::= logical_or_expression LOGICAL_OR logical_and_expression */
+   -3,  /* (25) logical_and_expression ::= logical_and_expression LOGICAL_AND bitwise_or_expression */
+   -3,  /* (26) logical_and_expression ::= logical_and_expression LOGICAL_AND_NOT bitwise_or_expression */
+   -3,  /* (27) bitwise_or_expression ::= bitwise_or_expression BITWISE_OR bitwise_xor_expression */
+   -3,  /* (28) bitwise_xor_expression ::= bitwise_xor_expression BITWISE_XOR bitwise_and_expression */
+   -3,  /* (29) bitwise_and_expression ::= bitwise_and_expression BITWISE_AND equality_expression */
+   -3,  /* (30) equality_expression ::= equality_expression EQUAL relational_expression */
+   -3,  /* (31) equality_expression ::= equality_expression NOT_EQUAL relational_expression */
+   -3,  /* (32) relational_expression ::= relational_expression LESS shift_expression */
+   -3,  /* (33) relational_expression ::= relational_expression GREATER shift_expression */
+   -3,  /* (34) relational_expression ::= relational_expression LESS_EQUAL shift_expression */
+   -3,  /* (35) relational_expression ::= relational_expression GREATER_EQUAL shift_expression */
+   -3,  /* (36) relational_expression ::= relational_expression IN shift_expression */
+   -3,  /* (37) relational_expression ::= relational_expression MATCH shift_expression */
+   -3,  /* (38) relational_expression ::= relational_expression NEAR shift_expression */
+   -3,  /* (39) relational_expression ::= relational_expression NEAR2 shift_expression */
+   -3,  /* (40) relational_expression ::= relational_expression SIMILAR shift_expression */
+   -3,  /* (41) relational_expression ::= relational_expression TERM_EXTRACT shift_expression */
+   -3,  /* (42) relational_expression ::= relational_expression QUORUM shift_expression */
+   -3,  /* (43) relational_expression ::= relational_expression LCP shift_expression */
+   -3,  /* (44) relational_expression ::= relational_expression PREFIX shift_expression */
+   -3,  /* (45) relational_expression ::= relational_expression SUFFIX shift_expression */
+   -3,  /* (46) relational_expression ::= relational_expression REGEXP shift_expression */
+   -3,  /* (47) shift_expression ::= shift_expression SHIFTL additive_expression */
+   -3,  /* (48) shift_expression ::= shift_expression SHIFTR additive_expression */
+   -3,  /* (49) shift_expression ::= shift_expression SHIFTRR additive_expression */
+   -3,  /* (50) additive_expression ::= additive_expression PLUS multiplicative_expression */
+   -3,  /* (51) additive_expression ::= additive_expression MINUS multiplicative_expression */
+   -3,  /* (52) multiplicative_expression ::= multiplicative_expression STAR unary_expression */
+   -3,  /* (53) multiplicative_expression ::= multiplicative_expression SLASH unary_expression */
+   -3,  /* (54) multiplicative_expression ::= multiplicative_expression MOD unary_expression */
+   -2,  /* (55) unary_expression ::= DELETE unary_expression */
+   -2,  /* (56) unary_expression ::= INCR unary_expression */
+   -2,  /* (57) unary_expression ::= DECR unary_expression */
+   -2,  /* (58) unary_expression ::= PLUS unary_expression */
+   -2,  /* (59) unary_expression ::= MINUS unary_expression */
+   -2,  /* (60) unary_expression ::= NOT unary_expression */
+   -2,  /* (61) unary_expression ::= BITWISE_NOT unary_expression */
+   -2,  /* (62) unary_expression ::= ADJUST unary_expression */
+   -2,  /* (63) unary_expression ::= EXACT unary_expression */
+   -2,  /* (64) unary_expression ::= PARTIAL unary_expression */
+   -2,  /* (65) unary_expression ::= UNSPLIT unary_expression */
+   -2,  /* (66) postfix_expression ::= lefthand_side_expression INCR */
+   -2,  /* (67) postfix_expression ::= lefthand_side_expression DECR */
+   -2,  /* (68) call_expression ::= member_expression arguments */
+   -3,  /* (69) array_literal ::= BRACKETL element_list BRACKETR */
+    0,  /* (70) element_list ::= */
+   -1,  /* (71) element_list ::= assignment_expression */
+   -3,  /* (72) object_literal ::= BRACEL property_name_and_value_list BRACER */
+    0,  /* (73) property_name_and_value_list ::= */
+   -3,  /* (74) property_name_and_value ::= property_name COLON assignment_expression */
+   -3,  /* (75) member_expression_part ::= BRACKETL expression BRACKETR */
+   -3,  /* (76) arguments ::= PARENL argument_list PARENR */
+    0,  /* (77) argument_list ::= */
+   -1,  /* (78) argument_list ::= assignment_expression */
+   -3,  /* (79) argument_list ::= argument_list COMMA assignment_expression */
+    0,  /* (80) output_columns ::= */
+   -1,  /* (81) output_columns ::= output_column */
+   -2,  /* (82) output_columns ::= output_columns COMMA */
+   -3,  /* (83) output_columns ::= output_columns COMMA output_column */
+   -1,  /* (84) output_column ::= STAR */
+   -1,  /* (85) output_column ::= NONEXISTENT_COLUMN */
+   -1,  /* (86) output_column ::= assignment_expression */
+   -3,  /* (87) adjuster ::= adjuster PLUS adjust_expression */
+   -3,  /* (88) adjust_expression ::= adjust_match_expression STAR DECIMAL */
+   -3,  /* (89) adjust_match_expression ::= IDENTIFIER MATCH STRING */
+   -1,  /* (90) input ::= query */
+   -1,  /* (91) input ::= expression */
+   -2,  /* (92) input ::= START_OUTPUT_COLUMNS output_columns */
+   -2,  /* (93) input ::= START_ADJUSTER adjuster */
+   -1,  /* (94) query ::= query_element */
+   -1,  /* (95) query_element ::= QSTRING */
+   -3,  /* (96) query_element ::= PARENL query PARENR */
+   -1,  /* (97) expression ::= assignment_expression */
+   -1,  /* (98) assignment_expression ::= conditional_expression */
+   -1,  /* (99) conditional_expression ::= logical_or_expression */
+   -1,  /* (100) logical_or_expression ::= logical_and_expression */
+   -1,  /* (101) logical_and_expression ::= bitwise_or_expression */
+   -1,  /* (102) bitwise_or_expression ::= bitwise_xor_expression */
+   -1,  /* (103) bitwise_xor_expression ::= bitwise_and_expression */
+   -1,  /* (104) bitwise_and_expression ::= equality_expression */
+   -1,  /* (105) equality_expression ::= relational_expression */
+   -1,  /* (106) relational_expression ::= shift_expression */
+   -1,  /* (107) shift_expression ::= additive_expression */
+   -1,  /* (108) additive_expression ::= multiplicative_expression */
+   -1,  /* (109) multiplicative_expression ::= unary_expression */
+   -1,  /* (110) unary_expression ::= postfix_expression */
+   -1,  /* (111) postfix_expression ::= lefthand_side_expression */
+   -1,  /* (112) lefthand_side_expression ::= call_expression */
+   -1,  /* (113) lefthand_side_expression ::= member_expression */
+   -1,  /* (114) member_expression ::= primary_expression */
+   -2,  /* (115) member_expression ::= member_expression member_expression_part */
+   -1,  /* (116) primary_expression ::= object_literal */
+   -3,  /* (117) primary_expression ::= PARENL expression PARENR */
+   -1,  /* (118) primary_expression ::= IDENTIFIER */
+   -1,  /* (119) primary_expression ::= array_literal */
+   -1,  /* (120) primary_expression ::= DECIMAL */
+   -1,  /* (121) primary_expression ::= HEX_INTEGER */
+   -1,  /* (122) primary_expression ::= STRING */
+   -1,  /* (123) primary_expression ::= BOOLEAN */
+   -1,  /* (124) primary_expression ::= NULL */
+   -3,  /* (125) element_list ::= element_list COMMA assignment_expression */
+   -1,  /* (126) property_name_and_value_list ::= property_name_and_value */
+   -3,  /* (127) property_name_and_value_list ::= property_name_and_value_list COMMA property_name_and_value */
+   -1,  /* (128) property_name ::= STRING */
+   -2,  /* (129) member_expression_part ::= DOT IDENTIFIER */
+    0,  /* (130) adjuster ::= */
+   -1,  /* (131) adjuster ::= adjust_expression */
+   -1,  /* (132) adjust_expression ::= adjust_match_expression */
 };
 
 static void yy_accept(yyParser*);  /* Forward Declaration */
@@ -1572,7 +1667,7 @@ static YYACTIONTYPE yy_reduce(
   yymsp = yypParser->yytos;
 #ifndef NDEBUG
   if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
-    yysize = yyRuleInfo[yyruleno].nrhs;
+    yysize = yyRuleInfoNRhs[yyruleno];
     if( yysize ){
       fprintf(yyTraceFILE, "%sReduce %d [%s], go to state %d.\n",
         yyTracePrompt,
@@ -1587,7 +1682,7 @@ static YYACTIONTYPE yy_reduce(
   /* Check that the stack is large enough to grow by a single entry
   ** if the RHS of the rule is empty.  This ensures that there is room
   ** enough on the stack to push the LHS value */
-  if( yyRuleInfo[yyruleno].nrhs==0 ){
+  if( yyRuleInfoNRhs[yyruleno]==0 ){
 #ifdef YYTRACKMAXSTACKDEPTH
     if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){
       yypParser->yyhwm++;
@@ -1632,7 +1727,7 @@ static YYACTIONTYPE yy_reduce(
 {
   grn_expr_append_op(efsi->ctx, efsi->e, grn_int32_value_at(&efsi->op_stack, -1), 2);
 }
-#line 1636 "../../groonga/lib/grn_ecmascript.c"
+#line 1731 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 1: /* query ::= query LOGICAL_AND query_element */
       case 25: /* logical_and_expression ::= logical_and_expression LOGICAL_AND bitwise_or_expression */ yytestcase(yyruleno==25);
@@ -1640,7 +1735,7 @@ static YYACTIONTYPE yy_reduce(
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND, 2);
 }
-#line 1644 "../../groonga/lib/grn_ecmascript.c"
+#line 1739 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 2: /* query ::= query LOGICAL_AND_NOT query_element */
       case 26: /* logical_and_expression ::= logical_and_expression LOGICAL_AND_NOT bitwise_or_expression */ yytestcase(yyruleno==26);
@@ -1648,7 +1743,7 @@ static YYACTIONTYPE yy_reduce(
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND_NOT, 2);
 }
-#line 1652 "../../groonga/lib/grn_ecmascript.c"
+#line 1747 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 3: /* query ::= query LOGICAL_OR query_element */
       case 24: /* logical_or_expression ::= logical_or_expression LOGICAL_OR logical_and_expression */ yytestcase(yyruleno==24);
@@ -1656,7 +1751,7 @@ static YYACTIONTYPE yy_reduce(
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_OR, 2);
 }
-#line 1660 "../../groonga/lib/grn_ecmascript.c"
+#line 1755 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 4: /* query ::= query NEGATIVE query_element */
 #line 67 "../../groonga/lib/grn_ecmascript.lemon"
@@ -1665,7 +1760,7 @@ static YYACTIONTYPE yy_reduce(
   GRN_INT32_POP(&efsi->weight_stack, weight);
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_ADJUST, 2);
 }
-#line 1669 "../../groonga/lib/grn_ecmascript.c"
+#line 1764 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 5: /* query_element ::= ADJUST query_element */
 #line 76 "../../groonga/lib/grn_ecmascript.lemon"
@@ -1673,7 +1768,7 @@ static YYACTIONTYPE yy_reduce(
   int weight;
   GRN_INT32_POP(&efsi->weight_stack, weight);
 }
-#line 1677 "../../groonga/lib/grn_ecmascript.c"
+#line 1772 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 6: /* query_element ::= RELATIVE_OP query_element */
 #line 80 "../../groonga/lib/grn_ecmascript.lemon"
@@ -1681,7 +1776,7 @@ static YYACTIONTYPE yy_reduce(
   int mode;
   GRN_INT32_POP(&efsi->mode_stack, mode);
 }
-#line 1685 "../../groonga/lib/grn_ecmascript.c"
+#line 1780 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 7: /* query_element ::= IDENTIFIER RELATIVE_OP query_element */
 #line 84 "../../groonga/lib/grn_ecmascript.lemon"
@@ -1714,7 +1809,7 @@ static YYACTIONTYPE yy_reduce(
     break;
   }
 }
-#line 1718 "../../groonga/lib/grn_ecmascript.c"
+#line 1813 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 8: /* query_element ::= BRACEL expression BRACER */
       case 9: /* query_element ::= EVAL primary_expression */ yytestcase(yyruleno==9);
@@ -1722,98 +1817,98 @@ static YYACTIONTYPE yy_reduce(
 {
   efsi->flags = efsi->default_flags;
 }
-#line 1726 "../../groonga/lib/grn_ecmascript.c"
+#line 1821 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 10: /* expression ::= expression COMMA assignment_expression */
 #line 121 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_COMMA, 2);
 }
-#line 1733 "../../groonga/lib/grn_ecmascript.c"
+#line 1828 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 11: /* assignment_expression ::= lefthand_side_expression ASSIGN assignment_expression */
 #line 126 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_ASSIGN, 2);
 }
-#line 1740 "../../groonga/lib/grn_ecmascript.c"
+#line 1835 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 12: /* assignment_expression ::= lefthand_side_expression STAR_ASSIGN assignment_expression */
 #line 129 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_STAR_ASSIGN, 2);
 }
-#line 1747 "../../groonga/lib/grn_ecmascript.c"
+#line 1842 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 13: /* assignment_expression ::= lefthand_side_expression SLASH_ASSIGN assignment_expression */
 #line 132 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SLASH_ASSIGN, 2);
 }
-#line 1754 "../../groonga/lib/grn_ecmascript.c"
+#line 1849 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 14: /* assignment_expression ::= lefthand_side_expression MOD_ASSIGN assignment_expression */
 #line 135 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MOD_ASSIGN, 2);
 }
-#line 1761 "../../groonga/lib/grn_ecmascript.c"
+#line 1856 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 15: /* assignment_expression ::= lefthand_side_expression PLUS_ASSIGN assignment_expression */
 #line 138 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS_ASSIGN, 2);
 }
-#line 1768 "../../groonga/lib/grn_ecmascript.c"
+#line 1863 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 16: /* assignment_expression ::= lefthand_side_expression MINUS_ASSIGN assignment_expression */
 #line 141 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS_ASSIGN, 2);
 }
-#line 1775 "../../groonga/lib/grn_ecmascript.c"
+#line 1870 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 17: /* assignment_expression ::= lefthand_side_expression SHIFTL_ASSIGN assignment_expression */
 #line 144 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTL_ASSIGN, 2);
 }
-#line 1782 "../../groonga/lib/grn_ecmascript.c"
+#line 1877 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 18: /* assignment_expression ::= lefthand_side_expression SHIFTR_ASSIGN assignment_expression */
 #line 147 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTR_ASSIGN, 2);
 }
-#line 1789 "../../groonga/lib/grn_ecmascript.c"
+#line 1884 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 19: /* assignment_expression ::= lefthand_side_expression SHIFTRR_ASSIGN assignment_expression */
 #line 150 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTRR_ASSIGN, 2);
 }
-#line 1796 "../../groonga/lib/grn_ecmascript.c"
+#line 1891 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 20: /* assignment_expression ::= lefthand_side_expression AND_ASSIGN assignment_expression */
 #line 153 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_AND_ASSIGN, 2);
 }
-#line 1803 "../../groonga/lib/grn_ecmascript.c"
+#line 1898 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 21: /* assignment_expression ::= lefthand_side_expression XOR_ASSIGN assignment_expression */
 #line 156 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_XOR_ASSIGN, 2);
 }
-#line 1810 "../../groonga/lib/grn_ecmascript.c"
+#line 1905 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 22: /* assignment_expression ::= lefthand_side_expression OR_ASSIGN assignment_expression */
 #line 159 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_OR_ASSIGN, 2);
 }
-#line 1817 "../../groonga/lib/grn_ecmascript.c"
+#line 1912 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 23: /* conditional_expression ::= logical_or_expression QUESTION assignment_expression COLON assignment_expression */
 #line 164 "../../groonga/lib/grn_ecmascript.lemon"
@@ -1822,85 +1917,85 @@ static YYACTIONTYPE yy_reduce(
   e->codes[yymsp[-3].minor.yy0].nargs = yymsp[-1].minor.yy0 - yymsp[-3].minor.yy0;
   e->codes[yymsp[-1].minor.yy0].nargs = e->codes_curr - yymsp[-1].minor.yy0 - 1;
 }
-#line 1826 "../../groonga/lib/grn_ecmascript.c"
+#line 1921 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 27: /* bitwise_or_expression ::= bitwise_or_expression BITWISE_OR bitwise_xor_expression */
 #line 184 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_OR, 2);
 }
-#line 1833 "../../groonga/lib/grn_ecmascript.c"
+#line 1928 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 28: /* bitwise_xor_expression ::= bitwise_xor_expression BITWISE_XOR bitwise_and_expression */
 #line 189 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_XOR, 2);
 }
-#line 1840 "../../groonga/lib/grn_ecmascript.c"
+#line 1935 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 29: /* bitwise_and_expression ::= bitwise_and_expression BITWISE_AND equality_expression */
 #line 194 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_AND, 2);
 }
-#line 1847 "../../groonga/lib/grn_ecmascript.c"
+#line 1942 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 30: /* equality_expression ::= equality_expression EQUAL relational_expression */
 #line 199 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_EQUAL, 2);
 }
-#line 1854 "../../groonga/lib/grn_ecmascript.c"
+#line 1949 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 31: /* equality_expression ::= equality_expression NOT_EQUAL relational_expression */
 #line 202 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NOT_EQUAL, 2);
 }
-#line 1861 "../../groonga/lib/grn_ecmascript.c"
+#line 1956 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 32: /* relational_expression ::= relational_expression LESS shift_expression */
 #line 207 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LESS, 2);
 }
-#line 1868 "../../groonga/lib/grn_ecmascript.c"
+#line 1963 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 33: /* relational_expression ::= relational_expression GREATER shift_expression */
 #line 210 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GREATER, 2);
 }
-#line 1875 "../../groonga/lib/grn_ecmascript.c"
+#line 1970 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 34: /* relational_expression ::= relational_expression LESS_EQUAL shift_expression */
 #line 213 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LESS_EQUAL, 2);
 }
-#line 1882 "../../groonga/lib/grn_ecmascript.c"
+#line 1977 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 35: /* relational_expression ::= relational_expression GREATER_EQUAL shift_expression */
 #line 216 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GREATER_EQUAL, 2);
 }
-#line 1889 "../../groonga/lib/grn_ecmascript.c"
+#line 1984 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 36: /* relational_expression ::= relational_expression IN shift_expression */
 #line 219 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_IN, 2);
 }
-#line 1896 "../../groonga/lib/grn_ecmascript.c"
+#line 1991 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 37: /* relational_expression ::= relational_expression MATCH shift_expression */
-      case 86: /* adjust_match_expression ::= IDENTIFIER MATCH STRING */ yytestcase(yyruleno==86);
+      case 89: /* adjust_match_expression ::= IDENTIFIER MATCH STRING */ yytestcase(yyruleno==89);
 #line 222 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MATCH, 2);
 }
-#line 1904 "../../groonga/lib/grn_ecmascript.c"
+#line 1999 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 38: /* relational_expression ::= relational_expression NEAR shift_expression */
 #line 225 "../../groonga/lib/grn_ecmascript.lemon"
@@ -1913,14 +2008,14 @@ static YYACTIONTYPE yy_reduce(
   }
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NEAR, 3);
 }
-#line 1917 "../../groonga/lib/grn_ecmascript.c"
+#line 2012 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 39: /* relational_expression ::= relational_expression NEAR2 shift_expression */
 #line 234 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NEAR2, 2);
 }
-#line 1924 "../../groonga/lib/grn_ecmascript.c"
+#line 2019 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 40: /* relational_expression ::= relational_expression SIMILAR shift_expression */
 #line 237 "../../groonga/lib/grn_ecmascript.lemon"
@@ -1933,14 +2028,14 @@ static YYACTIONTYPE yy_reduce(
   }
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SIMILAR, 3);
 }
-#line 1937 "../../groonga/lib/grn_ecmascript.c"
+#line 2032 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 41: /* relational_expression ::= relational_expression TERM_EXTRACT shift_expression */
 #line 246 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_TERM_EXTRACT, 2);
 }
-#line 1944 "../../groonga/lib/grn_ecmascript.c"
+#line 2039 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 42: /* relational_expression ::= relational_expression QUORUM shift_expression */
 #line 249 "../../groonga/lib/grn_ecmascript.lemon"
@@ -1953,100 +2048,100 @@ static YYACTIONTYPE yy_reduce(
   }
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_QUORUM, 3);
 }
-#line 1957 "../../groonga/lib/grn_ecmascript.c"
+#line 2052 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 43: /* relational_expression ::= relational_expression LCP shift_expression */
 #line 258 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_LCP, 2);
 }
-#line 1964 "../../groonga/lib/grn_ecmascript.c"
+#line 2059 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 44: /* relational_expression ::= relational_expression PREFIX shift_expression */
 #line 261 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PREFIX, 2);
 }
-#line 1971 "../../groonga/lib/grn_ecmascript.c"
+#line 2066 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 45: /* relational_expression ::= relational_expression SUFFIX shift_expression */
 #line 264 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SUFFIX, 2);
 }
-#line 1978 "../../groonga/lib/grn_ecmascript.c"
+#line 2073 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 46: /* relational_expression ::= relational_expression REGEXP shift_expression */
 #line 267 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_REGEXP, 2);
 }
-#line 1985 "../../groonga/lib/grn_ecmascript.c"
+#line 2080 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 47: /* shift_expression ::= shift_expression SHIFTL additive_expression */
 #line 272 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTL, 2);
 }
-#line 1992 "../../groonga/lib/grn_ecmascript.c"
+#line 2087 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 48: /* shift_expression ::= shift_expression SHIFTR additive_expression */
 #line 275 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTR, 2);
 }
-#line 1999 "../../groonga/lib/grn_ecmascript.c"
+#line 2094 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 49: /* shift_expression ::= shift_expression SHIFTRR additive_expression */
 #line 278 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SHIFTRR, 2);
 }
-#line 2006 "../../groonga/lib/grn_ecmascript.c"
+#line 2101 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 50: /* additive_expression ::= additive_expression PLUS multiplicative_expression */
-      case 84: /* adjuster ::= adjuster PLUS adjust_expression */ yytestcase(yyruleno==84);
+      case 87: /* adjuster ::= adjuster PLUS adjust_expression */ yytestcase(yyruleno==87);
 #line 283 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS, 2);
 }
-#line 2014 "../../groonga/lib/grn_ecmascript.c"
+#line 2109 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 51: /* additive_expression ::= additive_expression MINUS multiplicative_expression */
 #line 286 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS, 2);
 }
-#line 2021 "../../groonga/lib/grn_ecmascript.c"
+#line 2116 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 52: /* multiplicative_expression ::= multiplicative_expression STAR unary_expression */
-      case 85: /* adjust_expression ::= adjust_match_expression STAR DECIMAL */ yytestcase(yyruleno==85);
+      case 88: /* adjust_expression ::= adjust_match_expression STAR DECIMAL */ yytestcase(yyruleno==88);
 #line 291 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_STAR, 2);
 }
-#line 2029 "../../groonga/lib/grn_ecmascript.c"
+#line 2124 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 53: /* multiplicative_expression ::= multiplicative_expression SLASH unary_expression */
 #line 294 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_SLASH, 2);
 }
-#line 2036 "../../groonga/lib/grn_ecmascript.c"
+#line 2131 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 54: /* multiplicative_expression ::= multiplicative_expression MOD unary_expression */
 #line 297 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MOD, 2);
 }
-#line 2043 "../../groonga/lib/grn_ecmascript.c"
+#line 2138 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 55: /* unary_expression ::= DELETE unary_expression */
 #line 302 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_DELETE, 1);
 }
-#line 2050 "../../groonga/lib/grn_ecmascript.c"
+#line 2145 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 56: /* unary_expression ::= INCR unary_expression */
 #line 305 "../../groonga/lib/grn_ecmascript.lemon"
@@ -2067,7 +2162,7 @@ static YYACTIONTYPE yy_reduce(
     grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_INCR, 1);
   }
 }
-#line 2071 "../../groonga/lib/grn_ecmascript.c"
+#line 2166 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 57: /* unary_expression ::= DECR unary_expression */
 #line 322 "../../groonga/lib/grn_ecmascript.lemon"
@@ -2088,63 +2183,63 @@ static YYACTIONTYPE yy_reduce(
     grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_DECR, 1);
   }
 }
-#line 2092 "../../groonga/lib/grn_ecmascript.c"
+#line 2187 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 58: /* unary_expression ::= PLUS unary_expression */
 #line 339 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PLUS, 1);
 }
-#line 2099 "../../groonga/lib/grn_ecmascript.c"
+#line 2194 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 59: /* unary_expression ::= MINUS unary_expression */
 #line 342 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_MINUS, 1);
 }
-#line 2106 "../../groonga/lib/grn_ecmascript.c"
+#line 2201 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 60: /* unary_expression ::= NOT unary_expression */
 #line 345 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_NOT, 1);
 }
-#line 2113 "../../groonga/lib/grn_ecmascript.c"
+#line 2208 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 61: /* unary_expression ::= BITWISE_NOT unary_expression */
 #line 348 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_BITWISE_NOT, 1);
 }
-#line 2120 "../../groonga/lib/grn_ecmascript.c"
+#line 2215 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 62: /* unary_expression ::= ADJUST unary_expression */
 #line 351 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_ADJUST, 1);
 }
-#line 2127 "../../groonga/lib/grn_ecmascript.c"
+#line 2222 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 63: /* unary_expression ::= EXACT unary_expression */
 #line 354 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_EXACT, 1);
 }
-#line 2134 "../../groonga/lib/grn_ecmascript.c"
+#line 2229 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 64: /* unary_expression ::= PARTIAL unary_expression */
 #line 357 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_PARTIAL, 1);
 }
-#line 2141 "../../groonga/lib/grn_ecmascript.c"
+#line 2236 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 65: /* unary_expression ::= UNSPLIT unary_expression */
 #line 360 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_UNSPLIT, 1);
 }
-#line 2148 "../../groonga/lib/grn_ecmascript.c"
+#line 2243 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 66: /* postfix_expression ::= lefthand_side_expression INCR */
 #line 365 "../../groonga/lib/grn_ecmascript.lemon"
@@ -2165,7 +2260,7 @@ static YYACTIONTYPE yy_reduce(
     grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_INCR_POST, 1);
   }
 }
-#line 2169 "../../groonga/lib/grn_ecmascript.c"
+#line 2264 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 67: /* postfix_expression ::= lefthand_side_expression DECR */
 #line 382 "../../groonga/lib/grn_ecmascript.lemon"
@@ -2186,17 +2281,82 @@ static YYACTIONTYPE yy_reduce(
     grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_DECR_POST, 1);
   }
 }
-#line 2190 "../../groonga/lib/grn_ecmascript.c"
+#line 2285 "../../groonga/lib/grn_ecmascript.c"
         break;
       case 68: /* call_expression ::= member_expression arguments */
 #line 403 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_CALL, yymsp[0].minor.yy0);
 }
-#line 2197 "../../groonga/lib/grn_ecmascript.c"
+#line 2292 "../../groonga/lib/grn_ecmascript.c"
+        break;
+      case 69: /* array_literal ::= BRACKETL element_list BRACKETR */
+#line 420 "../../groonga/lib/grn_ecmascript.lemon"
+{
+  grn_ctx *ctx = efsi->ctx;
+  grn_expr_take_obj(ctx, efsi->e, efsi->array_literal);
+  grn_expr_append_obj(ctx, efsi->e, efsi->array_literal,
+                      GRN_OP_PUSH, 1);
+  efsi->array_literal = NULL;
+}
+#line 2303 "../../groonga/lib/grn_ecmascript.c"
         break;
-      case 69: /* object_literal ::= BRACEL property_name_and_value_list BRACER */
-#line 431 "../../groonga/lib/grn_ecmascript.lemon"
+      case 70: /* element_list ::= */
+#line 428 "../../groonga/lib/grn_ecmascript.lemon"
+{
+  grn_ctx *ctx = efsi->ctx;
+
+  efsi->array_literal = grn_obj_open(ctx, GRN_VECTOR, 0, GRN_ID_NIL);
+  if (!efsi->array_literal) {
+    ERR(GRN_NO_MEMORY_AVAILABLE,
+        "couldn't create vector for parsing array literal: <%.*s>",
+        (int)(efsi->str_end - efsi->str), efsi->str);
+  }
+}
+#line 2317 "../../groonga/lib/grn_ecmascript.c"
+        break;
+      case 71: /* element_list ::= assignment_expression */
+#line 438 "../../groonga/lib/grn_ecmascript.lemon"
+{
+  grn_ctx *ctx = efsi->ctx;
+  grn_expr *e = (grn_expr *)(efsi->e);
+  grn_expr_code *code = &(e->codes[e->codes_curr - 1]);
+  if (code->op != GRN_OP_PUSH) {
+    ERR(GRN_FUNCTION_NOT_IMPLEMENTED,
+        "complex expression in array literal isn't supported yet: <%.*s>",
+        (int)(efsi->str_end - efsi->str), efsi->str);
+  }
+  if (ctx->rc == GRN_SUCCESS) {
+    grn_obj *element = code->value;
+    if (!efsi->array_literal) {
+      efsi->array_literal = grn_obj_open(ctx,
+                                         GRN_VECTOR,
+                                         0,
+                                         element->header.domain);
+      if (!efsi->array_literal) {
+        ERR(GRN_NO_MEMORY_AVAILABLE,
+            "couldn't create vector for parsing array literal: <%.*s>",
+            (int)(efsi->str_end - efsi->str), efsi->str);
+      }
+    }
+    if (efsi->array_literal) {
+      grn_vector_add_element(ctx,
+                             efsi->array_literal,
+                             GRN_TEXT_VALUE(element),
+                             GRN_TEXT_LEN(element),
+                             0,
+                             element->header.domain);
+      if (ctx->rc == GRN_SUCCESS) {
+        grn_expr_dfi_pop(e);
+      e->codes_curr -= 1;
+      }
+    }
+  }
+}
+#line 2357 "../../groonga/lib/grn_ecmascript.c"
+        break;
+      case 72: /* object_literal ::= BRACEL property_name_and_value_list BRACER */
+#line 476 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr_take_obj(ctx, efsi->e, (grn_obj *)(efsi->object_literal));
@@ -2204,10 +2364,10 @@ static YYACTIONTYPE yy_reduce(
                       GRN_OP_PUSH, 1);
   efsi->object_literal = NULL;
 }
-#line 2208 "../../groonga/lib/grn_ecmascript.c"
+#line 2368 "../../groonga/lib/grn_ecmascript.c"
         break;
-      case 70: /* property_name_and_value_list ::= */
-#line 439 "../../groonga/lib/grn_ecmascript.lemon"
+      case 73: /* property_name_and_value_list ::= */
+#line 484 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
 
@@ -2220,10 +2380,10 @@ static YYACTIONTYPE yy_reduce(
         (int)(efsi->str_end - efsi->str), efsi->str);
   }
 }
-#line 2224 "../../groonga/lib/grn_ecmascript.c"
+#line 2384 "../../groonga/lib/grn_ecmascript.c"
         break;
-      case 71: /* property_name_and_value ::= property_name COLON assignment_expression */
-#line 454 "../../groonga/lib/grn_ecmascript.lemon"
+      case 74: /* property_name_and_value ::= property_name COLON assignment_expression */
+#line 499 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_expr *e = (grn_expr *)(efsi->e);
@@ -2265,61 +2425,61 @@ static YYACTIONTYPE yy_reduce(
     }
   }
 }
-#line 2269 "../../groonga/lib/grn_ecmascript.c"
+#line 2429 "../../groonga/lib/grn_ecmascript.c"
         break;
-      case 72: /* member_expression_part ::= BRACKETL expression BRACKETR */
-#line 498 "../../groonga/lib/grn_ecmascript.lemon"
+      case 75: /* member_expression_part ::= BRACKETL expression BRACKETR */
+#line 543 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_expr_append_op(efsi->ctx, efsi->e, GRN_OP_GET_MEMBER, 2);
 }
-#line 2276 "../../groonga/lib/grn_ecmascript.c"
+#line 2436 "../../groonga/lib/grn_ecmascript.c"
         break;
-      case 73: /* arguments ::= PARENL argument_list PARENR */
-#line 503 "../../groonga/lib/grn_ecmascript.lemon"
+      case 76: /* arguments ::= PARENL argument_list PARENR */
+#line 548 "../../groonga/lib/grn_ecmascript.lemon"
 { yymsp[-2].minor.yy0 = yymsp[-1].minor.yy0; }
-#line 2281 "../../groonga/lib/grn_ecmascript.c"
+#line 2441 "../../groonga/lib/grn_ecmascript.c"
         break;
-      case 74: /* argument_list ::= */
-#line 504 "../../groonga/lib/grn_ecmascript.lemon"
+      case 77: /* argument_list ::= */
+#line 549 "../../groonga/lib/grn_ecmascript.lemon"
 { yymsp[1].minor.yy0 = 0; }
-#line 2286 "../../groonga/lib/grn_ecmascript.c"
+#line 2446 "../../groonga/lib/grn_ecmascript.c"
         break;
-      case 75: /* argument_list ::= assignment_expression */
-#line 505 "../../groonga/lib/grn_ecmascript.lemon"
+      case 78: /* argument_list ::= assignment_expression */
+#line 550 "../../groonga/lib/grn_ecmascript.lemon"
 { yymsp[0].minor.yy0 = 1; }
-#line 2291 "../../groonga/lib/grn_ecmascript.c"
+#line 2451 "../../groonga/lib/grn_ecmascript.c"
         break;
-      case 76: /* argument_list ::= argument_list COMMA assignment_expression */
-#line 506 "../../groonga/lib/grn_ecmascript.lemon"
+      case 79: /* argument_list ::= argument_list COMMA assignment_expression */
+#line 551 "../../groonga/lib/grn_ecmascript.lemon"
 { yylhsminor.yy0 = yymsp[-2].minor.yy0 + 1; }
-#line 2296 "../../groonga/lib/grn_ecmascript.c"
+#line 2456 "../../groonga/lib/grn_ecmascript.c"
   yymsp[-2].minor.yy0 = yylhsminor.yy0;
         break;
-      case 77: /* output_columns ::= */
-#line 508 "../../groonga/lib/grn_ecmascript.lemon"
+      case 80: /* output_columns ::= */
+#line 553 "../../groonga/lib/grn_ecmascript.lemon"
 {
   yymsp[1].minor.yy0 = 0;
 }
-#line 2304 "../../groonga/lib/grn_ecmascript.c"
+#line 2464 "../../groonga/lib/grn_ecmascript.c"
         break;
-      case 78: /* output_columns ::= output_column */
-#line 511 "../../groonga/lib/grn_ecmascript.lemon"
+      case 81: /* output_columns ::= output_column */
+#line 556 "../../groonga/lib/grn_ecmascript.lemon"
 {
   yylhsminor.yy0 = yymsp[0].minor.yy0;
 }
-#line 2311 "../../groonga/lib/grn_ecmascript.c"
+#line 2471 "../../groonga/lib/grn_ecmascript.c"
   yymsp[0].minor.yy0 = yylhsminor.yy0;
         break;
-      case 79: /* output_columns ::= output_columns COMMA */
-#line 516 "../../groonga/lib/grn_ecmascript.lemon"
+      case 82: /* output_columns ::= output_columns COMMA */
+#line 561 "../../groonga/lib/grn_ecmascript.lemon"
 {
   yylhsminor.yy0 = yymsp[-1].minor.yy0;
 }
-#line 2319 "../../groonga/lib/grn_ecmascript.c"
+#line 2479 "../../groonga/lib/grn_ecmascript.c"
   yymsp[-1].minor.yy0 = yylhsminor.yy0;
         break;
-      case 80: /* output_columns ::= output_columns COMMA output_column */
-#line 521 "../../groonga/lib/grn_ecmascript.lemon"
+      case 83: /* output_columns ::= output_columns COMMA output_column */
+#line 566 "../../groonga/lib/grn_ecmascript.lemon"
 {
   if (yymsp[-2].minor.yy0 == 0) {
     yylhsminor.yy0 = yymsp[0].minor.yy0;
@@ -2332,11 +2492,11 @@ static YYACTIONTYPE yy_reduce(
     yylhsminor.yy0 = 1;
   }
 }
-#line 2336 "../../groonga/lib/grn_ecmascript.c"
+#line 2496 "../../groonga/lib/grn_ecmascript.c"
   yymsp[-2].minor.yy0 = yylhsminor.yy0;
         break;
-      case 81: /* output_column ::= STAR */
-#line 534 "../../groonga/lib/grn_ecmascript.lemon"
+      case 84: /* output_column ::= STAR */
+#line 579 "../../groonga/lib/grn_ecmascript.lemon"
 {
   grn_ctx *ctx = efsi->ctx;
   grn_obj *expr = efsi->e;
@@ -2387,79 +2547,72 @@ static YYACTIONTYPE yy_reduce(
     yymsp[0].minor.yy0 = 0;
   }
 }
-#line 2391 "../../groonga/lib/grn_ecmascript.c"
+#line 2551 "../../groonga/lib/grn_ecmascript.c"
         break;
-      case 82: /* output_column ::= NONEXISTENT_COLUMN */
-#line 584 "../../groonga/lib/grn_ecmascript.lemon"
+      case 85: /* output_column ::= NONEXISTENT_COLUMN */
+#line 629 "../../groonga/lib/grn_ecmascript.lemon"
 {
   yymsp[0].minor.yy0 = 0;
 }
-#line 2398 "../../groonga/lib/grn_ecmascript.c"
+#line 2558 "../../groonga/lib/grn_ecmascript.c"
         break;
-      case 83: /* output_column ::= assignment_expression */
-#line 587 "../../groonga/lib/grn_ecmascript.lemon"
+      case 86: /* output_column ::= assignment_expression */
+#line 632 "../../groonga/lib/grn_ecmascript.lemon"
 {
   yymsp[0].minor.yy0 = 1;
 }
-#line 2405 "../../groonga/lib/grn_ecmascript.c"
+#line 2565 "../../groonga/lib/grn_ecmascript.c"
         break;
       default:
-      /* (87) input ::= query */ yytestcase(yyruleno==87);
-      /* (88) input ::= expression */ yytestcase(yyruleno==88);
-      /* (89) input ::= START_OUTPUT_COLUMNS output_columns */ yytestcase(yyruleno==89);
-      /* (90) input ::= START_ADJUSTER adjuster */ yytestcase(yyruleno==90);
-      /* (91) query ::= query_element (OPTIMIZED OUT) */ assert(yyruleno!=91);
-      /* (92) query_element ::= QSTRING */ yytestcase(yyruleno==92);
-      /* (93) query_element ::= PARENL query PARENR */ yytestcase(yyruleno==93);
-      /* (94) expression ::= assignment_expression (OPTIMIZED OUT) */ assert(yyruleno!=94);
-      /* (95) assignment_expression ::= conditional_expression (OPTIMIZED OUT) */ assert(yyruleno!=95);
-      /* (96) conditional_expression ::= logical_or_expression */ yytestcase(yyruleno==96);
-      /* (97) logical_or_expression ::= logical_and_expression */ yytestcase(yyruleno==97);
-      /* (98) logical_and_expression ::= bitwise_or_expression */ yytestcase(yyruleno==98);
-      /* (99) bitwise_or_expression ::= bitwise_xor_expression */ yytestcase(yyruleno==99);
-      /* (100) bitwise_xor_expression ::= bitwise_and_expression */ yytestcase(yyruleno==100);
-      /* (101) bitwise_and_expression ::= equality_expression */ yytestcase(yyruleno==101);
-      /* (102) equality_expression ::= relational_expression */ yytestcase(yyruleno==102);
-      /* (103) relational_expression ::= shift_expression */ yytestcase(yyruleno==103);
-      /* (104) shift_expression ::= additive_expression */ yytestcase(yyruleno==104);
-      /* (105) additive_expression ::= multiplicative_expression */ yytestcase(yyruleno==105);
-      /* (106) multiplicative_expression ::= unary_expression (OPTIMIZED OUT) */ assert(yyruleno!=106);
-      /* (107) unary_expression ::= postfix_expression (OPTIMIZED OUT) */ assert(yyruleno!=107);
-      /* (108) postfix_expression ::= lefthand_side_expression */ yytestcase(yyruleno==108);
-      /* (109) lefthand_side_expression ::= call_expression (OPTIMIZED OUT) */ assert(yyruleno!=109);
-      /* (110) lefthand_side_expression ::= member_expression */ yytestcase(yyruleno==110);
-      /* (111) member_expression ::= primary_expression (OPTIMIZED OUT) */ assert(yyruleno!=111);
-      /* (112) member_expression ::= member_expression member_expression_part */ yytestcase(yyruleno==112);
-      /* (113) primary_expression ::= object_literal (OPTIMIZED OUT) */ assert(yyruleno!=113);
-      /* (114) primary_expression ::= PARENL expression PARENR */ yytestcase(yyruleno==114);
-      /* (115) primary_expression ::= IDENTIFIER */ yytestcase(yyruleno==115);
-      /* (116) primary_expression ::= array_literal (OPTIMIZED OUT) */ assert(yyruleno!=116);
-      /* (117) primary_expression ::= DECIMAL */ yytestcase(yyruleno==117);
-      /* (118) primary_expression ::= HEX_INTEGER */ yytestcase(yyruleno==118);
-      /* (119) primary_expression ::= STRING */ yytestcase(yyruleno==119);
-      /* (120) primary_expression ::= BOOLEAN */ yytestcase(yyruleno==120);
-      /* (121) primary_expression ::= NULL */ yytestcase(yyruleno==121);
-      /* (122) array_literal ::= BRACKETL elision BRACKETR */ yytestcase(yyruleno==122);
-      /* (123) array_literal ::= BRACKETL element_list elision BRACKETR */ yytestcase(yyruleno==123);
-      /* (124) array_literal ::= BRACKETL element_list BRACKETR */ yytestcase(yyruleno==124);
-      /* (125) elision ::= COMMA */ yytestcase(yyruleno==125);
-      /* (126) elision ::= elision COMMA */ yytestcase(yyruleno==126);
-      /* (127) element_list ::= assignment_expression (OPTIMIZED OUT) */ assert(yyruleno!=127);
-      /* (128) element_list ::= elision assignment_expression */ yytestcase(yyruleno==128);
-      /* (129) element_list ::= element_list elision assignment_expression */ yytestcase(yyruleno==129);
-      /* (130) property_name_and_value_list ::= property_name_and_value (OPTIMIZED OUT) */ assert(yyruleno!=130);
-      /* (131) property_name_and_value_list ::= property_name_and_value_list COMMA property_name_and_value */ yytestcase(yyruleno==131);
-      /* (132) property_name ::= STRING */ yytestcase(yyruleno==132);
-      /* (133) member_expression_part ::= DOT IDENTIFIER */ yytestcase(yyruleno==133);
-      /* (134) adjuster ::= */ yytestcase(yyruleno==134);
-      /* (135) adjuster ::= adjust_expression (OPTIMIZED OUT) */ assert(yyruleno!=135);
-      /* (136) adjust_expression ::= adjust_match_expression */ yytestcase(yyruleno==136);
+      /* (90) input ::= query */ yytestcase(yyruleno==90);
+      /* (91) input ::= expression */ yytestcase(yyruleno==91);
+      /* (92) input ::= START_OUTPUT_COLUMNS output_columns */ yytestcase(yyruleno==92);
+      /* (93) input ::= START_ADJUSTER adjuster */ yytestcase(yyruleno==93);
+      /* (94) query ::= query_element (OPTIMIZED OUT) */ assert(yyruleno!=94);
+      /* (95) query_element ::= QSTRING */ yytestcase(yyruleno==95);
+      /* (96) query_element ::= PARENL query PARENR */ yytestcase(yyruleno==96);
+      /* (97) expression ::= assignment_expression (OPTIMIZED OUT) */ assert(yyruleno!=97);
+      /* (98) assignment_expression ::= conditional_expression (OPTIMIZED OUT) */ assert(yyruleno!=98);
+      /* (99) conditional_expression ::= logical_or_expression */ yytestcase(yyruleno==99);
+      /* (100) logical_or_expression ::= logical_and_expression */ yytestcase(yyruleno==100);
+      /* (101) logical_and_expression ::= bitwise_or_expression */ yytestcase(yyruleno==101);
+      /* (102) bitwise_or_expression ::= bitwise_xor_expression */ yytestcase(yyruleno==102);
+      /* (103) bitwise_xor_expression ::= bitwise_and_expression */ yytestcase(yyruleno==103);
+      /* (104) bitwise_and_expression ::= equality_expression */ yytestcase(yyruleno==104);
+      /* (105) equality_expression ::= relational_expression */ yytestcase(yyruleno==105);
+      /* (106) relational_expression ::= shift_expression */ yytestcase(yyruleno==106);
+      /* (107) shift_expression ::= additive_expression */ yytestcase(yyruleno==107);
+      /* (108) additive_expression ::= multiplicative_expression */ yytestcase(yyruleno==108);
+      /* (109) multiplicative_expression ::= unary_expression (OPTIMIZED OUT) */ assert(yyruleno!=109);
+      /* (110) unary_expression ::= postfix_expression (OPTIMIZED OUT) */ assert(yyruleno!=110);
+      /* (111) postfix_expression ::= lefthand_side_expression */ yytestcase(yyruleno==111);
+      /* (112) lefthand_side_expression ::= call_expression (OPTIMIZED OUT) */ assert(yyruleno!=112);
+      /* (113) lefthand_side_expression ::= member_expression */ yytestcase(yyruleno==113);
+      /* (114) member_expression ::= primary_expression (OPTIMIZED OUT) */ assert(yyruleno!=114);
+      /* (115) member_expression ::= member_expression member_expression_part */ yytestcase(yyruleno==115);
+      /* (116) primary_expression ::= object_literal (OPTIMIZED OUT) */ assert(yyruleno!=116);
+      /* (117) primary_expression ::= PARENL expression PARENR */ yytestcase(yyruleno==117);
+      /* (118) primary_expression ::= IDENTIFIER */ yytestcase(yyruleno==118);
+      /* (119) primary_expression ::= array_literal (OPTIMIZED OUT) */ assert(yyruleno!=119);
+      /* (120) primary_expression ::= DECIMAL */ yytestcase(yyruleno==120);
+      /* (121) primary_expression ::= HEX_INTEGER */ yytestcase(yyruleno==121);
+      /* (122) primary_expression ::= STRING */ yytestcase(yyruleno==122);
+      /* (123) primary_expression ::= BOOLEAN */ yytestcase(yyruleno==123);
+      /* (124) primary_expression ::= NULL */ yytestcase(yyruleno==124);
+      /* (125) element_list ::= element_list COMMA assignment_expression */ yytestcase(yyruleno==125);
+      /* (126) property_name_and_value_list ::= property_name_and_value (OPTIMIZED OUT) */ assert(yyruleno!=126);
+      /* (127) property_name_and_value_list ::= property_name_and_value_list COMMA property_name_and_value */ yytestcase(yyruleno==127);
+      /* (128) property_name ::= STRING */ yytestcase(yyruleno==128);
+      /* (129) member_expression_part ::= DOT IDENTIFIER */ yytestcase(yyruleno==129);
+      /* (130) adjuster ::= */ yytestcase(yyruleno==130);
+      /* (131) adjuster ::= adjust_expression (OPTIMIZED OUT) */ assert(yyruleno!=131);
+      /* (132) adjust_expression ::= adjust_match_expression */ yytestcase(yyruleno==132);
         break;
 /********** End reduce actions ************************************************/
   };
-  assert( yyruleno<sizeof(yyRuleInfo)/sizeof(yyRuleInfo[0]) );
-  yygoto = yyRuleInfo[yyruleno].lhs;
-  yysize = yyRuleInfo[yyruleno].nrhs;
+  assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
+  yygoto = yyRuleInfoLhs[yyruleno];
+  yysize = yyRuleInfoNRhs[yyruleno];
   yyact = yy_find_reduce_action(yymsp[yysize].stateno,(YYCODETYPE)yygoto);
 
   /* There are no SHIFTREDUCE actions on nonterminals because the table
@@ -2541,7 +2694,7 @@ static void yy_syntax_error(
     }
     GRN_OBJ_FIN(ctx, &message);
   }
-#line 2545 "../../groonga/lib/grn_ecmascript.c"
+#line 2698 "../../groonga/lib/grn_ecmascript.c"
 /************ End %syntax_error code ******************************************/
   grn_expr_parserARG_STORE /* Suppress warning about unused %extra_argument variable */
   grn_expr_parserCTX_STORE

  Modified: lib/grn_ecmascript.lemon (+53 -8)
===================================================================
--- lib/grn_ecmascript.lemon    2019-04-17 12:11:06 +0900 (eff060ace)
+++ lib/grn_ecmascript.lemon    2019-04-17 13:02:20 +0900 (78db12d56)
@@ -417,16 +417,61 @@ primary_expression ::= STRING.
 primary_expression ::= BOOLEAN.
 primary_expression ::= NULL.
 
-array_literal ::= BRACKETL elision BRACKETR.
-array_literal ::= BRACKETL element_list elision BRACKETR.
-array_literal ::= BRACKETL element_list BRACKETR.
+array_literal ::= BRACKETL element_list BRACKETR. {
+  grn_ctx *ctx = efsi->ctx;
+  grn_expr_take_obj(ctx, efsi->e, efsi->array_literal);
+  grn_expr_append_obj(ctx, efsi->e, efsi->array_literal,
+                      GRN_OP_PUSH, 1);
+  efsi->array_literal = NULL;
+}
 
-elision ::= COMMA.
-elision ::= elision COMMA.
+element_list ::= . {
+  grn_ctx *ctx = efsi->ctx;
 
-element_list ::= assignment_expression.
-element_list ::= elision assignment_expression.
-element_list ::= element_list elision assignment_expression.
+  efsi->array_literal = grn_obj_open(ctx, GRN_VECTOR, 0, GRN_ID_NIL);
+  if (!efsi->array_literal) {
+    ERR(GRN_NO_MEMORY_AVAILABLE,
+        "couldn't create vector for parsing array literal: <%.*s>",
+        (int)(efsi->str_end - efsi->str), efsi->str);
+  }
+}
+element_list ::= assignment_expression. {
+  grn_ctx *ctx = efsi->ctx;
+  grn_expr *e = (grn_expr *)(efsi->e);
+  grn_expr_code *code = &(e->codes[e->codes_curr - 1]);
+  if (code->op != GRN_OP_PUSH) {
+    ERR(GRN_FUNCTION_NOT_IMPLEMENTED,
+        "complex expression in array literal isn't supported yet: <%.*s>",
+        (int)(efsi->str_end - efsi->str), efsi->str);
+  }
+  if (ctx->rc == GRN_SUCCESS) {
+    grn_obj *element = code->value;
+    if (!efsi->array_literal) {
+      efsi->array_literal = grn_obj_open(ctx,
+                                         GRN_VECTOR,
+                                         0,
+                                         element->header.domain);
+      if (!efsi->array_literal) {
+        ERR(GRN_NO_MEMORY_AVAILABLE,
+            "couldn't create vector for parsing array literal: <%.*s>",
+            (int)(efsi->str_end - efsi->str), efsi->str);
+      }
+    }
+    if (efsi->array_literal) {
+      grn_vector_add_element(ctx,
+                             efsi->array_literal,
+                             GRN_TEXT_VALUE(element),
+                             GRN_TEXT_LEN(element),
+                             0,
+                             element->header.domain);
+      if (ctx->rc == GRN_SUCCESS) {
+        grn_expr_dfi_pop(e);
+      e->codes_curr -= 1;
+      }
+    }
+  }
+}
+element_list ::= element_list COMMA assignment_expression.
 
 object_literal ::= BRACEL property_name_and_value_list BRACER. {
   grn_ctx *ctx = efsi->ctx;

  Modified: test/command/suite/select/filter/vector/equal.expected (+11 -3)
===================================================================
--- test/command/suite/select/filter/vector/equal.expected    2019-04-17 12:11:06 +0900 (aabf29096)
+++ test/command/suite/select/filter/vector/equal.expected    2019-04-17 13:02:20 +0900 (078cbc1d4)
@@ -4,9 +4,10 @@ column_create Memos tags COLUMN_VECTOR ShortText
 [[0,0.0,0.0],true]
 load --table Memos
 [
-{"_key": "groonga is very fast", "tags": ["groonga"]}
+{"_key": "Groonga is very fast", "tags": ["groonga"]},
+{"_key": "Rroonga is very fast", "tags": ["rroonga"]}
 ]
-[[0,0.0,0.0],1]
+[[0,0.0,0.0],2]
 select Memos --filter 'tags == ["groonga"]'
 [
   [
@@ -17,7 +18,7 @@ select Memos --filter 'tags == ["groonga"]'
   [
     [
       [
-        0
+        1
       ],
       [
         [
@@ -32,6 +33,13 @@ select Memos --filter 'tags == ["groonga"]'
           "tags",
           "ShortText"
         ]
+      ],
+      [
+        1,
+        "Groonga is very fast",
+        [
+          "groonga"
+        ]
       ]
     ]
   ]

  Modified: test/command/suite/select/filter/vector/equal.test (+2 -2)
===================================================================
--- test/command/suite/select/filter/vector/equal.test    2019-04-17 12:11:06 +0900 (db02aa2d8)
+++ test/command/suite/select/filter/vector/equal.test    2019-04-17 13:02:20 +0900 (130896557)
@@ -3,8 +3,8 @@ column_create Memos tags COLUMN_VECTOR ShortText
 
 load --table Memos
 [
-{"_key": "groonga is very fast", "tags": ["groonga"]}
+{"_key": "Groonga is very fast", "tags": ["groonga"]},
+{"_key": "Rroonga is very fast", "tags": ["rroonga"]}
 ]
 
-# TODO: support it!
 select Memos --filter 'tags == ["groonga"]'

  Added: test/command/suite/select/filter/vector/equal_complex.expected (+22 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/vector/equal_complex.expected    2019-04-17 13:02:20 +0900 (7172db175)
@@ -0,0 +1,22 @@
+table_create Memos TABLE_HASH_KEY ShortText
+[[0,0.0,0.0],true]
+column_create Memos tags COLUMN_VECTOR ShortText
+[[0,0.0,0.0],true]
+load --table Memos
+[
+{"_key": "Groonga is very fast", "tags": ["groonga"]},
+{"_key": "Rroonga is very fast", "tags": ["rroonga"]}
+]
+[[0,0.0,0.0],2]
+select Memos --filter 'tags == ["groo" + "nga"]'
+[
+  [
+    [
+      -38,
+      0.0,
+      0.0
+    ],
+    "complex expression in array literal isn't supported yet: <tags == [\"groo\" + \"nga\"]>"
+  ]
+]
+#|e| complex expression in array literal isn't supported yet: <tags == ["groo" + "nga"]>

  Added: test/command/suite/select/filter/vector/equal_complex.test (+11 -0) 100644
===================================================================
--- /dev/null
+++ test/command/suite/select/filter/vector/equal_complex.test    2019-04-17 13:02:20 +0900 (4c61d4166)
@@ -0,0 +1,11 @@
+table_create Memos TABLE_HASH_KEY ShortText
+column_create Memos tags COLUMN_VECTOR ShortText
+
+load --table Memos
+[
+{"_key": "Groonga is very fast", "tags": ["groonga"]},
+{"_key": "Rroonga is very fast", "tags": ["rroonga"]}
+]
+
+# TODO: Suppor this!
+select Memos --filter 'tags == ["groo" + "nga"]'

  Modified: test/command/suite/select/filter/vector/not_equal.expected (+4 -3)
===================================================================
--- test/command/suite/select/filter/vector/not_equal.expected    2019-04-17 12:11:06 +0900 (e07090ff8)
+++ test/command/suite/select/filter/vector/not_equal.expected    2019-04-17 13:02:20 +0900 (1239727ff)
@@ -4,9 +4,10 @@ column_create Memos tags COLUMN_VECTOR ShortText
 [[0,0.0,0.0],true]
 load --table Memos
 [
-{"_key": "groonga is very fast", "tags": ["groonga"]}
+{"_key": "Groonga is very fast", "tags": ["groonga"]},
+{"_key": "Rroonga is very fast", "tags": ["rroonga"]}
 ]
-[[0,0.0,0.0],1]
+[[0,0.0,0.0],2]
 select Memos --filter 'tags != ["rroonga"]'
 [
   [
@@ -35,7 +36,7 @@ select Memos --filter 'tags != ["rroonga"]'
       ],
       [
         1,
-        "groonga is very fast",
+        "Groonga is very fast",
         [
           "groonga"
         ]

  Modified: test/command/suite/select/filter/vector/not_equal.test (+2 -2)
===================================================================
--- test/command/suite/select/filter/vector/not_equal.test    2019-04-17 12:11:06 +0900 (6c397aaa1)
+++ test/command/suite/select/filter/vector/not_equal.test    2019-04-17 13:02:20 +0900 (6d7fe5b8c)
@@ -3,8 +3,8 @@ column_create Memos tags COLUMN_VECTOR ShortText
 
 load --table Memos
 [
-{"_key": "groonga is very fast", "tags": ["groonga"]}
+{"_key": "Groonga is very fast", "tags": ["groonga"]},
+{"_key": "Rroonga is very fast", "tags": ["rroonga"]}
 ]
 
-# TODO: support it!
 select Memos --filter 'tags != ["rroonga"]'


More information about the Groonga-commit mailing list
Back to archive index