0
0

streamline boost just like tilde

This commit is contained in:
Marty Schoch 2016-08-31 22:10:44 -04:00
parent 37d3750157
commit 46f70bfa12
4 changed files with 205 additions and 76 deletions

View File

@ -6,12 +6,21 @@
/\+/ { logDebugTokens("PLUS"); return tPLUS }
/-/ { logDebugTokens("MINUS"); return tMINUS }
/:/ { logDebugTokens("COLON"); return tCOLON }
/\^/ { logDebugTokens("BOOST"); return tBOOST }
/\(/ { logDebugTokens("LPAREN"); return tLPAREN }
/\)/ { logDebugTokens("RPAREN"); return tRPAREN }
/>/ { logDebugTokens("GREATER"); return tGREATER }
/</ { logDebugTokens("LESS"); return tLESS }
/=/ { logDebugTokens("EQUAL"); return tEQUAL }
/\^([0-9]|[1-9][0-9]*)(\.[0-9][0-9]*)?/
{
lval.s = yylex.Text()[1:]
logDebugTokens("BOOST");
return tBOOST }
/\^/ {
lval.s = "1"
logDebugTokens("BOOST");
return tBOOST
}
/~([0-9]|[1-9][0-9]*)/
{
lval.s = yylex.Text()[1:]

View File

@ -779,24 +779,6 @@ func newLexerWithInit(in io.Reader, initFun func(*lexer)) *lexer {
},
}, []int{ /* Start-of-input transitions */ -1, -1}, []int{ /* End-of-input transitions */ -1, -1}, nil},
// \^
{[]bool{false, true}, []func(rune) int{ // Transitions
func(r rune) int {
switch r {
case 94:
return 1
}
return -1
},
func(r rune) int {
switch r {
case 94:
return -1
}
return -1
},
}, []int{ /* Start-of-input transitions */ -1, -1}, []int{ /* End-of-input transitions */ -1, -1}, nil},
// \(
{[]bool{false, true}, []func(rune) int{ // Transitions
func(r rune) int {
@ -887,6 +869,148 @@ func newLexerWithInit(in io.Reader, initFun func(*lexer)) *lexer {
},
}, []int{ /* Start-of-input transitions */ -1, -1}, []int{ /* End-of-input transitions */ -1, -1}, nil},
// \^([0-9]|[1-9][0-9]*)(\.[0-9][0-9]*)?
{[]bool{false, false, true, true, false, true, true, true}, []func(rune) int{ // Transitions
func(r rune) int {
switch r {
case 46:
return -1
case 94:
return 1
}
switch {
case 48 <= r && r <= 48:
return -1
case 49 <= r && r <= 57:
return -1
}
return -1
},
func(r rune) int {
switch r {
case 46:
return -1
case 94:
return -1
}
switch {
case 48 <= r && r <= 48:
return 2
case 49 <= r && r <= 57:
return 3
}
return -1
},
func(r rune) int {
switch r {
case 46:
return 4
case 94:
return -1
}
switch {
case 48 <= r && r <= 48:
return -1
case 49 <= r && r <= 57:
return -1
}
return -1
},
func(r rune) int {
switch r {
case 46:
return 4
case 94:
return -1
}
switch {
case 48 <= r && r <= 48:
return 5
case 49 <= r && r <= 57:
return 5
}
return -1
},
func(r rune) int {
switch r {
case 46:
return -1
case 94:
return -1
}
switch {
case 48 <= r && r <= 48:
return 6
case 49 <= r && r <= 57:
return 6
}
return -1
},
func(r rune) int {
switch r {
case 46:
return 4
case 94:
return -1
}
switch {
case 48 <= r && r <= 48:
return 5
case 49 <= r && r <= 57:
return 5
}
return -1
},
func(r rune) int {
switch r {
case 46:
return -1
case 94:
return -1
}
switch {
case 48 <= r && r <= 48:
return 7
case 49 <= r && r <= 57:
return 7
}
return -1
},
func(r rune) int {
switch r {
case 46:
return -1
case 94:
return -1
}
switch {
case 48 <= r && r <= 48:
return 7
case 49 <= r && r <= 57:
return 7
}
return -1
},
}, []int{ /* Start-of-input transitions */ -1, -1, -1, -1, -1, -1, -1, -1}, []int{ /* End-of-input transitions */ -1, -1, -1, -1, -1, -1, -1, -1}, nil},
// \^
{[]bool{false, true}, []func(rune) int{ // Transitions
func(r rune) int {
switch r {
case 94:
return 1
}
return -1
},
func(r rune) int {
switch r {
case 94:
return -1
}
return -1
},
}, []int{ /* Start-of-input transitions */ -1, -1}, []int{ /* End-of-input transitions */ -1, -1}, nil},
// ~([0-9]|[1-9][0-9]*)
{[]bool{false, false, true, true, true}, []func(rune) int{ // Transitions
func(r rune) int {
@ -1316,58 +1440,65 @@ OUTER0:
return tCOLON
}
case 4:
{
logDebugTokens("BOOST")
return tBOOST
}
case 5:
{
logDebugTokens("LPAREN")
return tLPAREN
}
case 6:
case 5:
{
logDebugTokens("RPAREN")
return tRPAREN
}
case 7:
case 6:
{
logDebugTokens("GREATER")
return tGREATER
}
case 8:
case 7:
{
logDebugTokens("LESS")
return tLESS
}
case 9:
case 8:
{
logDebugTokens("EQUAL")
return tEQUAL
}
case 9:
{
lval.s = yylex.Text()[1:]
logDebugTokens("BOOST")
return tBOOST
}
case 10:
{
lval.s = "1"
logDebugTokens("BOOST")
return tBOOST
}
case 11:
{
lval.s = yylex.Text()[1:]
logDebugTokens("TILDENUMBER - %s", lval.s)
return tTILDE
}
case 11:
case 12:
{
lval.s = "1"
logDebugTokens("TILDE")
return tTILDE
}
case 12:
case 13:
{
lval.s = yylex.Text()
logDebugTokens("NUMBER - %s", lval.s)
return tNUMBER
}
case 13:
case 14:
{
logDebugTokens("WHITESPACE (count=%d)", len(yylex.Text())) /* eat up whitespace */
}
case 14:
case 15:
{
lval.s = yylex.Text()
logDebugTokens("STRING - %s", lval.s)

View File

@ -25,10 +25,10 @@ tEQUAL tTILDE
%type <s> tPHRASE
%type <s> tNUMBER
%type <s> tTILDE
%type <s> tBOOST
%type <q> searchBase
%type <f> searchSuffix
%type <n> searchPrefix
%type <f> searchBoost
%%
@ -233,18 +233,13 @@ tSTRING tCOLON tLESS tEQUAL tPHRASE {
$$ = q
};
searchBoost:
tBOOST tNUMBER {
boost, _ := strconv.ParseFloat($2, 64)
$$ = boost
logDebugGrammar("BOOST %f", boost)
};
searchSuffix:
/* empty */ {
$$ = 1.0
}
|
searchBoost {
tBOOST {
boost, _ := strconv.ParseFloat($1, 64)
$$ = boost
logDebugGrammar("BOOST %f", boost)
};

View File

@ -71,57 +71,57 @@ var yyExca = [...]int{
-2, 5,
}
const yyNprod = 27
const yyNprod = 26
const yyPrivate = 57344
var yyTokenNames []string
var yyStates []string
const yyLast = 33
const yyLast = 32
var yyAct = [...]int{
18, 20, 23, 17, 29, 26, 14, 3, 19, 21,
22, 27, 24, 16, 28, 25, 9, 11, 33, 31,
1, 15, 5, 6, 10, 32, 30, 2, 13, 4,
12, 7, 8,
16, 18, 21, 13, 27, 24, 3, 1, 17, 19,
20, 25, 22, 15, 26, 23, 9, 11, 31, 29,
4, 14, 5, 6, 10, 30, 28, 2, 12, 8,
0, 7,
}
var yyPact = [...]int{
16, -1000, -1000, 16, 12, -1000, -1000, -1000, -3, 5,
-1000, -1000, -1000, -1000, -9, -1000, -4, -1000, -14, -1000,
-1000, 0, -1, -1000, -1000, 14, -1000, -1000, 13, -1000,
-1000, -1000, -1000, -1000,
16, -1000, -1000, 16, 12, -1000, -1000, -1000, -6, 5,
-1000, -1000, -1000, -1000, -1000, -4, -14, -1000, -1000, 0,
-1, -1000, -1000, 14, -1000, -1000, 13, -1000, -1000, -1000,
-1000, -1000,
}
var yyPgo = [...]int{
0, 32, 30, 29, 28, 20, 27, 7,
0, 29, 28, 20, 7, 27, 6,
}
var yyR1 = [...]int{
0, 5, 6, 6, 7, 3, 3, 3, 1, 1,
0, 4, 5, 5, 6, 3, 3, 3, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 4, 2, 2,
1, 1, 1, 1, 2, 2,
}
var yyR2 = [...]int{
0, 1, 2, 1, 3, 0, 1, 1, 1, 2,
4, 1, 1, 3, 3, 3, 4, 5, 4, 5,
4, 5, 4, 5, 2, 0, 1,
4, 5, 4, 5, 0, 1,
}
var yyChk = [...]int{
-1000, -5, -6, -7, -3, 6, 7, -6, -1, 4,
12, 5, -2, -4, 9, 16, 8, 12, 4, 12,
5, 13, 14, 16, 12, 15, 5, 12, 15, 5,
12, 5, 12, 5,
-1000, -4, -5, -6, -3, 6, 7, -5, -1, 4,
12, 5, -2, 9, 16, 8, 4, 12, 5, 13,
14, 16, 12, 15, 5, 12, 15, 5, 12, 5,
12, 5,
}
var yyDef = [...]int{
5, -2, 1, -2, 0, 6, 7, 2, 25, 8,
11, 12, 4, 26, 0, 9, 0, 24, 13, 14,
15, 0, 0, 10, 16, 0, 20, 18, 0, 22,
17, 21, 19, 23,
5, -2, 1, -2, 0, 6, 7, 2, 24, 8,
11, 12, 4, 25, 9, 0, 13, 14, 15, 0,
0, 10, 16, 0, 20, 18, 0, 22, 17, 21,
19, 23,
}
var yyTok1 = [...]int{
@ -715,24 +715,18 @@ yydefault:
yyVAL.q = q
}
case 24:
yyDollar = yyS[yypt-2 : yypt+1]
//line query_string.y:237
{
boost, _ := strconv.ParseFloat(yyDollar[2].s, 64)
yyVAL.f = boost
logDebugGrammar("BOOST %f", boost)
}
case 25:
yyDollar = yyS[yypt-0 : yypt+1]
//line query_string.y:244
//line query_string.y:237
{
yyVAL.f = 1.0
}
case 26:
case 25:
yyDollar = yyS[yypt-1 : yypt+1]
//line query_string.y:248
//line query_string.y:241
{
boost, _ := strconv.ParseFloat(yyDollar[1].s, 64)
yyVAL.f = boost
logDebugGrammar("BOOST %f", boost)
}
}
goto yystack /* stack new state and value */