--- queryparser_internal.cc.orig	Thu Apr 13 14:37:38 2006
+++ queryparser_internal.cc	Thu Apr 13 14:37:55 2006
@@ -662,4 +662,4 @@
 #define ParseARG_STORE yypParser->state = state
-#define YYNSTATE 63
-#define YYNRULE 40
+#define YYNSTATE 65
+#define YYNRULE 42
 #define YYERRORSYMBOL 18
@@ -718,20 +718,21 @@
 static const YYACTIONTYPE yy_action[] = {
- /*     0 */    64,   25,   27,   29,   23,   14,   63,   33,   35,   39,
- /*    10 */    13,   40,   38,   41,   44,   49,   55,   52,    9,   14,
- /*    20 */    15,   33,   35,   39,   43,   40,   38,   41,   44,   49,
- /*    30 */    12,   52,   17,    4,   59,   39,   20,   40,   62,   41,
- /*    40 */    44,   49,   19,   52,   42,   33,   35,   39,   23,   40,
- /*    50 */    38,   41,   44,   49,    5,   52,   16,   18,  104,    1,
- /*    60 */     2,   22,   32,   70,   51,   47,   48,   57,    2,   22,
- /*    70 */    32,   45,   70,   47,   48,   54,   31,    2,   24,   32,
- /*    80 */    70,    8,   47,   48,   58,    7,   31,    2,   26,   32,
- /*    90 */    70,   70,   47,   48,   31,    2,   28,   32,   70,   70,
- /*   100 */    47,   48,   70,   31,    2,   30,   32,   14,   70,   47,
- /*   110 */    48,   70,   46,   50,    2,   22,   32,   70,   70,   47,
- /*   120 */    48,   53,    2,   22,   32,   70,   70,   47,   48,   70,
- /*   130 */    31,    2,   56,   32,   70,   70,   47,   48,    6,   70,
- /*   140 */    10,   37,   70,   11,   21,   70,    6,   70,   10,   61,
- /*   150 */    70,   11,   21,    6,   70,   10,   70,    3,   11,   21,
- /*   160 */    47,   48,   34,   70,   16,   18,   36,   70,   16,   18,
- /*   170 */    70,   60,   70,   16,   18,
+ /*     0 */    66,   26,   28,   30,   24,   15,   65,   34,   37,   41,
+ /*    10 */    14,   42,   40,   43,   46,   51,   57,   54,   10,   15,
+ /*    20 */    16,   34,   37,   41,   45,   42,   40,   43,   46,   51,
+ /*    30 */    13,   54,   18,    4,   61,   41,   21,   42,   64,   43,
+ /*    40 */    46,   51,   20,   54,   44,   34,   37,   41,   24,   42,
+ /*    50 */    40,   43,   46,   51,    5,   54,   17,   19,  108,    1,
+ /*    60 */     2,   23,   33,   72,   53,   49,   50,   59,    2,   23,
+ /*    70 */    33,   47,   72,   49,   50,   56,   32,    2,   25,   33,
+ /*    80 */    72,    9,   49,   50,   60,    8,   32,    2,   27,   33,
+ /*    90 */    72,   72,   49,   50,   32,    2,   29,   33,   72,   72,
+ /*   100 */    49,   50,   72,   32,    2,   31,   33,   15,   72,   49,
+ /*   110 */    50,   72,   48,   52,    2,   23,   33,   72,   72,   49,
+ /*   120 */    50,   55,    2,   23,   33,   72,   72,   49,   50,   72,
+ /*   130 */    32,    2,   58,   33,   72,   72,   49,   50,    7,   72,
+ /*   140 */    11,    6,   72,   12,   22,   72,    7,   72,   11,   36,
+ /*   150 */    72,   12,   22,    7,   72,   11,   39,   72,   12,   22,
+ /*   160 */    72,    7,   72,   11,   63,    3,   12,   22,   49,   50,
+ /*   170 */    72,   35,   72,   17,   19,   72,   72,   38,   72,   17,
+ /*   180 */    19,   62,   72,   17,   19,
 };
@@ -753,5 +754,6 @@
  /*   140 */    11,   12,   28,   14,   15,   28,    9,   28,   11,   12,
- /*   150 */    28,   14,   15,    9,   28,   11,   28,   23,   14,   15,
- /*   160 */    26,   27,   24,   28,   26,   27,   24,   28,   26,   27,
- /*   170 */    28,   24,   28,   26,   27,
+ /*   150 */    28,   14,   15,    9,   28,   11,   12,   28,   14,   15,
+ /*   160 */    28,    9,   28,   11,   12,   23,   14,   15,   26,   27,
+ /*   170 */    28,   24,   28,   26,   27,   28,   28,   24,   28,   26,
+ /*   180 */    27,   24,   28,   26,   27,
 };
@@ -759,9 +761,9 @@
 static const short yy_shift_ofst[] = {
- /*     0 */     0,    6,   26,   -5,  144,   -5,   75,   -5,    9,   -5,
- /*    10 */    -5,   11,   -4,   -5,   -5,   -5,   22,   -5,   36,   27,
- /*    20 */    -5,   38,   -1,   14,   -5,   38,   43,   38,   43,   38,
- /*    30 */    43,   -5,   -5,  144,   -5,  129,   -5,   -5,   -5,   75,
- /*    40 */    -5,   11,   10,   -5,   11,   98,   -5,   22,   36,   38,
- /*    50 */    48,   -5,   38,   59,   -5,   38,   43,   68,   -5,  137,
- /*    60 */    -5,   -5,   -5,
+ /*     0 */     0,    6,   26,   -5,  129,   -5,   -5,   75,   -5,    9,
+ /*    10 */    -5,   -5,   11,   -4,   -5,   -5,   -5,   22,   -5,   36,
+ /*    20 */    27,   -5,   38,   -1,   14,   -5,   38,   43,   38,   43,
+ /*    30 */    38,   43,   -5,   -5,  137,   -5,   -5,  144,   -5,   -5,
+ /*    40 */    -5,   75,   -5,   11,   10,   -5,   11,   98,   -5,   22,
+ /*    50 */    36,   38,   48,   -5,   38,   59,   -5,   38,   43,   68,
+ /*    60 */    -5,  152,   -5,   -5,   -5,
 };
@@ -769,18 +771,18 @@
 static const short yy_reduce_ofst[] = {
- /*     0 */    39,   -1,  134,   -1,   30,   -1,   -1,   -1,   -1,   -1,
- /*    10 */    -1,    5,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
- /*    20 */    -1,   47,   -1,   56,   -1,   66,   -1,   74,   -1,   83,
- /*    30 */    -1,   -1,   -1,  138,   -1,  142,   -1,   -1,   -1,   -1,
- /*    40 */    -1,   19,   -1,   -1,   46,   -1,   -1,   -1,   -1,   93,
- /*    50 */    -1,   -1,  101,   -1,   -1,  110,   -1,   -1,   -1,  147,
- /*    60 */    -1,   -1,   -1,
+ /*     0 */    39,   -1,  142,   -1,   30,   -1,   -1,   -1,   -1,   -1,
+ /*    10 */    -1,   -1,    5,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+ /*    20 */    -1,   -1,   47,   -1,   56,   -1,   66,   -1,   74,   -1,
+ /*    30 */    83,   -1,   -1,   -1,  147,   -1,   -1,  153,   -1,   -1,
+ /*    40 */    -1,   -1,   -1,   19,   -1,   -1,   46,   -1,   -1,   -1,
+ /*    50 */    -1,   93,   -1,   -1,  101,   -1,   -1,  110,   -1,   -1,
+ /*    60 */    -1,  157,   -1,   -1,   -1,
 };
 static const YYACTIONTYPE yy_default[] = {
- /*     0 */    72,   71,   65,   74,  103,   76,   91,   99,  103,  101,
- /*    10 */    92,  103,  103,   93,   98,   97,   94,  100,   95,  103,
- /*    20 */   102,   72,  103,   72,   66,   72,   67,   72,   69,   72,
- /*    30 */    70,   71,   73,  103,   75,  103,   77,   79,   81,   83,
- /*    40 */    84,  103,  103,   85,  103,  103,   86,   87,   88,   72,
- /*    50 */    71,   89,   72,   71,   90,   72,   68,   71,   96,  103,
- /*    60 */    78,   80,   82,
+ /*     0 */    74,   73,   67,   76,  107,   78,   86,   95,  103,  107,
+ /*    10 */   105,   96,  107,  107,   97,  102,  101,   98,  104,   99,
+ /*    20 */   107,  106,   74,  107,   74,   68,   74,   69,   74,   71,
+ /*    30 */    74,   72,   73,   75,  107,   77,   85,  107,   79,   81,
+ /*    40 */    83,   87,   88,  107,  107,   89,  107,  107,   90,   91,
+ /*    50 */    92,   74,   73,   93,   74,   73,   94,   74,   70,   73,
+ /*    60 */   100,  107,   80,   82,   84,
 };
@@ -901,22 +903,24 @@
  /*  19 */ "prob ::= prob BOOLEAN_FILTER",
- /*  20 */ "stop_term ::= TERM",
- /*  21 */ "stop_term ::= WILD_TERM",
- /*  22 */ "stop_term ::= PREFIX_QUOTE phrase QUOTE",
- /*  23 */ "stop_term ::= QUOTE phrase QUOTE",
- /*  24 */ "stop_term ::= phrased_term",
- /*  25 */ "stop_term ::= near_expr",
- /*  26 */ "stop_term ::= BRA expr KET",
- /*  27 */ "stop_term ::= PREFIX_BRA expr KET",
- /*  28 */ "term ::= TERM",
- /*  29 */ "term ::= WILD_TERM",
- /*  30 */ "term ::= QUOTE phrase QUOTE",
- /*  31 */ "term ::= phrased_term",
- /*  32 */ "term ::= near_expr",
- /*  33 */ "term ::= BRA expr KET",
- /*  34 */ "phrase ::= TERM",
- /*  35 */ "phrase ::= phrase TERM",
- /*  36 */ "phrased_term ::= TERM PHR_TERM",
- /*  37 */ "phrased_term ::= phrased_term PHR_TERM",
- /*  38 */ "near_expr ::= TERM NEAR TERM",
- /*  39 */ "near_expr ::= near_expr NEAR TERM",
+ /*  20 */ "prob ::= LOVE BOOLEAN_FILTER",
+ /*  21 */ "prob ::= prob LOVE BOOLEAN_FILTER",
+ /*  22 */ "stop_term ::= TERM",
+ /*  23 */ "stop_term ::= WILD_TERM",
+ /*  24 */ "stop_term ::= PREFIX_QUOTE phrase QUOTE",
+ /*  25 */ "stop_term ::= QUOTE phrase QUOTE",
+ /*  26 */ "stop_term ::= phrased_term",
+ /*  27 */ "stop_term ::= near_expr",
+ /*  28 */ "stop_term ::= BRA expr KET",
+ /*  29 */ "stop_term ::= PREFIX_BRA expr KET",
+ /*  30 */ "term ::= TERM",
+ /*  31 */ "term ::= WILD_TERM",
+ /*  32 */ "term ::= QUOTE phrase QUOTE",
+ /*  33 */ "term ::= phrased_term",
+ /*  34 */ "term ::= near_expr",
+ /*  35 */ "term ::= BRA expr KET",
+ /*  36 */ "phrase ::= TERM",
+ /*  37 */ "phrase ::= phrase TERM",
+ /*  38 */ "phrased_term ::= TERM PHR_TERM",
+ /*  39 */ "phrased_term ::= phrased_term PHR_TERM",
+ /*  40 */ "near_expr ::= TERM NEAR TERM",
+ /*  41 */ "near_expr ::= near_expr NEAR TERM",
 };
@@ -994,3 +998,3 @@
 {delete (yypminor->yy0);}
-#line 997 "queryparser_internal.cc"
+#line 1001 "queryparser_internal.cc"
       break;
@@ -1002,3 +1006,3 @@
 {delete (yypminor->yy53);}
-#line 1005 "queryparser_internal.cc"
+#line 1009 "queryparser_internal.cc"
       break;
@@ -1007,3 +1011,3 @@
 {delete (yypminor->yy56);}
-#line 1010 "queryparser_internal.cc"
+#line 1014 "queryparser_internal.cc"
       break;
@@ -1012,5 +1016,5 @@
     case 27:
-#line 878 "./queryparser.lemony"
+#line 893 "./queryparser.lemony"
 {(yypminor->yy3)->destroy();}
-#line 1017 "queryparser_internal.cc"
+#line 1021 "queryparser_internal.cc"
       break;
@@ -1205,2 +1209,4 @@
   { 21, 2 },
+  { 21, 2 },
+  { 21, 3 },
   { 23, 1 },
@@ -1268,3 +1274,3 @@
 }
-#line 1271 "queryparser_internal.cc"
+#line 1277 "queryparser_internal.cc"
         break;
@@ -1276,3 +1282,3 @@
 }
-#line 1279 "queryparser_internal.cc"
+#line 1285 "queryparser_internal.cc"
         break;
@@ -1312,3 +1318,3 @@
 }
-#line 1315 "queryparser_internal.cc"
+#line 1321 "queryparser_internal.cc"
         break;
@@ -1318,3 +1324,3 @@
 }
-#line 1321 "queryparser_internal.cc"
+#line 1327 "queryparser_internal.cc"
         break;
@@ -1324,3 +1330,3 @@
 }
-#line 1327 "queryparser_internal.cc"
+#line 1333 "queryparser_internal.cc"
         break;
@@ -1331,3 +1337,3 @@
 }
-#line 1334 "queryparser_internal.cc"
+#line 1340 "queryparser_internal.cc"
         break;
@@ -1337,3 +1343,3 @@
 }
-#line 1340 "queryparser_internal.cc"
+#line 1346 "queryparser_internal.cc"
         break;
@@ -1343,3 +1349,3 @@
 }
-#line 1346 "queryparser_internal.cc"
+#line 1352 "queryparser_internal.cc"
         break;
@@ -1348,3 +1354,3 @@
 { yygotominor.yy53 = yymsp[0].minor.yy53; }
-#line 1351 "queryparser_internal.cc"
+#line 1357 "queryparser_internal.cc"
         break;
@@ -1358,3 +1364,3 @@
 }
-#line 1361 "queryparser_internal.cc"
+#line 1367 "queryparser_internal.cc"
         break;
@@ -1367,3 +1373,3 @@
 }
-#line 1370 "queryparser_internal.cc"
+#line 1376 "queryparser_internal.cc"
         break;
@@ -1378,3 +1384,3 @@
 }
-#line 1381 "queryparser_internal.cc"
+#line 1387 "queryparser_internal.cc"
         break;
@@ -1392,3 +1398,3 @@
 }
-#line 1395 "queryparser_internal.cc"
+#line 1401 "queryparser_internal.cc"
         break;
@@ -1409,3 +1415,3 @@
 }
-#line 1412 "queryparser_internal.cc"
+#line 1418 "queryparser_internal.cc"
         break;
@@ -1419,3 +1425,3 @@
 }
-#line 1422 "queryparser_internal.cc"
+#line 1428 "queryparser_internal.cc"
         break;
@@ -1429,3 +1435,3 @@
 }
-#line 1432 "queryparser_internal.cc"
+#line 1438 "queryparser_internal.cc"
         break;
@@ -1439,3 +1445,3 @@
 }
-#line 1442 "queryparser_internal.cc"
+#line 1448 "queryparser_internal.cc"
         break;
@@ -1449,3 +1455,3 @@
 }
-#line 1452 "queryparser_internal.cc"
+#line 1458 "queryparser_internal.cc"
         break;
@@ -1458,3 +1464,3 @@
 }
-#line 1461 "queryparser_internal.cc"
+#line 1467 "queryparser_internal.cc"
         break;
@@ -1468,6 +1474,29 @@
 }
-#line 1471 "queryparser_internal.cc"
+#line 1477 "queryparser_internal.cc"
         break;
       case 20:
-#line 807 "./queryparser.lemony"
+#line 797 "./queryparser.lemony"
+{
+    // LOVE BOOLEAN_FILTER(yymsp[0].minor.yy0) is just the same as BOOLEAN_FILTER
+    yygotominor.yy56 = new ProbQuery;
+    yygotominor.yy56->filter = yymsp[0].minor.yy0->as_query_object();
+    delete yymsp[0].minor.yy0;
+  yy_destructor(7,&yymsp[-1].minor);
+}
+#line 1488 "queryparser_internal.cc"
+        break;
+      case 21:
+#line 804 "./queryparser.lemony"
+{
+    // LOVE BOOLEAN_FILTER(yymsp[0].minor.yy0) is just the same as BOOLEAN_FILTER
+    yygotominor.yy56 = yymsp[-2].minor.yy56;
+    // FIXME we should OR filters with the same prefix...
+    add_to_query(yygotominor.yy56->filter, Query::OP_AND, yymsp[0].minor.yy0->as_query_object());
+    delete yymsp[0].minor.yy0;
+  yy_destructor(7,&yymsp[-1].minor);
+}
+#line 1500 "queryparser_internal.cc"
+        break;
+      case 22:
+#line 822 "./queryparser.lemony"
 {
@@ -1481,7 +1510,7 @@
 }
-#line 1484 "queryparser_internal.cc"
+#line 1513 "queryparser_internal.cc"
         break;
-      case 21:
-      case 29:
-#line 817 "./queryparser.lemony"
+      case 23:
+      case 31:
+#line 832 "./queryparser.lemony"
 {
@@ -1490,6 +1519,6 @@
 }
-#line 1493 "queryparser_internal.cc"
+#line 1522 "queryparser_internal.cc"
         break;
-      case 22:
-#line 822 "./queryparser.lemony"
+      case 24:
+#line 837 "./queryparser.lemony"
 {
@@ -1501,7 +1530,7 @@
 }
-#line 1504 "queryparser_internal.cc"
+#line 1533 "queryparser_internal.cc"
         break;
-      case 23:
-      case 30:
-#line 829 "./queryparser.lemony"
+      case 25:
+      case 32:
+#line 844 "./queryparser.lemony"
 { yygotominor.yy53 = yymsp[-1].minor.yy3->as_phrase_query();   yy_destructor(14,&yymsp[-2].minor);
@@ -1509,19 +1538,19 @@
 }
-#line 1512 "queryparser_internal.cc"
+#line 1541 "queryparser_internal.cc"
         break;
-      case 24:
-      case 31:
-#line 832 "./queryparser.lemony"
+      case 26:
+      case 33:
+#line 847 "./queryparser.lemony"
 { yygotominor.yy53 = yymsp[0].minor.yy3->as_phrase_query(); }
-#line 1518 "queryparser_internal.cc"
+#line 1547 "queryparser_internal.cc"
         break;
-      case 25:
-      case 32:
-#line 835 "./queryparser.lemony"
+      case 27:
+      case 34:
+#line 850 "./queryparser.lemony"
 { yygotominor.yy53 = yymsp[0].minor.yy3->as_near_query(); }
-#line 1524 "queryparser_internal.cc"
+#line 1553 "queryparser_internal.cc"
         break;
-      case 26:
-      case 33:
-#line 838 "./queryparser.lemony"
+      case 28:
+      case 35:
+#line 853 "./queryparser.lemony"
 { yygotominor.yy53 = yymsp[-1].minor.yy53;   yy_destructor(15,&yymsp[-2].minor);
@@ -1529,6 +1558,6 @@
 }
-#line 1532 "queryparser_internal.cc"
+#line 1561 "queryparser_internal.cc"
         break;
-      case 27:
-#line 840 "./queryparser.lemony"
+      case 29:
+#line 855 "./queryparser.lemony"
 {
@@ -1540,6 +1569,6 @@
 }
-#line 1543 "queryparser_internal.cc"
+#line 1572 "queryparser_internal.cc"
         break;
-      case 28:
-#line 852 "./queryparser.lemony"
+      case 30:
+#line 867 "./queryparser.lemony"
 {
@@ -1548,6 +1577,6 @@
 }
-#line 1551 "queryparser_internal.cc"
+#line 1580 "queryparser_internal.cc"
         break;
-      case 34:
-#line 880 "./queryparser.lemony"
+      case 36:
+#line 895 "./queryparser.lemony"
 {
@@ -1556,7 +1585,7 @@
 }
-#line 1559 "queryparser_internal.cc"
+#line 1588 "queryparser_internal.cc"
         break;
-      case 35:
       case 37:
-#line 885 "./queryparser.lemony"
+      case 39:
+#line 900 "./queryparser.lemony"
 {
@@ -1565,6 +1594,6 @@
 }
-#line 1568 "queryparser_internal.cc"
+#line 1597 "queryparser_internal.cc"
         break;
-      case 36:
-#line 897 "./queryparser.lemony"
+      case 38:
+#line 912 "./queryparser.lemony"
 {
@@ -1574,6 +1603,6 @@
 }
-#line 1577 "queryparser_internal.cc"
+#line 1606 "queryparser_internal.cc"
         break;
-      case 38:
-#line 914 "./queryparser.lemony"
+      case 40:
+#line 929 "./queryparser.lemony"
 {
@@ -1584,6 +1613,6 @@
 }
-#line 1587 "queryparser_internal.cc"
+#line 1616 "queryparser_internal.cc"
         break;
-      case 39:
-#line 920 "./queryparser.lemony"
+      case 41:
+#line 935 "./queryparser.lemony"
 {
@@ -1593,3 +1622,3 @@
 }
-#line 1596 "queryparser_internal.cc"
+#line 1625 "queryparser_internal.cc"
         break;
@@ -1626,3 +1655,3 @@
     if (!state->error) state->error = "parse error";
-#line 1630 "queryparser_internal.cc"
+#line 1659 "queryparser_internal.cc"
   ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */
