11 const endSymbol rune = 1114112
13 /* The rule types inferred from the grammar are below. */
17 ruleUnknown pegRule = iota
39 var rul3s = [...]string{
67 func (t *token32) String() string {
68 return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end)
76 func (node *node32) print(pretty bool, buffer string) {
77 var print func(node *node32, depth int)
78 print = func(node *node32, depth int) {
80 for c := 0; c < depth; c++ {
83 rule := rul3s[node.pegRule]
84 quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end])))
86 fmt.Printf("%v %v\n", rule, quote)
88 fmt.Printf("\x1B[34m%v\x1B[m %v\n", rule, quote)
91 print(node.up, depth+1)
99 func (node *node32) Print(buffer string) {
100 node.print(false, buffer)
103 func (node *node32) PrettyPrint(buffer string) {
104 node.print(true, buffer)
107 type tokens32 struct {
111 func (t *tokens32) Trim(length uint32) {
112 t.tree = t.tree[:length]
115 func (t *tokens32) Print() {
116 for _, token := range t.tree {
117 fmt.Println(token.String())
121 func (t *tokens32) AST() *node32 {
122 type element struct {
128 for _, token := range tokens {
129 if token.begin == token.end {
132 node := &node32{token32: token}
133 for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end {
134 stack.node.next = node.up
138 stack = &element{node: node, down: stack}
146 func (t *tokens32) PrintSyntaxTree(buffer string) {
147 t.AST().Print(buffer)
150 func (t *tokens32) PrettyPrintSyntaxTree(buffer string) {
151 t.AST().PrettyPrint(buffer)
154 func (t *tokens32) Add(rule pegRule, begin, end, index uint32) {
155 if tree := t.tree; int(index) >= len(tree) {
156 expanded := make([]token32, 2*len(tree))
160 t.tree[index] = token32{
167 func (t *tokens32) Tokens() []token32 {
171 type QueryParser struct {
174 rules [20]func() bool
175 parse func(rule ...int) error
181 func (p *QueryParser) Parse(rule ...int) error {
182 return p.parse(rule...)
185 func (p *QueryParser) Reset() {
189 type textPosition struct {
193 type textPositionMap map[int]textPosition
195 func translatePositions(buffer []rune, positions []int) textPositionMap {
196 length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0
200 for i, c := range buffer {
202 line, symbol = line+1, 0
206 if i == positions[j] {
207 translations[positions[j]] = textPosition{line, symbol}
208 for j++; j < length; j++ {
209 if i != positions[j] {
220 type parseError struct {
225 func (e *parseError) Error() string {
226 tokens, error := []token32{e.max}, "\n"
227 positions, p := make([]int, 2*len(tokens)), 0
228 for _, token := range tokens {
229 positions[p], p = int(token.begin), p+1
230 positions[p], p = int(token.end), p+1
232 translations := translatePositions(e.p.buffer, positions)
233 format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n"
235 format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n"
237 for _, token := range tokens {
238 begin, end := int(token.begin), int(token.end)
239 error += fmt.Sprintf(format,
240 rul3s[token.pegRule],
241 translations[begin].line, translations[begin].symbol,
242 translations[end].line, translations[end].symbol,
243 strconv.Quote(string(e.p.buffer[begin:end])))
249 func (p *QueryParser) PrintSyntaxTree() {
251 p.tokens32.PrettyPrintSyntaxTree(p.Buffer)
253 p.tokens32.PrintSyntaxTree(p.Buffer)
257 func (p *QueryParser) Init() {
260 position, tokenIndex uint32
265 position, tokenIndex = 0, 0
267 p.buffer = []rune(p.Buffer)
268 if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol {
269 p.buffer = append(p.buffer, endSymbol)
276 tree := tokens32{tree: make([]token32, math.MaxInt16)}
277 p.parse = func(rule ...int) error {
282 matches := p.rules[r]()
288 return &parseError{p, max}
291 add := func(rule pegRule, begin uint32) {
292 tree.Add(rule, begin, position, tokenIndex)
294 if begin != position && position > max.end {
295 max = token32{rule, begin, position}
299 matchDot := func() bool {
300 if buffer[position] != endSymbol {
307 /*matchChar := func(c byte) bool {
308 if buffer[position] == c {
315 /*matchRange := func(lower byte, upper byte) bool {
316 if c := buffer[position]; c >= lower && c <= upper {
323 _rules = [...]func() bool{
325 /* 0 e <- <('"' condition (' '+ and ' '+ condition)* '"' !.)> */
327 position0, tokenIndex0 := position, tokenIndex
329 position1 := position
330 if buffer[position] != rune('"') {
334 if !_rules[rulecondition]() {
339 position3, tokenIndex3 := position, tokenIndex
340 if buffer[position] != rune(' ') {
346 position5, tokenIndex5 := position, tokenIndex
347 if buffer[position] != rune(' ') {
353 position, tokenIndex = position5, tokenIndex5
356 position6 := position
358 position7, tokenIndex7 := position, tokenIndex
359 if buffer[position] != rune('a') {
365 position, tokenIndex = position7, tokenIndex7
366 if buffer[position] != rune('A') {
373 position9, tokenIndex9 := position, tokenIndex
374 if buffer[position] != rune('n') {
380 position, tokenIndex = position9, tokenIndex9
381 if buffer[position] != rune('N') {
388 position11, tokenIndex11 := position, tokenIndex
389 if buffer[position] != rune('d') {
395 position, tokenIndex = position11, tokenIndex11
396 if buffer[position] != rune('D') {
402 add(ruleand, position6)
404 if buffer[position] != rune(' ') {
410 position14, tokenIndex14 := position, tokenIndex
411 if buffer[position] != rune(' ') {
417 position, tokenIndex = position14, tokenIndex14
419 if !_rules[rulecondition]() {
424 position, tokenIndex = position3, tokenIndex3
426 if buffer[position] != rune('"') {
431 position15, tokenIndex15 := position, tokenIndex
437 position, tokenIndex = position15, tokenIndex15
439 add(rulee, position1)
443 position, tokenIndex = position0, tokenIndex0
446 /* 1 condition <- <(tag ' '* ((le ' '* ((&('D' | 'd') date) | (&('T' | 't') time) | (&('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') number))) / (ge ' '* ((&('D' | 'd') date) | (&('T' | 't') time) | (&('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') number))) / ((&('=') (equal ' '* ((&('\'') value) | (&('D' | 'd') date) | (&('T' | 't') time) | (&('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') number)))) | (&('>') (g ' '* ((&('D' | 'd') date) | (&('T' | 't') time) | (&('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') number)))) | (&('<') (l ' '* ((&('D' | 'd') date) | (&('T' | 't') time) | (&('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') number)))) | (&('C' | 'c') (contains ' '* value)))))> */
448 position16, tokenIndex16 := position, tokenIndex
450 position17 := position
452 position18 := position
454 position19 := position
456 position22, tokenIndex22 := position, tokenIndex
458 switch buffer[position] {
460 if buffer[position] != rune('<') {
466 if buffer[position] != rune('>') {
472 if buffer[position] != rune('=') {
478 if buffer[position] != rune('\'') {
484 if buffer[position] != rune('"') {
490 if buffer[position] != rune(')') {
496 if buffer[position] != rune('(') {
502 if buffer[position] != rune('\\') {
508 if buffer[position] != rune('\r') {
514 if buffer[position] != rune('\n') {
520 if buffer[position] != rune('\t') {
526 if buffer[position] != rune(' ') {
536 position, tokenIndex = position22, tokenIndex22
543 position21, tokenIndex21 := position, tokenIndex
545 position24, tokenIndex24 := position, tokenIndex
547 switch buffer[position] {
549 if buffer[position] != rune('<') {
555 if buffer[position] != rune('>') {
561 if buffer[position] != rune('=') {
567 if buffer[position] != rune('\'') {
573 if buffer[position] != rune('"') {
579 if buffer[position] != rune(')') {
585 if buffer[position] != rune('(') {
591 if buffer[position] != rune('\\') {
597 if buffer[position] != rune('\r') {
603 if buffer[position] != rune('\n') {
609 if buffer[position] != rune('\t') {
615 if buffer[position] != rune(' ') {
625 position, tokenIndex = position24, tokenIndex24
632 position, tokenIndex = position21, tokenIndex21
634 add(rulePegText, position19)
636 add(ruletag, position18)
640 position27, tokenIndex27 := position, tokenIndex
641 if buffer[position] != rune(' ') {
647 position, tokenIndex = position27, tokenIndex27
650 position28, tokenIndex28 := position, tokenIndex
652 position30 := position
653 if buffer[position] != rune('<') {
657 if buffer[position] != rune('=') {
661 add(rulele, position30)
665 position32, tokenIndex32 := position, tokenIndex
666 if buffer[position] != rune(' ') {
672 position, tokenIndex = position32, tokenIndex32
675 switch buffer[position] {
677 if !_rules[ruledate]() {
682 if !_rules[ruletime]() {
687 if !_rules[rulenumber]() {
696 position, tokenIndex = position28, tokenIndex28
698 position35 := position
699 if buffer[position] != rune('>') {
703 if buffer[position] != rune('=') {
707 add(rulege, position35)
711 position37, tokenIndex37 := position, tokenIndex
712 if buffer[position] != rune(' ') {
718 position, tokenIndex = position37, tokenIndex37
721 switch buffer[position] {
723 if !_rules[ruledate]() {
728 if !_rules[ruletime]() {
733 if !_rules[rulenumber]() {
742 position, tokenIndex = position28, tokenIndex28
744 switch buffer[position] {
747 position40 := position
748 if buffer[position] != rune('=') {
752 add(ruleequal, position40)
756 position42, tokenIndex42 := position, tokenIndex
757 if buffer[position] != rune(' ') {
763 position, tokenIndex = position42, tokenIndex42
766 switch buffer[position] {
768 if !_rules[rulevalue]() {
773 if !_rules[ruledate]() {
778 if !_rules[ruletime]() {
783 if !_rules[rulenumber]() {
793 position44 := position
794 if buffer[position] != rune('>') {
798 add(ruleg, position44)
802 position46, tokenIndex46 := position, tokenIndex
803 if buffer[position] != rune(' ') {
809 position, tokenIndex = position46, tokenIndex46
812 switch buffer[position] {
814 if !_rules[ruledate]() {
819 if !_rules[ruletime]() {
824 if !_rules[rulenumber]() {
834 position48 := position
835 if buffer[position] != rune('<') {
839 add(rulel, position48)
843 position50, tokenIndex50 := position, tokenIndex
844 if buffer[position] != rune(' ') {
850 position, tokenIndex = position50, tokenIndex50
853 switch buffer[position] {
855 if !_rules[ruledate]() {
860 if !_rules[ruletime]() {
865 if !_rules[rulenumber]() {
875 position52 := position
877 position53, tokenIndex53 := position, tokenIndex
878 if buffer[position] != rune('c') {
884 position, tokenIndex = position53, tokenIndex53
885 if buffer[position] != rune('C') {
892 position55, tokenIndex55 := position, tokenIndex
893 if buffer[position] != rune('o') {
899 position, tokenIndex = position55, tokenIndex55
900 if buffer[position] != rune('O') {
907 position57, tokenIndex57 := position, tokenIndex
908 if buffer[position] != rune('n') {
914 position, tokenIndex = position57, tokenIndex57
915 if buffer[position] != rune('N') {
922 position59, tokenIndex59 := position, tokenIndex
923 if buffer[position] != rune('t') {
929 position, tokenIndex = position59, tokenIndex59
930 if buffer[position] != rune('T') {
937 position61, tokenIndex61 := position, tokenIndex
938 if buffer[position] != rune('a') {
944 position, tokenIndex = position61, tokenIndex61
945 if buffer[position] != rune('A') {
952 position63, tokenIndex63 := position, tokenIndex
953 if buffer[position] != rune('i') {
959 position, tokenIndex = position63, tokenIndex63
960 if buffer[position] != rune('I') {
967 position65, tokenIndex65 := position, tokenIndex
968 if buffer[position] != rune('n') {
974 position, tokenIndex = position65, tokenIndex65
975 if buffer[position] != rune('N') {
982 position67, tokenIndex67 := position, tokenIndex
983 if buffer[position] != rune('s') {
989 position, tokenIndex = position67, tokenIndex67
990 if buffer[position] != rune('S') {
996 add(rulecontains, position52)
1000 position70, tokenIndex70 := position, tokenIndex
1001 if buffer[position] != rune(' ') {
1007 position, tokenIndex = position70, tokenIndex70
1009 if !_rules[rulevalue]() {
1018 add(rulecondition, position17)
1022 position, tokenIndex = position16, tokenIndex16
1025 /* 2 tag <- <<(!((&('<') '<') | (&('>') '>') | (&('=') '=') | (&('\'') '\'') | (&('"') '"') | (&(')') ')') | (&('(') '(') | (&('\\') '\\') | (&('\r') '\r') | (&('\n') '\n') | (&('\t') '\t') | (&(' ') ' ')) .)+>> */
1027 /* 3 value <- <<('\'' (!('"' / '\'') .)* '\'')>> */
1029 position72, tokenIndex72 := position, tokenIndex
1031 position73 := position
1033 position74 := position
1034 if buffer[position] != rune('\'') {
1040 position76, tokenIndex76 := position, tokenIndex
1042 position77, tokenIndex77 := position, tokenIndex
1044 position78, tokenIndex78 := position, tokenIndex
1045 if buffer[position] != rune('"') {
1051 position, tokenIndex = position78, tokenIndex78
1052 if buffer[position] != rune('\'') {
1060 position, tokenIndex = position77, tokenIndex77
1067 position, tokenIndex = position76, tokenIndex76
1069 if buffer[position] != rune('\'') {
1073 add(rulePegText, position74)
1075 add(rulevalue, position73)
1079 position, tokenIndex = position72, tokenIndex72
1082 /* 4 number <- <<('0' / ([1-9] digit* ('.' digit*)?))>> */
1084 position80, tokenIndex80 := position, tokenIndex
1086 position81 := position
1088 position82 := position
1090 position83, tokenIndex83 := position, tokenIndex
1091 if buffer[position] != rune('0') {
1097 position, tokenIndex = position83, tokenIndex83
1098 if c := buffer[position]; c < rune('1') || c > rune('9') {
1104 position86, tokenIndex86 := position, tokenIndex
1105 if !_rules[ruledigit]() {
1110 position, tokenIndex = position86, tokenIndex86
1113 position87, tokenIndex87 := position, tokenIndex
1114 if buffer[position] != rune('.') {
1120 position90, tokenIndex90 := position, tokenIndex
1121 if !_rules[ruledigit]() {
1126 position, tokenIndex = position90, tokenIndex90
1130 position, tokenIndex = position87, tokenIndex87
1135 add(rulePegText, position82)
1137 add(rulenumber, position81)
1141 position, tokenIndex = position80, tokenIndex80
1144 /* 5 digit <- <[0-9]> */
1146 position91, tokenIndex91 := position, tokenIndex
1148 position92 := position
1149 if c := buffer[position]; c < rune('0') || c > rune('9') {
1153 add(ruledigit, position92)
1157 position, tokenIndex = position91, tokenIndex91
1160 /* 6 time <- <(('t' / 'T') ('i' / 'I') ('m' / 'M') ('e' / 'E') ' ' <(year '-' month '-' day 'T' digit digit ':' digit digit ':' digit digit ((('-' / '+') digit digit ':' digit digit) / 'Z'))>)> */
1162 position93, tokenIndex93 := position, tokenIndex
1164 position94 := position
1166 position95, tokenIndex95 := position, tokenIndex
1167 if buffer[position] != rune('t') {
1173 position, tokenIndex = position95, tokenIndex95
1174 if buffer[position] != rune('T') {
1181 position97, tokenIndex97 := position, tokenIndex
1182 if buffer[position] != rune('i') {
1188 position, tokenIndex = position97, tokenIndex97
1189 if buffer[position] != rune('I') {
1196 position99, tokenIndex99 := position, tokenIndex
1197 if buffer[position] != rune('m') {
1203 position, tokenIndex = position99, tokenIndex99
1204 if buffer[position] != rune('M') {
1211 position101, tokenIndex101 := position, tokenIndex
1212 if buffer[position] != rune('e') {
1218 position, tokenIndex = position101, tokenIndex101
1219 if buffer[position] != rune('E') {
1225 if buffer[position] != rune(' ') {
1230 position103 := position
1231 if !_rules[ruleyear]() {
1234 if buffer[position] != rune('-') {
1238 if !_rules[rulemonth]() {
1241 if buffer[position] != rune('-') {
1245 if !_rules[ruleday]() {
1248 if buffer[position] != rune('T') {
1252 if !_rules[ruledigit]() {
1255 if !_rules[ruledigit]() {
1258 if buffer[position] != rune(':') {
1262 if !_rules[ruledigit]() {
1265 if !_rules[ruledigit]() {
1268 if buffer[position] != rune(':') {
1272 if !_rules[ruledigit]() {
1275 if !_rules[ruledigit]() {
1279 position104, tokenIndex104 := position, tokenIndex
1281 position106, tokenIndex106 := position, tokenIndex
1282 if buffer[position] != rune('-') {
1288 position, tokenIndex = position106, tokenIndex106
1289 if buffer[position] != rune('+') {
1295 if !_rules[ruledigit]() {
1298 if !_rules[ruledigit]() {
1301 if buffer[position] != rune(':') {
1305 if !_rules[ruledigit]() {
1308 if !_rules[ruledigit]() {
1313 position, tokenIndex = position104, tokenIndex104
1314 if buffer[position] != rune('Z') {
1320 add(rulePegText, position103)
1322 add(ruletime, position94)
1326 position, tokenIndex = position93, tokenIndex93
1329 /* 7 date <- <(('d' / 'D') ('a' / 'A') ('t' / 'T') ('e' / 'E') ' ' <(year '-' month '-' day)>)> */
1331 position108, tokenIndex108 := position, tokenIndex
1333 position109 := position
1335 position110, tokenIndex110 := position, tokenIndex
1336 if buffer[position] != rune('d') {
1342 position, tokenIndex = position110, tokenIndex110
1343 if buffer[position] != rune('D') {
1350 position112, tokenIndex112 := position, tokenIndex
1351 if buffer[position] != rune('a') {
1357 position, tokenIndex = position112, tokenIndex112
1358 if buffer[position] != rune('A') {
1365 position114, tokenIndex114 := position, tokenIndex
1366 if buffer[position] != rune('t') {
1372 position, tokenIndex = position114, tokenIndex114
1373 if buffer[position] != rune('T') {
1380 position116, tokenIndex116 := position, tokenIndex
1381 if buffer[position] != rune('e') {
1387 position, tokenIndex = position116, tokenIndex116
1388 if buffer[position] != rune('E') {
1394 if buffer[position] != rune(' ') {
1399 position118 := position
1400 if !_rules[ruleyear]() {
1403 if buffer[position] != rune('-') {
1407 if !_rules[rulemonth]() {
1410 if buffer[position] != rune('-') {
1414 if !_rules[ruleday]() {
1417 add(rulePegText, position118)
1419 add(ruledate, position109)
1423 position, tokenIndex = position108, tokenIndex108
1426 /* 8 year <- <(('1' / '2') digit digit digit)> */
1428 position119, tokenIndex119 := position, tokenIndex
1430 position120 := position
1432 position121, tokenIndex121 := position, tokenIndex
1433 if buffer[position] != rune('1') {
1439 position, tokenIndex = position121, tokenIndex121
1440 if buffer[position] != rune('2') {
1446 if !_rules[ruledigit]() {
1449 if !_rules[ruledigit]() {
1452 if !_rules[ruledigit]() {
1455 add(ruleyear, position120)
1459 position, tokenIndex = position119, tokenIndex119
1462 /* 9 month <- <(('0' / '1') digit)> */
1464 position123, tokenIndex123 := position, tokenIndex
1466 position124 := position
1468 position125, tokenIndex125 := position, tokenIndex
1469 if buffer[position] != rune('0') {
1475 position, tokenIndex = position125, tokenIndex125
1476 if buffer[position] != rune('1') {
1482 if !_rules[ruledigit]() {
1485 add(rulemonth, position124)
1489 position, tokenIndex = position123, tokenIndex123
1492 /* 10 day <- <(((&('3') '3') | (&('2') '2') | (&('1') '1') | (&('0') '0')) digit)> */
1494 position127, tokenIndex127 := position, tokenIndex
1496 position128 := position
1498 switch buffer[position] {
1500 if buffer[position] != rune('3') {
1506 if buffer[position] != rune('2') {
1512 if buffer[position] != rune('1') {
1518 if buffer[position] != rune('0') {
1526 if !_rules[ruledigit]() {
1529 add(ruleday, position128)
1533 position, tokenIndex = position127, tokenIndex127
1536 /* 11 and <- <(('a' / 'A') ('n' / 'N') ('d' / 'D'))> */
1538 /* 12 equal <- <'='> */
1540 /* 13 contains <- <(('c' / 'C') ('o' / 'O') ('n' / 'N') ('t' / 'T') ('a' / 'A') ('i' / 'I') ('n' / 'N') ('s' / 'S'))> */
1542 /* 14 le <- <('<' '=')> */
1544 /* 15 ge <- <('>' '=')> */