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("PLUS"); return tPLUS }
/-/ { logDebugTokens("MINUS"); return tMINUS } /-/ { logDebugTokens("MINUS"); return tMINUS }
/:/ { logDebugTokens("COLON"); return tCOLON } /:/ { logDebugTokens("COLON"); return tCOLON }
/\^/ { logDebugTokens("BOOST"); return tBOOST }
/\(/ { logDebugTokens("LPAREN"); return tLPAREN } /\(/ { logDebugTokens("LPAREN"); return tLPAREN }
/\)/ { logDebugTokens("RPAREN"); return tRPAREN } /\)/ { logDebugTokens("RPAREN"); return tRPAREN }
/>/ { logDebugTokens("GREATER"); return tGREATER } />/ { logDebugTokens("GREATER"); return tGREATER }
/</ { logDebugTokens("LESS"); return tLESS } /</ { logDebugTokens("LESS"); return tLESS }
/=/ { logDebugTokens("EQUAL"); return tEQUAL } /=/ { 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]*)/ /~([0-9]|[1-9][0-9]*)/
{ {
lval.s = yylex.Text()[1:] 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}, }, []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 {[]bool{false, true}, []func(rune) int{ // Transitions
func(r rune) int { 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}, }, []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]*) // ~([0-9]|[1-9][0-9]*)
{[]bool{false, false, true, true, true}, []func(rune) int{ // Transitions {[]bool{false, false, true, true, true}, []func(rune) int{ // Transitions
func(r rune) int { func(r rune) int {
@ -1316,58 +1440,65 @@ OUTER0:
return tCOLON return tCOLON
} }
case 4: case 4:
{
logDebugTokens("BOOST")
return tBOOST
}
case 5:
{ {
logDebugTokens("LPAREN") logDebugTokens("LPAREN")
return tLPAREN return tLPAREN
} }
case 6: case 5:
{ {
logDebugTokens("RPAREN") logDebugTokens("RPAREN")
return tRPAREN return tRPAREN
} }
case 7: case 6:
{ {
logDebugTokens("GREATER") logDebugTokens("GREATER")
return tGREATER return tGREATER
} }
case 8: case 7:
{ {
logDebugTokens("LESS") logDebugTokens("LESS")
return tLESS return tLESS
} }
case 9: case 8:
{ {
logDebugTokens("EQUAL") logDebugTokens("EQUAL")
return tEQUAL return tEQUAL
} }
case 9:
{
lval.s = yylex.Text()[1:]
logDebugTokens("BOOST")
return tBOOST
}
case 10: case 10:
{
lval.s = "1"
logDebugTokens("BOOST")
return tBOOST
}
case 11:
{ {
lval.s = yylex.Text()[1:] lval.s = yylex.Text()[1:]
logDebugTokens("TILDENUMBER - %s", lval.s) logDebugTokens("TILDENUMBER - %s", lval.s)
return tTILDE return tTILDE
} }
case 11: case 12:
{ {
lval.s = "1" lval.s = "1"
logDebugTokens("TILDE") logDebugTokens("TILDE")
return tTILDE return tTILDE
} }
case 12: case 13:
{ {
lval.s = yylex.Text() lval.s = yylex.Text()
logDebugTokens("NUMBER - %s", lval.s) logDebugTokens("NUMBER - %s", lval.s)
return tNUMBER return tNUMBER
} }
case 13: case 14:
{ {
logDebugTokens("WHITESPACE (count=%d)", len(yylex.Text())) /* eat up whitespace */ logDebugTokens("WHITESPACE (count=%d)", len(yylex.Text())) /* eat up whitespace */
} }
case 14: case 15:
{ {
lval.s = yylex.Text() lval.s = yylex.Text()
logDebugTokens("STRING - %s", lval.s) logDebugTokens("STRING - %s", lval.s)

View File

@ -25,10 +25,10 @@ tEQUAL tTILDE
%type <s> tPHRASE %type <s> tPHRASE
%type <s> tNUMBER %type <s> tNUMBER
%type <s> tTILDE %type <s> tTILDE
%type <s> tBOOST
%type <q> searchBase %type <q> searchBase
%type <f> searchSuffix %type <f> searchSuffix
%type <n> searchPrefix %type <n> searchPrefix
%type <f> searchBoost
%% %%
@ -233,18 +233,13 @@ tSTRING tCOLON tLESS tEQUAL tPHRASE {
$$ = q $$ = q
}; };
searchBoost:
tBOOST tNUMBER {
boost, _ := strconv.ParseFloat($2, 64)
$$ = boost
logDebugGrammar("BOOST %f", boost)
};
searchSuffix: searchSuffix:
/* empty */ { /* empty */ {
$$ = 1.0 $$ = 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, -2, 5,
} }
const yyNprod = 27 const yyNprod = 26
const yyPrivate = 57344 const yyPrivate = 57344
var yyTokenNames []string var yyTokenNames []string
var yyStates []string var yyStates []string
const yyLast = 33 const yyLast = 32
var yyAct = [...]int{ var yyAct = [...]int{
18, 20, 23, 17, 29, 26, 14, 3, 19, 21, 16, 18, 21, 13, 27, 24, 3, 1, 17, 19,
22, 27, 24, 16, 28, 25, 9, 11, 33, 31, 20, 25, 22, 15, 26, 23, 9, 11, 31, 29,
1, 15, 5, 6, 10, 32, 30, 2, 13, 4, 4, 14, 5, 6, 10, 30, 28, 2, 12, 8,
12, 7, 8, 0, 7,
} }
var yyPact = [...]int{ var yyPact = [...]int{
16, -1000, -1000, 16, 12, -1000, -1000, -1000, -3, 5, 16, -1000, -1000, 16, 12, -1000, -1000, -1000, -6, 5,
-1000, -1000, -1000, -1000, -9, -1000, -4, -1000, -14, -1000, -1000, -1000, -1000, -1000, -1000, -4, -14, -1000, -1000, 0,
-1000, 0, -1, -1000, -1000, 14, -1000, -1000, 13, -1000, -1, -1000, -1000, 14, -1000, -1000, 13, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000,
} }
var yyPgo = [...]int{ var yyPgo = [...]int{
0, 32, 30, 29, 28, 20, 27, 7, 0, 29, 28, 20, 7, 27, 6,
} }
var yyR1 = [...]int{ 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, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 4, 2, 2, 1, 1, 1, 1, 2, 2,
} }
var yyR2 = [...]int{ var yyR2 = [...]int{
0, 1, 2, 1, 3, 0, 1, 1, 1, 2, 0, 1, 2, 1, 3, 0, 1, 1, 1, 2,
4, 1, 1, 3, 3, 3, 4, 5, 4, 5, 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{ var yyChk = [...]int{
-1000, -5, -6, -7, -3, 6, 7, -6, -1, 4, -1000, -4, -5, -6, -3, 6, 7, -5, -1, 4,
12, 5, -2, -4, 9, 16, 8, 12, 4, 12, 12, 5, -2, 9, 16, 8, 4, 12, 5, 13,
5, 13, 14, 16, 12, 15, 5, 12, 15, 5, 14, 16, 12, 15, 5, 12, 15, 5, 12, 5,
12, 5, 12, 5, 12, 5,
} }
var yyDef = [...]int{ var yyDef = [...]int{
5, -2, 1, -2, 0, 6, 7, 2, 25, 8, 5, -2, 1, -2, 0, 6, 7, 2, 24, 8,
11, 12, 4, 26, 0, 9, 0, 24, 13, 14, 11, 12, 4, 25, 9, 0, 13, 14, 15, 0,
15, 0, 0, 10, 16, 0, 20, 18, 0, 22, 0, 10, 16, 0, 20, 18, 0, 22, 17, 21,
17, 21, 19, 23, 19, 23,
} }
var yyTok1 = [...]int{ var yyTok1 = [...]int{
@ -715,24 +715,18 @@ yydefault:
yyVAL.q = q yyVAL.q = q
} }
case 24: 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] yyDollar = yyS[yypt-0 : yypt+1]
//line query_string.y:244 //line query_string.y:237
{ {
yyVAL.f = 1.0 yyVAL.f = 1.0
} }
case 26: case 25:
yyDollar = yyS[yypt-1 : yypt+1] 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 */ goto yystack /* stack new state and value */