0
0

query syntax now accepts floats for boost

This commit is contained in:
Marty Schoch 2014-08-25 20:09:53 -04:00
parent 78db88897c
commit 680de03e65
4 changed files with 432 additions and 386 deletions

View File

@ -9,11 +9,11 @@
/^/ { logDebugTokens("BOOST"); return BOOST }
/\(/ { logDebugTokens("LPAREN"); return LPAREN }
/\)/ { logDebugTokens("RPAREN"); return RPAREN }
/-?[0-9]|[1-9][0-9]*/
/-?([0-9]|[1-9][0-9]*)(\.[0-9][0-9]*)?/
{
lval.n,_ = strconv.Atoi(yylex.Text());
logDebugTokens("INT - %d", lval.n);
return INT
lval.f,_ = strconv.ParseFloat(yylex.Text(), 64);
logDebugTokens("NUMBER - %f", lval.f);
return NUMBER
}
/[ \t\n]+/ { logDebugTokens("WHITESPACE (count=%d)", len(yylex.Text())) /* eat up whitespace */ }
/[^\t\n\f\r :^\+\-]+/ {

View File

@ -23,65 +23,44 @@ a = make([]family, 1)
{
var acc [18]bool
var fun [18]func(rune) int
fun[8] = func(r rune) int {
fun[7] = func(r rune) int {
switch(r) {
case 110: return 5
case 117: return 6
case 47: return 7
case 92: return 8
case 34: return 9
case 114: return 10
case 116: return 11
case 102: return 12
case 98: return 13
case 110: return 2
case 114: return 2
case 34: return 3
case 92: return 4
case 102: return 2
case 117: return 2
case 116: return 2
case 47: return 2
case 98: return 2
default:
switch {
case 48 <= r && r <= 57: return 4
case 65 <= r && r <= 70: return 4
case 97 <= r && r <= 102: return 4
default: return 4
case 48 <= r && r <= 57: return 2
case 65 <= r && r <= 70: return 2
case 97 <= r && r <= 102: return 2
default: return 2
}
}
panic("unreachable")
}
fun[15] = func(r rune) int {
fun[1] = func(r rune) int {
switch(r) {
case 110: return 4
case 117: return 4
case 47: return 4
case 92: return 2
case 110: return 2
case 114: return 2
case 34: return 3
case 114: return 4
case 116: return 4
case 102: return 16
case 98: return 16
case 92: return 4
case 102: return 2
case 117: return 2
case 116: return 2
case 47: return 2
case 98: return 2
default:
switch {
case 48 <= r && r <= 57: return 16
case 65 <= r && r <= 70: return 16
case 97 <= r && r <= 102: return 16
default: return 4
}
}
panic("unreachable")
}
fun[10] = func(r rune) int {
switch(r) {
case 117: return 4
case 47: return 4
case 92: return 2
case 34: return 3
case 114: return 4
case 116: return 4
case 102: return 4
case 98: return 4
case 110: return 4
default:
switch {
case 48 <= r && r <= 57: return 4
case 65 <= r && r <= 70: return 4
case 97 <= r && r <= 102: return 4
default: return 4
case 48 <= r && r <= 57: return 2
case 65 <= r && r <= 70: return 2
case 97 <= r && r <= 102: return 2
default: return 2
}
}
panic("unreachable")
@ -89,36 +68,15 @@ fun[10] = func(r rune) int {
acc[3] = true
fun[3] = func(r rune) int {
switch(r) {
case 116: return -1
case 102: return -1
case 98: return -1
case 110: return -1
case 117: return -1
case 47: return -1
case 92: return -1
case 34: return -1
case 114: return -1
default:
switch {
case 48 <= r && r <= 57: return -1
case 65 <= r && r <= 70: return -1
case 97 <= r && r <= 102: return -1
default: return -1
}
}
panic("unreachable")
}
fun[0] = func(r rune) int {
switch(r) {
case 114: return -1
case 116: return -1
case 92: return -1
case 102: return -1
case 117: return -1
case 116: return -1
case 47: return -1
case 98: return -1
case 110: return -1
case 117: return -1
case 47: return -1
case 92: return -1
case 34: return 1
case 114: return -1
default:
switch {
case 48 <= r && r <= 57: return -1
@ -129,276 +87,318 @@ fun[0] = func(r rune) int {
}
panic("unreachable")
}
fun[16] = func(r rune) int {
fun[9] = func(r rune) int {
switch(r) {
case 47: return 4
case 92: return 2
case 110: return 2
case 114: return 2
case 34: return 3
case 114: return 4
case 116: return 4
case 102: return 17
case 98: return 17
case 110: return 4
case 117: return 4
case 92: return 4
case 102: return 2
case 117: return 2
case 116: return 2
case 47: return 2
case 98: return 2
default:
switch {
case 48 <= r && r <= 57: return 17
case 65 <= r && r <= 70: return 17
case 97 <= r && r <= 102: return 17
default: return 4
case 48 <= r && r <= 57: return 2
case 65 <= r && r <= 70: return 2
case 97 <= r && r <= 102: return 2
default: return 2
}
}
panic("unreachable")
}
fun[11] = func(r rune) int {
fun[8] = func(r rune) int {
switch(r) {
case 117: return 4
case 47: return 4
case 92: return 2
case 92: return 4
case 102: return 2
case 117: return 2
case 116: return 2
case 47: return 2
case 98: return 2
case 110: return 2
case 114: return 2
case 34: return 3
case 114: return 4
case 116: return 4
case 102: return 4
case 98: return 4
case 110: return 4
default:
switch {
case 48 <= r && r <= 57: return 4
case 65 <= r && r <= 70: return 4
case 97 <= r && r <= 102: return 4
default: return 4
}
}
panic("unreachable")
}
fun[6] = func(r rune) int {
switch(r) {
case 110: return 4
case 117: return 4
case 47: return 4
case 92: return 2
case 34: return 3
case 114: return 4
case 116: return 4
case 102: return 14
case 98: return 14
default:
switch {
case 48 <= r && r <= 57: return 14
case 65 <= r && r <= 70: return 14
case 97 <= r && r <= 102: return 14
default: return 4
}
}
panic("unreachable")
}
fun[1] = func(r rune) int {
switch(r) {
case 92: return 2
case 34: return 3
case 114: return 4
case 116: return 4
case 102: return 4
case 98: return 4
case 110: return 4
case 117: return 4
case 47: return 4
default:
switch {
case 48 <= r && r <= 57: return 4
case 65 <= r && r <= 70: return 4
case 97 <= r && r <= 102: return 4
default: return 4
}
}
panic("unreachable")
}
fun[7] = func(r rune) int {
switch(r) {
case 92: return 2
case 34: return 3
case 114: return 4
case 116: return 4
case 102: return 4
case 98: return 4
case 110: return 4
case 117: return 4
case 47: return 4
default:
switch {
case 48 <= r && r <= 57: return 4
case 65 <= r && r <= 70: return 4
case 97 <= r && r <= 102: return 4
default: return 4
case 48 <= r && r <= 57: return 2
case 65 <= r && r <= 70: return 2
case 97 <= r && r <= 102: return 2
default: return 2
}
}
panic("unreachable")
}
fun[13] = func(r rune) int {
switch(r) {
case 110: return 4
case 117: return 4
case 47: return 4
case 92: return 2
case 110: return 2
case 114: return 2
case 34: return 3
case 114: return 4
case 116: return 4
case 102: return 4
case 98: return 4
case 92: return 4
case 102: return 2
case 117: return 2
case 116: return 2
case 47: return 2
case 98: return 2
default:
switch {
case 48 <= r && r <= 57: return 4
case 65 <= r && r <= 70: return 4
case 97 <= r && r <= 102: return 4
default: return 4
}
}
panic("unreachable")
}
fun[5] = func(r rune) int {
switch(r) {
case 92: return 2
case 34: return 3
case 114: return 4
case 116: return 4
case 102: return 4
case 98: return 4
case 110: return 4
case 117: return 4
case 47: return 4
default:
switch {
case 48 <= r && r <= 57: return 4
case 65 <= r && r <= 70: return 4
case 97 <= r && r <= 102: return 4
default: return 4
}
}
panic("unreachable")
}
fun[17] = func(r rune) int {
switch(r) {
case 114: return 4
case 116: return 4
case 102: return 4
case 98: return 4
case 110: return 4
case 117: return 4
case 47: return 4
case 92: return 2
case 34: return 3
default:
switch {
case 48 <= r && r <= 57: return 4
case 65 <= r && r <= 70: return 4
case 97 <= r && r <= 102: return 4
default: return 4
}
}
panic("unreachable")
}
fun[12] = func(r rune) int {
switch(r) {
case 114: return 4
case 116: return 4
case 102: return 4
case 98: return 4
case 110: return 4
case 117: return 4
case 47: return 4
case 92: return 2
case 34: return 3
default:
switch {
case 48 <= r && r <= 57: return 4
case 65 <= r && r <= 70: return 4
case 97 <= r && r <= 102: return 4
default: return 4
}
}
panic("unreachable")
}
fun[14] = func(r rune) int {
switch(r) {
case 110: return 4
case 117: return 4
case 47: return 4
case 92: return 2
case 34: return 3
case 114: return 4
case 116: return 4
case 102: return 15
case 98: return 15
default:
switch {
case 48 <= r && r <= 57: return 15
case 65 <= r && r <= 70: return 15
case 97 <= r && r <= 102: return 15
default: return 4
}
}
panic("unreachable")
}
acc[9] = true
fun[9] = func(r rune) int {
switch(r) {
case 110: return 4
case 117: return 4
case 47: return 4
case 92: return 2
case 34: return 3
case 114: return 4
case 116: return 4
case 102: return 4
case 98: return 4
default:
switch {
case 48 <= r && r <= 57: return 4
case 65 <= r && r <= 70: return 4
case 97 <= r && r <= 102: return 4
default: return 4
}
}
panic("unreachable")
}
fun[4] = func(r rune) int {
switch(r) {
case 116: return 4
case 102: return 4
case 98: return 4
case 110: return 4
case 117: return 4
case 47: return 4
case 92: return 2
case 34: return 3
case 114: return 4
default:
switch {
case 48 <= r && r <= 57: return 4
case 65 <= r && r <= 70: return 4
case 97 <= r && r <= 102: return 4
default: return 4
case 48 <= r && r <= 57: return 2
case 65 <= r && r <= 70: return 2
case 97 <= r && r <= 102: return 2
default: return 2
}
}
panic("unreachable")
}
fun[2] = func(r rune) int {
switch(r) {
case 110: return 5
case 117: return 6
case 47: return 7
case 92: return 8
case 34: return 9
case 114: return 10
case 116: return 11
case 102: return 12
case 98: return 13
case 92: return 4
case 102: return 2
case 117: return 2
case 116: return 2
case 47: return 2
case 98: return 2
case 110: return 2
case 114: return 2
case 34: return 3
default:
switch {
case 48 <= r && r <= 57: return 4
case 65 <= r && r <= 70: return 4
case 97 <= r && r <= 102: return 4
default: return 4
case 48 <= r && r <= 57: return 2
case 65 <= r && r <= 70: return 2
case 97 <= r && r <= 102: return 2
default: return 2
}
}
panic("unreachable")
}
fun[17] = func(r rune) int {
switch(r) {
case 110: return 2
case 114: return 2
case 34: return 3
case 92: return 4
case 102: return 2
case 117: return 2
case 116: return 2
case 47: return 2
case 98: return 2
default:
switch {
case 48 <= r && r <= 57: return 2
case 65 <= r && r <= 70: return 2
case 97 <= r && r <= 102: return 2
default: return 2
}
}
panic("unreachable")
}
fun[15] = func(r rune) int {
switch(r) {
case 110: return 2
case 114: return 2
case 34: return 3
case 92: return 4
case 102: return 16
case 117: return 2
case 116: return 2
case 47: return 2
case 98: return 16
default:
switch {
case 48 <= r && r <= 57: return 16
case 65 <= r && r <= 70: return 16
case 97 <= r && r <= 102: return 16
default: return 2
}
}
panic("unreachable")
}
fun[14] = func(r rune) int {
switch(r) {
case 34: return 3
case 92: return 4
case 102: return 15
case 117: return 2
case 116: return 2
case 47: return 2
case 98: return 15
case 110: return 2
case 114: return 2
default:
switch {
case 48 <= r && r <= 57: return 15
case 65 <= r && r <= 70: return 15
case 97 <= r && r <= 102: return 15
default: return 2
}
}
panic("unreachable")
}
fun[10] = func(r rune) int {
switch(r) {
case 110: return 2
case 114: return 2
case 34: return 3
case 92: return 4
case 102: return 2
case 117: return 2
case 116: return 2
case 47: return 2
case 98: return 2
default:
switch {
case 48 <= r && r <= 57: return 2
case 65 <= r && r <= 70: return 2
case 97 <= r && r <= 102: return 2
default: return 2
}
}
panic("unreachable")
}
fun[12] = func(r rune) int {
switch(r) {
case 117: return 5
case 116: return 6
case 47: return 7
case 98: return 8
case 110: return 9
case 114: return 10
case 34: return 11
case 92: return 12
case 102: return 13
default:
switch {
case 48 <= r && r <= 57: return 2
case 65 <= r && r <= 70: return 2
case 97 <= r && r <= 102: return 2
default: return 2
}
}
panic("unreachable")
}
fun[5] = func(r rune) int {
switch(r) {
case 92: return 4
case 102: return 14
case 117: return 2
case 116: return 2
case 47: return 2
case 98: return 14
case 110: return 2
case 114: return 2
case 34: return 3
default:
switch {
case 48 <= r && r <= 57: return 14
case 65 <= r && r <= 70: return 14
case 97 <= r && r <= 102: return 14
default: return 2
}
}
panic("unreachable")
}
acc[11] = true
fun[11] = func(r rune) int {
switch(r) {
case 34: return 3
case 92: return 4
case 102: return 2
case 117: return 2
case 116: return 2
case 47: return 2
case 98: return 2
case 110: return 2
case 114: return 2
default:
switch {
case 48 <= r && r <= 57: return 2
case 65 <= r && r <= 70: return 2
case 97 <= r && r <= 102: return 2
default: return 2
}
}
panic("unreachable")
}
fun[16] = func(r rune) int {
switch(r) {
case 110: return 2
case 114: return 2
case 34: return 3
case 92: return 4
case 102: return 17
case 117: return 2
case 116: return 2
case 47: return 2
case 98: return 17
default:
switch {
case 48 <= r && r <= 57: return 17
case 65 <= r && r <= 70: return 17
case 97 <= r && r <= 102: return 17
default: return 2
}
}
panic("unreachable")
}
fun[4] = func(r rune) int {
switch(r) {
case 117: return 5
case 116: return 6
case 47: return 7
case 98: return 8
case 110: return 9
case 114: return 10
case 34: return 11
case 92: return 12
case 102: return 13
default:
switch {
case 48 <= r && r <= 57: return 2
case 65 <= r && r <= 70: return 2
case 97 <= r && r <= 102: return 2
default: return 2
}
}
panic("unreachable")
}
fun[0] = func(r rune) int {
switch(r) {
case 34: return 1
case 92: return -1
case 102: return -1
case 117: return -1
case 116: return -1
case 47: return -1
case 98: return -1
case 110: return -1
case 114: return -1
default:
switch {
case 48 <= r && r <= 57: return -1
case 65 <= r && r <= 70: return -1
case 97 <= r && r <= 102: return -1
default: return -1
}
}
panic("unreachable")
}
fun[6] = func(r rune) int {
switch(r) {
case 47: return 2
case 98: return 2
case 110: return 2
case 114: return 2
case 34: return 3
case 92: return 4
case 102: return 2
case 117: return 2
case 116: return 2
default:
switch {
case 48 <= r && r <= 57: return 2
case 65 <= r && r <= 70: return 2
case 97 <= r && r <= 102: return 2
default: return 2
}
}
panic("unreachable")
@ -438,10 +438,9 @@ a0[1].id = 1
{
var acc [2]bool
var fun [2]func(rune) int
acc[1] = true
fun[1] = func(r rune) int {
fun[0] = func(r rune) int {
switch(r) {
case 45: return -1
case 45: return 1
default:
switch {
default: return -1
@ -449,9 +448,10 @@ fun[1] = func(r rune) int {
}
panic("unreachable")
}
fun[0] = func(r rune) int {
acc[1] = true
fun[1] = func(r rune) int {
switch(r) {
case 45: return 1
case 45: return -1
default:
switch {
default: return -1
@ -466,10 +466,9 @@ a0[2].id = 2
{
var acc [2]bool
var fun [2]func(rune) int
acc[1] = true
fun[1] = func(r rune) int {
fun[0] = func(r rune) int {
switch(r) {
case 58: return -1
case 58: return 1
default:
switch {
default: return -1
@ -477,9 +476,10 @@ fun[1] = func(r rune) int {
}
panic("unreachable")
}
fun[0] = func(r rune) int {
acc[1] = true
fun[1] = func(r rune) int {
switch(r) {
case 58: return 1
case 58: return -1
default:
switch {
default: return -1
@ -550,10 +550,9 @@ a0[5].id = 5
{
var acc [2]bool
var fun [2]func(rune) int
acc[1] = true
fun[1] = func(r rune) int {
fun[0] = func(r rune) int {
switch(r) {
case 41: return -1
case 41: return 1
default:
switch {
default: return -1
@ -561,9 +560,10 @@ fun[1] = func(r rune) int {
}
panic("unreachable")
}
fun[0] = func(r rune) int {
acc[1] = true
fun[1] = func(r rune) int {
switch(r) {
case 41: return 1
case 41: return -1
default:
switch {
default: return -1
@ -576,24 +576,12 @@ a0[6].f = fun[:]
a0[6].id = 6
}
{
var acc [5]bool
var fun [5]func(rune) int
acc[4] = true
fun[4] = func(r rune) int {
var acc [8]bool
var fun [8]func(rune) int
fun[1] = func(r rune) int {
switch(r) {
case 45: return -1
default:
switch {
case 48 <= r && r <= 48: return 4
case 49 <= r && r <= 57: return 4
default: return -1
}
}
panic("unreachable")
}
fun[0] = func(r rune) int {
switch(r) {
case 45: return 1
case 46: return -1
default:
switch {
case 48 <= r && r <= 48: return 2
@ -607,22 +595,25 @@ acc[3] = true
fun[3] = func(r rune) int {
switch(r) {
case 45: return -1
case 46: return 4
default:
switch {
case 48 <= r && r <= 48: return 4
case 49 <= r && r <= 57: return 4
case 48 <= r && r <= 48: return 5
case 49 <= r && r <= 57: return 5
default: return -1
}
}
panic("unreachable")
}
fun[1] = func(r rune) int {
acc[5] = true
fun[5] = func(r rune) int {
switch(r) {
case 45: return -1
case 46: return 4
default:
switch {
case 48 <= r && r <= 48: return 2
case 49 <= r && r <= 57: return 2
case 48 <= r && r <= 48: return 5
case 49 <= r && r <= 57: return 5
default: return -1
}
}
@ -631,6 +622,7 @@ fun[1] = func(r rune) int {
acc[2] = true
fun[2] = func(r rune) int {
switch(r) {
case 46: return 4
case 45: return -1
default:
switch {
@ -641,6 +633,60 @@ fun[2] = func(r rune) int {
}
panic("unreachable")
}
fun[0] = func(r rune) int {
switch(r) {
case 45: return 1
case 46: return -1
default:
switch {
case 48 <= r && r <= 48: return 2
case 49 <= r && r <= 57: return 3
default: return -1
}
}
panic("unreachable")
}
acc[6] = true
fun[6] = func(r rune) int {
switch(r) {
case 45: return -1
case 46: return -1
default:
switch {
case 48 <= r && r <= 48: return 7
case 49 <= r && r <= 57: return 7
default: return -1
}
}
panic("unreachable")
}
fun[4] = func(r rune) int {
switch(r) {
case 45: return -1
case 46: return -1
default:
switch {
case 48 <= r && r <= 48: return 6
case 49 <= r && r <= 57: return 6
default: return -1
}
}
panic("unreachable")
}
acc[7] = true
fun[7] = func(r rune) int {
switch(r) {
case 46: return -1
case 45: return -1
default:
switch {
case 48 <= r && r <= 48: return 7
case 49 <= r && r <= 57: return 7
default: return -1
}
}
panic("unreachable")
}
a0[7].acc = acc[:]
a0[7].f = fun[:]
a0[7].id = 7
@ -648,11 +694,12 @@ a0[7].id = 7
{
var acc [2]bool
var fun [2]func(rune) int
fun[0] = func(r rune) int {
acc[1] = true
fun[1] = func(r rune) int {
switch(r) {
case 9: return 1
case 10: return 1
case 32: return 1
case 10: return 1
case 9: return 1
default:
switch {
default: return -1
@ -660,12 +707,11 @@ fun[0] = func(r rune) int {
}
panic("unreachable")
}
acc[1] = true
fun[1] = func(r rune) int {
fun[0] = func(r rune) int {
switch(r) {
case 9: return 1
case 10: return 1
case 32: return 1
case 10: return 1
default:
switch {
default: return -1
@ -683,15 +729,15 @@ var fun [2]func(rune) int
acc[1] = true
fun[1] = func(r rune) int {
switch(r) {
case 58: return -1
case 10: return -1
case 94: return -1
case 32: return -1
case 45: return -1
case 43: return -1
case 9: return -1
case 45: return -1
case 12: return -1
case 13: return -1
case 94: return -1
case 32: return -1
case 58: return -1
case 10: return -1
default:
switch {
default: return 1
@ -701,15 +747,15 @@ fun[1] = func(r rune) int {
}
fun[0] = func(r rune) int {
switch(r) {
case 9: return -1
case 45: return -1
case 12: return -1
case 13: return -1
case 58: return -1
case 10: return -1
case 94: return -1
case 32: return -1
case 58: return -1
case 10: return -1
case 45: return -1
case 43: return -1
case 9: return -1
default:
switch {
default: return 1
@ -840,11 +886,11 @@ func (yylex Lexer) Lex(lval *yySymType) int {
{ logDebugTokens("LPAREN"); return LPAREN }
case 6: //\)/
{ logDebugTokens("RPAREN"); return RPAREN }
case 7: //-?[0-9]|[1-9][0-9]*/
case 7: //-?([0-9]|[1-9][0-9]*)(\.[0-9][0-9]*)?/
{
lval.n,_ = strconv.Atoi(yylex.Text());
logDebugTokens("INT - %d", lval.n);
return INT
lval.f,_ = strconv.ParseFloat(yylex.Text(), 64);
logDebugTokens("NUMBER - %f", lval.f);
return NUMBER
}
case 8: //[ \t\n]+/
{ logDebugTokens("WHITESPACE (count=%d)", len(yylex.Text())) /* eat up whitespace */ }

View File

@ -14,7 +14,7 @@ s string
n int
f float64}
%token STRING PHRASE PLUS MINUS COLON BOOST LPAREN RPAREN INT STRING
%token STRING PHRASE PLUS MINUS COLON BOOST LPAREN RPAREN NUMBER STRING
%%
@ -127,17 +127,17 @@ STRING COLON PHRASE {
searchBoost:
BOOST INT {
boost := $2.n
BOOST NUMBER {
boost := $2.f
if parsingLastQuery != nil {
switch parsingLastQuery := parsingLastQuery.(type) {
case *MatchQuery:
parsingLastQuery.SetBoost(float64(boost))
parsingLastQuery.SetBoost(boost)
case *MatchPhraseQuery:
parsingLastQuery.SetBoost(float64(boost))
parsingLastQuery.SetBoost(boost)
}
}
logDebugGrammar("BOOST %d", boost)
logDebugGrammar("BOOST %f", boost)
};
searchSuffix:

12
y.go
View File

@ -28,7 +28,7 @@ const COLON = 57350
const BOOST = 57351
const LPAREN = 57352
const RPAREN = 57353
const INT = 57354
const NUMBER = 57354
var yyToknames = []string{
"STRING",
@ -39,7 +39,7 @@ var yyToknames = []string{
"BOOST",
"LPAREN",
"RPAREN",
"INT",
"NUMBER",
}
var yyStatenames = []string{}
@ -451,16 +451,16 @@ yydefault:
case 13:
//line query_syntax.y:130
{
boost := yyS[yypt-0].n
boost := yyS[yypt-0].f
if parsingLastQuery != nil {
switch parsingLastQuery := parsingLastQuery.(type) {
case *MatchQuery:
parsingLastQuery.SetBoost(float64(boost))
parsingLastQuery.SetBoost(boost)
case *MatchPhraseQuery:
parsingLastQuery.SetBoost(float64(boost))
parsingLastQuery.SetBoost(boost)
}
}
logDebugGrammar("BOOST %d", boost)
logDebugGrammar("BOOST %f", boost)
}
case 14:
//line query_syntax.y:144