more consistent spacing

We still prohibit a space before a leading '(', which maybe we shouldn't,
but we now allow spaces on both sides of a closing ')' more consistently.
Drop the unneeded "sp" before "close" in the special handling after
null, true, and false, because close now implies that.

Also, refactored the two instances of "sp '=' sp" into a thing called eq,
which may not be worth it.
This commit is contained in:
Seebs 2020-10-07 18:16:44 -05:00
parent 28d18920b9
commit c19d571112
3 changed files with 215 additions and 197 deletions

View file

@ -210,6 +210,20 @@ func TestParser_Parse(t *testing.T) {
}
})
t.Run("VariousSpaces", func(t *testing.T) {
q, err := pql.ParseString(`TopN( x )`)
if err != nil {
t.Fatal(err)
} else if !reflect.DeepEqual(q.Calls[0],
&pql.Call{
Name: "TopN",
Args: map[string]interface{}{"_field": "x"},
},
) {
t.Fatalf("unexpected call: %#v", q.Calls[0])
}
})
}
func TestUnquote(t *testing.T) {

View file

@ -4,7 +4,6 @@ type PQL Peg {
Query
}
Calls <- sp (Call sp)* !.
Call <- "Set" {p.startCall("Set")} open col comma args (comma timestamp)? close {p.endCall()}
/ "SetRowAttrs" {p.startCall("SetRowAttrs")} open posfield comma row comma args close {p.endCall()}
@ -14,11 +13,11 @@ Call <- "Set" {p.startCall("Set")} open col comma args (comma timestamp)? close
/ "Store" {p.startCall("Store")} open Call comma arg close {p.endCall()}
/ "TopN" {p.startCall("TopN")} open posfield (comma allargs)? close {p.endCall()}
/ "Rows" {p.startCall("Rows")} open posfield (comma allargs)? close {p.endCall()}
/ "Range" {p.startCall("Range")} open field sp '=' sp value comma 'from='? {p.addField("from")} timestampfmt {p.addVal(text)} comma 'to='? sp {p.addField("to")} timestampfmt {p.addVal(text)} close {p.endCall()}
/ "Range" {p.startCall("Range")} open field eq value comma 'from='? {p.addField("from")} timestampfmt {p.addVal(text)} comma 'to='? sp {p.addField("to")} timestampfmt {p.addVal(text)} close {p.endCall()}
/ < IDENT > { p.startCall(text) } open allargs comma? close { p.endCall() }
allargs <- Call (comma Call)* (comma args)? / args / sp
args <- arg (comma args)? sp
arg <- field sp '=' sp value
arg <- field eq value
/ field sp COND sp value
/ conditional
COND <- '><' { p.addBTWN() }
@ -34,12 +33,12 @@ condint <- < '-'? [0-9]* '.' [0-9]+ / '0' / '-'? [1-9] [0-9]* > sp {p.condAdd(te
condLT <- <('<=' / '<')> sp {p.condAdd(text)}
condfield <- <fieldExpr> sp {p.condAdd(text)}
value <- item
value <- item
/ lbrack { p.startList() } list rbrack { p.endList() }
list <- item (comma list)?
item <- 'null' &(comma / sp close) { p.addVal(nil) }
/ 'true' &(comma / sp close) { p.addVal(true) }
/ 'false' &(comma / sp close) { p.addVal(false) }
item <- 'null' &(comma / close) { p.addVal(nil) }
/ 'true' &(comma / close) { p.addVal(true) }
/ 'false' &(comma / close) { p.addVal(false) }
/ timestampfmt { p.addVal(text) }
/ < '-'? [0-9]+ ('.'[0-9]*)? > { p.addNumVal(text) }
/ < '-'? '.'[0-9]+ > { p.addNumVal(text) }
@ -64,8 +63,9 @@ row <- <uint> {p.addPosNum("_row", text)}
/ < '"' doublequotedstring '"' > {p.addPosStr("_row", text)}
open <- '(' sp
close <- ')' sp
close <- sp ')' sp
sp <- [ \t\n]*
eq <- sp '=' sp
comma <- sp ',' sp
lbrack <- '[' sp
rbrack <- sp ']' sp

View file

@ -43,6 +43,7 @@ const (
ruleopen
ruleclose
rulesp
ruleeq
rulecomma
rulelbrack
rulerbrack
@ -138,6 +139,7 @@ var rul3s = [...]string{
"open",
"close",
"sp",
"eq",
"comma",
"lbrack",
"rbrack",
@ -320,7 +322,7 @@ type PQL struct {
Buffer string
buffer []rune
rules [92]func() bool
rules [93]func() bool
parse func(rule ...int) error
reset func()
Pretty bool
@ -668,7 +670,7 @@ func (p *PQL) Init(options ...func(*PQL) error) error {
position, tokenIndex = position0, tokenIndex0
return false
},
/* 1 Call <- <((('s' / 'S') ('e' / 'E') ('t' / 'T') Action0 open col comma args (comma timestamp)? close Action1) / (('s' / 'S') ('e' / 'E') ('t' / 'T') ('r' / 'R') ('o' / 'O') ('w' / 'W') ('a' / 'A') ('t' / 'T') ('t' / 'T') ('r' / 'R') ('s' / 'S') Action2 open posfield comma row comma args close Action3) / (('s' / 'S') ('e' / 'E') ('t' / 'T') ('c' / 'C') ('o' / 'O') ('l' / 'L') ('u' / 'U') ('m' / 'M') ('n' / 'N') ('a' / 'A') ('t' / 'T') ('t' / 'T') ('r' / 'R') ('s' / 'S') Action4 open col comma args close Action5) / (('c' / 'C') ('l' / 'L') ('e' / 'E') ('a' / 'A') ('r' / 'R') Action6 open col comma args close Action7) / (('c' / 'C') ('l' / 'L') ('e' / 'E') ('a' / 'A') ('r' / 'R') ('r' / 'R') ('o' / 'O') ('w' / 'W') Action8 open arg close Action9) / (('s' / 'S') ('t' / 'T') ('o' / 'O') ('r' / 'R') ('e' / 'E') Action10 open Call comma arg close Action11) / (('t' / 'T') ('o' / 'O') ('p' / 'P') ('n' / 'N') Action12 open posfield (comma allargs)? close Action13) / (('r' / 'R') ('o' / 'O') ('w' / 'W') ('s' / 'S') Action14 open posfield (comma allargs)? close Action15) / (('r' / 'R') ('a' / 'A') ('n' / 'N') ('g' / 'G') ('e' / 'E') Action16 open field sp '=' sp value comma ('f' 'r' 'o' 'm' '=')? Action17 timestampfmt Action18 comma ('t' 'o' '=')? sp Action19 timestampfmt Action20 close Action21) / (<IDENT> Action22 open allargs comma? close Action23))> */
/* 1 Call <- <((('s' / 'S') ('e' / 'E') ('t' / 'T') Action0 open col comma args (comma timestamp)? close Action1) / (('s' / 'S') ('e' / 'E') ('t' / 'T') ('r' / 'R') ('o' / 'O') ('w' / 'W') ('a' / 'A') ('t' / 'T') ('t' / 'T') ('r' / 'R') ('s' / 'S') Action2 open posfield comma row comma args close Action3) / (('s' / 'S') ('e' / 'E') ('t' / 'T') ('c' / 'C') ('o' / 'O') ('l' / 'L') ('u' / 'U') ('m' / 'M') ('n' / 'N') ('a' / 'A') ('t' / 'T') ('t' / 'T') ('r' / 'R') ('s' / 'S') Action4 open col comma args close Action5) / (('c' / 'C') ('l' / 'L') ('e' / 'E') ('a' / 'A') ('r' / 'R') Action6 open col comma args close Action7) / (('c' / 'C') ('l' / 'L') ('e' / 'E') ('a' / 'A') ('r' / 'R') ('r' / 'R') ('o' / 'O') ('w' / 'W') Action8 open arg close Action9) / (('s' / 'S') ('t' / 'T') ('o' / 'O') ('r' / 'R') ('e' / 'E') Action10 open Call comma arg close Action11) / (('t' / 'T') ('o' / 'O') ('p' / 'P') ('n' / 'N') Action12 open posfield (comma allargs)? close Action13) / (('r' / 'R') ('o' / 'O') ('w' / 'W') ('s' / 'S') Action14 open posfield (comma allargs)? close Action15) / (('r' / 'R') ('a' / 'A') ('n' / 'N') ('g' / 'G') ('e' / 'E') Action16 open field eq value comma ('f' 'r' 'o' 'm' '=')? Action17 timestampfmt Action18 comma ('t' 'o' '=')? sp Action19 timestampfmt Action20 close Action21) / (<IDENT> Action22 open allargs comma? close Action23))> */
func() bool {
position5, tokenIndex5 := position, tokenIndex
{
@ -1856,14 +1858,7 @@ func (p *PQL) Init(options ...func(*PQL) error) error {
if !_rules[rulefield]() {
goto l159
}
if !_rules[rulesp]() {
goto l159
}
if buffer[position] != rune('=') {
goto l159
}
position++
if !_rules[rulesp]() {
if !_rules[ruleeq]() {
goto l159
}
if !_rules[rulevalue]() {
@ -2080,7 +2075,7 @@ func (p *PQL) Init(options ...func(*PQL) error) error {
position, tokenIndex = position194, tokenIndex194
return false
},
/* 4 arg <- <((field sp '=' sp value) / (field sp COND sp value) / conditional)> */
/* 4 arg <- <((field eq value) / (field sp COND sp value) / conditional)> */
func() bool {
position198, tokenIndex198 := position, tokenIndex
{
@ -2090,14 +2085,7 @@ func (p *PQL) Init(options ...func(*PQL) error) error {
if !_rules[rulefield]() {
goto l201
}
if !_rules[rulesp]() {
goto l201
}
if buffer[position] != rune('=') {
goto l201
}
position++
if !_rules[rulesp]() {
if !_rules[ruleeq]() {
goto l201
}
if !_rules[rulevalue]() {
@ -2498,7 +2486,7 @@ func (p *PQL) Init(options ...func(*PQL) error) error {
position, tokenIndex = position258, tokenIndex258
return false
},
/* 12 item <- <(('n' 'u' 'l' 'l' &(comma / (sp close)) Action38) / ('t' 'r' 'u' 'e' &(comma / (sp close)) Action39) / ('f' 'a' 'l' 's' 'e' &(comma / (sp close)) Action40) / (timestampfmt Action41) / (<('-'? [0-9]+ ('.' [0-9]*)?)> Action42) / (<('-'? '.' [0-9]+)> Action43) / (<IDENT> Action44 open allargs comma? close Action45) / (<([a-z] / [A-Z] / [0-9] / '-' / '_' / ':')+> Action46) / (<('"' doublequotedstring '"')> Action47) / (<('\'' singlequotedstring '\'')> Action48))> */
/* 12 item <- <(('n' 'u' 'l' 'l' &(comma / close) Action38) / ('t' 'r' 'u' 'e' &(comma / close) Action39) / ('f' 'a' 'l' 's' 'e' &(comma / close) Action40) / (timestampfmt Action41) / (<('-'? [0-9]+ ('.' [0-9]*)?)> Action42) / (<('-'? '.' [0-9]+)> Action43) / (<IDENT> Action44 open allargs comma? close Action45) / (<([a-z] / [A-Z] / [0-9] / '-' / '_' / ':')+> Action46) / (<('"' doublequotedstring '"')> Action47) / (<('\'' singlequotedstring '\'')> Action48))> */
func() bool {
position262, tokenIndex262 := position, tokenIndex
{
@ -2531,9 +2519,6 @@ func (p *PQL) Init(options ...func(*PQL) error) error {
goto l267
l268:
position, tokenIndex = position267, tokenIndex267
if !_rules[rulesp]() {
goto l265
}
if !_rules[ruleclose]() {
goto l265
}
@ -2573,9 +2558,6 @@ func (p *PQL) Init(options ...func(*PQL) error) error {
goto l272
l273:
position, tokenIndex = position272, tokenIndex272
if !_rules[rulesp]() {
goto l270
}
if !_rules[ruleclose]() {
goto l270
}
@ -2619,9 +2601,6 @@ func (p *PQL) Init(options ...func(*PQL) error) error {
goto l277
l278:
position, tokenIndex = position277, tokenIndex277
if !_rules[rulesp]() {
goto l275
}
if !_rules[ruleclose]() {
goto l275
}
@ -3518,11 +3497,14 @@ func (p *PQL) Init(options ...func(*PQL) error) error {
position, tokenIndex = position400, tokenIndex400
return false
},
/* 23 close <- <(')' sp)> */
/* 23 close <- <(sp ')' sp)> */
func() bool {
position402, tokenIndex402 := position, tokenIndex
{
position403 := position
if !_rules[rulesp]() {
goto l402
}
if buffer[position] != rune(')') {
goto l402
}
@ -3574,7 +3556,7 @@ func (p *PQL) Init(options ...func(*PQL) error) error {
}
return true
},
/* 25 comma <- <(sp ',' sp)> */
/* 25 eq <- <(sp '=' sp)> */
func() bool {
position411, tokenIndex411 := position, tokenIndex
{
@ -3582,193 +3564,197 @@ func (p *PQL) Init(options ...func(*PQL) error) error {
if !_rules[rulesp]() {
goto l411
}
if buffer[position] != rune(',') {
if buffer[position] != rune('=') {
goto l411
}
position++
if !_rules[rulesp]() {
goto l411
}
add(rulecomma, position412)
add(ruleeq, position412)
}
return true
l411:
position, tokenIndex = position411, tokenIndex411
return false
},
/* 26 lbrack <- <('[' sp)> */
nil,
/* 27 rbrack <- <(sp ']' sp)> */
nil,
/* 28 IDENT <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / [0-9])*)> */
/* 26 comma <- <(sp ',' sp)> */
func() bool {
position415, tokenIndex415 := position, tokenIndex
position413, tokenIndex413 := position, tokenIndex
{
position416 := position
position414 := position
if !_rules[rulesp]() {
goto l413
}
if buffer[position] != rune(',') {
goto l413
}
position++
if !_rules[rulesp]() {
goto l413
}
add(rulecomma, position414)
}
return true
l413:
position, tokenIndex = position413, tokenIndex413
return false
},
/* 27 lbrack <- <('[' sp)> */
nil,
/* 28 rbrack <- <(sp ']' sp)> */
nil,
/* 29 IDENT <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / [0-9])*)> */
func() bool {
position417, tokenIndex417 := position, tokenIndex
{
position418 := position
{
position417, tokenIndex417 := position, tokenIndex
position419, tokenIndex419 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l418
goto l420
}
position++
goto l417
l418:
position, tokenIndex = position417, tokenIndex417
goto l419
l420:
position, tokenIndex = position419, tokenIndex419
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l415
goto l417
}
position++
}
l417:
l419:
l421:
{
position420, tokenIndex420 := position, tokenIndex
position422, tokenIndex422 := position, tokenIndex
{
position421, tokenIndex421 := position, tokenIndex
position423, tokenIndex423 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
goto l424
}
position++
goto l423
l424:
position, tokenIndex = position423, tokenIndex423
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l425
}
position++
goto l423
l425:
position, tokenIndex = position423, tokenIndex423
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l422
}
position++
goto l421
l422:
position, tokenIndex = position421, tokenIndex421
if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l423
}
position++
goto l421
l423:
position, tokenIndex = position421, tokenIndex421
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l420
}
position++
}
l421:
goto l419
l420:
position, tokenIndex = position420, tokenIndex420
l423:
goto l421
l422:
position, tokenIndex = position422, tokenIndex422
}
add(ruleIDENT, position416)
add(ruleIDENT, position418)
}
return true
l415:
position, tokenIndex = position415, tokenIndex415
l417:
position, tokenIndex = position417, tokenIndex417
return false
},
/* 29 timestampbasicfmt <- <([0-9] [0-9] [0-9] [0-9] '-' ('0' / '1') [0-9] '-' [0-3] [0-9] 'T' [0-9] [0-9] ':' [0-9] [0-9])> */
/* 30 timestampbasicfmt <- <([0-9] [0-9] [0-9] [0-9] '-' ('0' / '1') [0-9] '-' [0-3] [0-9] 'T' [0-9] [0-9] ':' [0-9] [0-9])> */
func() bool {
position424, tokenIndex424 := position, tokenIndex
position426, tokenIndex426 := position, tokenIndex
{
position425 := position
position427 := position
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l424
goto l426
}
position++
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l424
goto l426
}
position++
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l424
goto l426
}
position++
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l424
goto l426
}
position++
if buffer[position] != rune('-') {
goto l424
goto l426
}
position++
{
position426, tokenIndex426 := position, tokenIndex
position428, tokenIndex428 := position, tokenIndex
if buffer[position] != rune('0') {
goto l427
goto l429
}
position++
goto l426
l427:
position, tokenIndex = position426, tokenIndex426
goto l428
l429:
position, tokenIndex = position428, tokenIndex428
if buffer[position] != rune('1') {
goto l424
goto l426
}
position++
}
l426:
l428:
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l424
goto l426
}
position++
if buffer[position] != rune('-') {
goto l424
goto l426
}
position++
if c := buffer[position]; c < rune('0') || c > rune('3') {
goto l424
goto l426
}
position++
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l424
goto l426
}
position++
if buffer[position] != rune('T') {
goto l424
goto l426
}
position++
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l424
goto l426
}
position++
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l424
goto l426
}
position++
if buffer[position] != rune(':') {
goto l424
goto l426
}
position++
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l424
goto l426
}
position++
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l424
goto l426
}
position++
add(ruletimestampbasicfmt, position425)
add(ruletimestampbasicfmt, position427)
}
return true
l424:
position, tokenIndex = position424, tokenIndex424
l426:
position, tokenIndex = position426, tokenIndex426
return false
},
/* 30 timestampfmt <- <(('"' <timestampbasicfmt> '"') / ('\'' <timestampbasicfmt> '\'') / <timestampbasicfmt>)> */
/* 31 timestampfmt <- <(('"' <timestampbasicfmt> '"') / ('\'' <timestampbasicfmt> '\'') / <timestampbasicfmt>)> */
func() bool {
position428, tokenIndex428 := position, tokenIndex
position430, tokenIndex430 := position, tokenIndex
{
position429 := position
position431 := position
{
position430, tokenIndex430 := position, tokenIndex
position432, tokenIndex432 := position, tokenIndex
if buffer[position] != rune('"') {
goto l431
}
position++
{
position432 := position
if !_rules[ruletimestampbasicfmt]() {
goto l431
}
add(rulePegText, position432)
}
if buffer[position] != rune('"') {
goto l431
}
position++
goto l430
l431:
position, tokenIndex = position430, tokenIndex430
if buffer[position] != rune('\'') {
goto l433
}
position++
@ -3779,147 +3765,165 @@ func (p *PQL) Init(options ...func(*PQL) error) error {
}
add(rulePegText, position434)
}
if buffer[position] != rune('\'') {
if buffer[position] != rune('"') {
goto l433
}
position++
goto l430
goto l432
l433:
position, tokenIndex = position430, tokenIndex430
position, tokenIndex = position432, tokenIndex432
if buffer[position] != rune('\'') {
goto l435
}
position++
{
position435 := position
position436 := position
if !_rules[ruletimestampbasicfmt]() {
goto l428
goto l435
}
add(rulePegText, position435)
add(rulePegText, position436)
}
if buffer[position] != rune('\'') {
goto l435
}
position++
goto l432
l435:
position, tokenIndex = position432, tokenIndex432
{
position437 := position
if !_rules[ruletimestampbasicfmt]() {
goto l430
}
add(rulePegText, position437)
}
}
l430:
add(ruletimestampfmt, position429)
l432:
add(ruletimestampfmt, position431)
}
return true
l428:
position, tokenIndex = position428, tokenIndex428
l430:
position, tokenIndex = position430, tokenIndex430
return false
},
/* 31 timestamp <- <(<timestampfmt> Action57)> */
/* 32 timestamp <- <(<timestampfmt> Action57)> */
nil,
/* 33 Action0 <- <{p.startCall("Set")}> */
/* 34 Action0 <- <{p.startCall("Set")}> */
nil,
/* 34 Action1 <- <{p.endCall()}> */
/* 35 Action1 <- <{p.endCall()}> */
nil,
/* 35 Action2 <- <{p.startCall("SetRowAttrs")}> */
/* 36 Action2 <- <{p.startCall("SetRowAttrs")}> */
nil,
/* 36 Action3 <- <{p.endCall()}> */
/* 37 Action3 <- <{p.endCall()}> */
nil,
/* 37 Action4 <- <{p.startCall("SetColumnAttrs")}> */
/* 38 Action4 <- <{p.startCall("SetColumnAttrs")}> */
nil,
/* 38 Action5 <- <{p.endCall()}> */
/* 39 Action5 <- <{p.endCall()}> */
nil,
/* 39 Action6 <- <{p.startCall("Clear")}> */
/* 40 Action6 <- <{p.startCall("Clear")}> */
nil,
/* 40 Action7 <- <{p.endCall()}> */
/* 41 Action7 <- <{p.endCall()}> */
nil,
/* 41 Action8 <- <{p.startCall("ClearRow")}> */
/* 42 Action8 <- <{p.startCall("ClearRow")}> */
nil,
/* 42 Action9 <- <{p.endCall()}> */
/* 43 Action9 <- <{p.endCall()}> */
nil,
/* 43 Action10 <- <{p.startCall("Store")}> */
/* 44 Action10 <- <{p.startCall("Store")}> */
nil,
/* 44 Action11 <- <{p.endCall()}> */
/* 45 Action11 <- <{p.endCall()}> */
nil,
/* 45 Action12 <- <{p.startCall("TopN")}> */
/* 46 Action12 <- <{p.startCall("TopN")}> */
nil,
/* 46 Action13 <- <{p.endCall()}> */
/* 47 Action13 <- <{p.endCall()}> */
nil,
/* 47 Action14 <- <{p.startCall("Rows")}> */
/* 48 Action14 <- <{p.startCall("Rows")}> */
nil,
/* 48 Action15 <- <{p.endCall()}> */
/* 49 Action15 <- <{p.endCall()}> */
nil,
/* 49 Action16 <- <{p.startCall("Range")}> */
/* 50 Action16 <- <{p.startCall("Range")}> */
nil,
/* 50 Action17 <- <{p.addField("from")}> */
/* 51 Action17 <- <{p.addField("from")}> */
nil,
/* 51 Action18 <- <{p.addVal(text)}> */
/* 52 Action18 <- <{p.addVal(text)}> */
nil,
/* 52 Action19 <- <{p.addField("to")}> */
/* 53 Action19 <- <{p.addField("to")}> */
nil,
/* 53 Action20 <- <{p.addVal(text)}> */
/* 54 Action20 <- <{p.addVal(text)}> */
nil,
/* 54 Action21 <- <{p.endCall()}> */
/* 55 Action21 <- <{p.endCall()}> */
nil,
nil,
/* 56 Action22 <- <{ p.startCall(text) }> */
/* 57 Action22 <- <{ p.startCall(text) }> */
nil,
/* 57 Action23 <- <{ p.endCall() }> */
/* 58 Action23 <- <{ p.endCall() }> */
nil,
/* 58 Action24 <- <{ p.addBTWN() }> */
/* 59 Action24 <- <{ p.addBTWN() }> */
nil,
/* 59 Action25 <- <{ p.addLTE() }> */
/* 60 Action25 <- <{ p.addLTE() }> */
nil,
/* 60 Action26 <- <{ p.addGTE() }> */
/* 61 Action26 <- <{ p.addGTE() }> */
nil,
/* 61 Action27 <- <{ p.addEQ() }> */
/* 62 Action27 <- <{ p.addEQ() }> */
nil,
/* 62 Action28 <- <{ p.addNEQ() }> */
/* 63 Action28 <- <{ p.addNEQ() }> */
nil,
/* 63 Action29 <- <{ p.addLT() }> */
/* 64 Action29 <- <{ p.addLT() }> */
nil,
/* 64 Action30 <- <{ p.addGT() }> */
/* 65 Action30 <- <{ p.addGT() }> */
nil,
/* 65 Action31 <- <{p.startConditional()}> */
/* 66 Action31 <- <{p.startConditional()}> */
nil,
/* 66 Action32 <- <{p.endConditional()}> */
/* 67 Action32 <- <{p.endConditional()}> */
nil,
/* 67 Action33 <- <{p.condAdd(text)}> */
/* 68 Action33 <- <{p.condAdd(text)}> */
nil,
/* 68 Action34 <- <{p.condAdd(text)}> */
/* 69 Action34 <- <{p.condAdd(text)}> */
nil,
/* 69 Action35 <- <{p.condAdd(text)}> */
/* 70 Action35 <- <{p.condAdd(text)}> */
nil,
/* 70 Action36 <- <{ p.startList() }> */
/* 71 Action36 <- <{ p.startList() }> */
nil,
/* 71 Action37 <- <{ p.endList() }> */
/* 72 Action37 <- <{ p.endList() }> */
nil,
/* 72 Action38 <- <{ p.addVal(nil) }> */
/* 73 Action38 <- <{ p.addVal(nil) }> */
nil,
/* 73 Action39 <- <{ p.addVal(true) }> */
/* 74 Action39 <- <{ p.addVal(true) }> */
nil,
/* 74 Action40 <- <{ p.addVal(false) }> */
/* 75 Action40 <- <{ p.addVal(false) }> */
nil,
/* 75 Action41 <- <{ p.addVal(text) }> */
/* 76 Action41 <- <{ p.addVal(text) }> */
nil,
/* 76 Action42 <- <{ p.addNumVal(text) }> */
/* 77 Action42 <- <{ p.addNumVal(text) }> */
nil,
/* 77 Action43 <- <{ p.addNumVal(text) }> */
/* 78 Action43 <- <{ p.addNumVal(text) }> */
nil,
/* 78 Action44 <- <{ p.startCall(text) }> */
/* 79 Action44 <- <{ p.startCall(text) }> */
nil,
/* 79 Action45 <- <{ p.addVal(p.endCall()) }> */
/* 80 Action45 <- <{ p.addVal(p.endCall()) }> */
nil,
/* 80 Action46 <- <{ p.addVal(text) }> */
/* 81 Action46 <- <{ p.addVal(text) }> */
nil,
/* 81 Action47 <- <{ p.addVal(text) }> */
/* 82 Action47 <- <{ p.addVal(text) }> */
nil,
/* 82 Action48 <- <{ p.addVal(text) }> */
/* 83 Action48 <- <{ p.addVal(text) }> */
nil,
/* 83 Action49 <- <{ p.addField(text) }> */
/* 84 Action49 <- <{ p.addField(text) }> */
nil,
/* 84 Action50 <- <{ p.addPosStr("_field", text) }> */
/* 85 Action50 <- <{ p.addPosStr("_field", text) }> */
nil,
/* 85 Action51 <- <{p.addPosNum("_col", text)}> */
/* 86 Action51 <- <{p.addPosNum("_col", text)}> */
nil,
/* 86 Action52 <- <{p.addPosStr("_col", text)}> */
/* 87 Action52 <- <{p.addPosStr("_col", text)}> */
nil,
/* 87 Action53 <- <{p.addPosStr("_col", text)}> */
/* 88 Action53 <- <{p.addPosStr("_col", text)}> */
nil,
/* 88 Action54 <- <{p.addPosNum("_row", text)}> */
/* 89 Action54 <- <{p.addPosNum("_row", text)}> */
nil,
/* 89 Action55 <- <{p.addPosStr("_row", text)}> */
/* 90 Action55 <- <{p.addPosStr("_row", text)}> */
nil,
/* 90 Action56 <- <{p.addPosStr("_row", text)}> */
/* 91 Action56 <- <{p.addPosStr("_row", text)}> */
nil,
/* 91 Action57 <- <{p.addPosStr("_timestamp", text)}> */
/* 92 Action57 <- <{p.addPosStr("_timestamp", text)}> */
nil,
}
p.rules = _rules