github.com/supragya/TendermintConnector@v0.0.0-20210619045051-113e32b84fb1/_deprecated_chains/cosmos/libs/pubsub/query/query.peg.go (about)

     1  // nolint
     2  package query
     3  
     4  //go:generate peg -inline -switch query.peg
     5  
     6  import (
     7  	"fmt"
     8  	"math"
     9  	"sort"
    10  	"strconv"
    11  )
    12  
    13  const endSymbol rune = 1114112
    14  
    15  /* The rule types inferred from the grammar are below. */
    16  type pegRule uint8
    17  
    18  const (
    19  	ruleUnknown pegRule = iota
    20  	rulee
    21  	rulecondition
    22  	ruletag
    23  	rulevalue
    24  	rulenumber
    25  	ruledigit
    26  	ruletime
    27  	ruledate
    28  	ruleyear
    29  	rulemonth
    30  	ruleday
    31  	ruleand
    32  	ruleequal
    33  	rulecontains
    34  	rulele
    35  	rulege
    36  	rulel
    37  	ruleg
    38  	rulePegText
    39  )
    40  
    41  var rul3s = [...]string{
    42  	"Unknown",
    43  	"e",
    44  	"condition",
    45  	"tag",
    46  	"value",
    47  	"number",
    48  	"digit",
    49  	"time",
    50  	"date",
    51  	"year",
    52  	"month",
    53  	"day",
    54  	"and",
    55  	"equal",
    56  	"contains",
    57  	"le",
    58  	"ge",
    59  	"l",
    60  	"g",
    61  	"PegText",
    62  }
    63  
    64  type token32 struct {
    65  	pegRule
    66  	begin, end uint32
    67  }
    68  
    69  func (t *token32) String() string {
    70  	return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end)
    71  }
    72  
    73  type node32 struct {
    74  	token32
    75  	up, next *node32
    76  }
    77  
    78  func (node *node32) print(pretty bool, buffer string) {
    79  	var print func(node *node32, depth int)
    80  	print = func(node *node32, depth int) {
    81  		for node != nil {
    82  			for c := 0; c < depth; c++ {
    83  				fmt.Printf(" ")
    84  			}
    85  			rule := rul3s[node.pegRule]
    86  			quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end])))
    87  			if !pretty {
    88  				fmt.Printf("%v %v\n", rule, quote)
    89  			} else {
    90  				fmt.Printf("\x1B[34m%v\x1B[m %v\n", rule, quote)
    91  			}
    92  			if node.up != nil {
    93  				print(node.up, depth+1)
    94  			}
    95  			node = node.next
    96  		}
    97  	}
    98  	print(node, 0)
    99  }
   100  
   101  func (node *node32) Print(buffer string) {
   102  	node.print(false, buffer)
   103  }
   104  
   105  func (node *node32) PrettyPrint(buffer string) {
   106  	node.print(true, buffer)
   107  }
   108  
   109  type tokens32 struct {
   110  	tree []token32
   111  }
   112  
   113  func (t *tokens32) Trim(length uint32) {
   114  	t.tree = t.tree[:length]
   115  }
   116  
   117  func (t *tokens32) Print() {
   118  	for _, token := range t.tree {
   119  		fmt.Println(token.String())
   120  	}
   121  }
   122  
   123  func (t *tokens32) AST() *node32 {
   124  	type element struct {
   125  		node *node32
   126  		down *element
   127  	}
   128  	tokens := t.Tokens()
   129  	var stack *element
   130  	for _, token := range tokens {
   131  		if token.begin == token.end {
   132  			continue
   133  		}
   134  		node := &node32{token32: token}
   135  		for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end {
   136  			stack.node.next = node.up
   137  			node.up = stack.node
   138  			stack = stack.down
   139  		}
   140  		stack = &element{node: node, down: stack}
   141  	}
   142  	if stack != nil {
   143  		return stack.node
   144  	}
   145  	return nil
   146  }
   147  
   148  func (t *tokens32) PrintSyntaxTree(buffer string) {
   149  	t.AST().Print(buffer)
   150  }
   151  
   152  func (t *tokens32) PrettyPrintSyntaxTree(buffer string) {
   153  	t.AST().PrettyPrint(buffer)
   154  }
   155  
   156  func (t *tokens32) Add(rule pegRule, begin, end, index uint32) {
   157  	if tree := t.tree; int(index) >= len(tree) {
   158  		expanded := make([]token32, 2*len(tree))
   159  		copy(expanded, tree)
   160  		t.tree = expanded
   161  	}
   162  	t.tree[index] = token32{
   163  		pegRule: rule,
   164  		begin:   begin,
   165  		end:     end,
   166  	}
   167  }
   168  
   169  func (t *tokens32) Tokens() []token32 {
   170  	return t.tree
   171  }
   172  
   173  type QueryParser struct {
   174  	Buffer string
   175  	buffer []rune
   176  	rules  [20]func() bool
   177  	parse  func(rule ...int) error
   178  	reset  func()
   179  	Pretty bool
   180  	tokens32
   181  }
   182  
   183  func (p *QueryParser) Parse(rule ...int) error {
   184  	return p.parse(rule...)
   185  }
   186  
   187  func (p *QueryParser) Reset() {
   188  	p.reset()
   189  }
   190  
   191  type textPosition struct {
   192  	line, symbol int
   193  }
   194  
   195  type textPositionMap map[int]textPosition
   196  
   197  func translatePositions(buffer []rune, positions []int) textPositionMap {
   198  	length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0
   199  	sort.Ints(positions)
   200  
   201  search:
   202  	for i, c := range buffer {
   203  		if c == '\n' {
   204  			line, symbol = line+1, 0
   205  		} else {
   206  			symbol++
   207  		}
   208  		if i == positions[j] {
   209  			translations[positions[j]] = textPosition{line, symbol}
   210  			for j++; j < length; j++ {
   211  				if i != positions[j] {
   212  					continue search
   213  				}
   214  			}
   215  			break search
   216  		}
   217  	}
   218  
   219  	return translations
   220  }
   221  
   222  type parseError struct {
   223  	p   *QueryParser
   224  	max token32
   225  }
   226  
   227  func (e *parseError) Error() string {
   228  	tokens, error := []token32{e.max}, "\n"
   229  	positions, p := make([]int, 2*len(tokens)), 0
   230  	for _, token := range tokens {
   231  		positions[p], p = int(token.begin), p+1
   232  		positions[p], p = int(token.end), p+1
   233  	}
   234  	translations := translatePositions(e.p.buffer, positions)
   235  	format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n"
   236  	if e.p.Pretty {
   237  		format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n"
   238  	}
   239  	for _, token := range tokens {
   240  		begin, end := int(token.begin), int(token.end)
   241  		error += fmt.Sprintf(format,
   242  			rul3s[token.pegRule],
   243  			translations[begin].line, translations[begin].symbol,
   244  			translations[end].line, translations[end].symbol,
   245  			strconv.Quote(string(e.p.buffer[begin:end])))
   246  	}
   247  
   248  	return error
   249  }
   250  
   251  func (p *QueryParser) PrintSyntaxTree() {
   252  	if p.Pretty {
   253  		p.tokens32.PrettyPrintSyntaxTree(p.Buffer)
   254  	} else {
   255  		p.tokens32.PrintSyntaxTree(p.Buffer)
   256  	}
   257  }
   258  
   259  func (p *QueryParser) Init() {
   260  	var (
   261  		max                  token32
   262  		position, tokenIndex uint32
   263  		buffer               []rune
   264  	)
   265  	p.reset = func() {
   266  		max = token32{}
   267  		position, tokenIndex = 0, 0
   268  
   269  		p.buffer = []rune(p.Buffer)
   270  		if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol {
   271  			p.buffer = append(p.buffer, endSymbol)
   272  		}
   273  		buffer = p.buffer
   274  	}
   275  	p.reset()
   276  
   277  	_rules := p.rules
   278  	tree := tokens32{tree: make([]token32, math.MaxInt16)}
   279  	p.parse = func(rule ...int) error {
   280  		r := 1
   281  		if len(rule) > 0 {
   282  			r = rule[0]
   283  		}
   284  		matches := p.rules[r]()
   285  		p.tokens32 = tree
   286  		if matches {
   287  			p.Trim(tokenIndex)
   288  			return nil
   289  		}
   290  		return &parseError{p, max}
   291  	}
   292  
   293  	add := func(rule pegRule, begin uint32) {
   294  		tree.Add(rule, begin, position, tokenIndex)
   295  		tokenIndex++
   296  		if begin != position && position > max.end {
   297  			max = token32{rule, begin, position}
   298  		}
   299  	}
   300  
   301  	matchDot := func() bool {
   302  		if buffer[position] != endSymbol {
   303  			position++
   304  			return true
   305  		}
   306  		return false
   307  	}
   308  
   309  	/*matchChar := func(c byte) bool {
   310  		if buffer[position] == c {
   311  			position++
   312  			return true
   313  		}
   314  		return false
   315  	}*/
   316  
   317  	/*matchRange := func(lower byte, upper byte) bool {
   318  		if c := buffer[position]; c >= lower && c <= upper {
   319  			position++
   320  			return true
   321  		}
   322  		return false
   323  	}*/
   324  
   325  	_rules = [...]func() bool{
   326  		nil,
   327  		/* 0 e <- <('"' condition (' '+ and ' '+ condition)* '"' !.)> */
   328  		func() bool {
   329  			position0, tokenIndex0 := position, tokenIndex
   330  			{
   331  				position1 := position
   332  				if buffer[position] != rune('"') {
   333  					goto l0
   334  				}
   335  				position++
   336  				if !_rules[rulecondition]() {
   337  					goto l0
   338  				}
   339  			l2:
   340  				{
   341  					position3, tokenIndex3 := position, tokenIndex
   342  					if buffer[position] != rune(' ') {
   343  						goto l3
   344  					}
   345  					position++
   346  				l4:
   347  					{
   348  						position5, tokenIndex5 := position, tokenIndex
   349  						if buffer[position] != rune(' ') {
   350  							goto l5
   351  						}
   352  						position++
   353  						goto l4
   354  					l5:
   355  						position, tokenIndex = position5, tokenIndex5
   356  					}
   357  					{
   358  						position6 := position
   359  						{
   360  							position7, tokenIndex7 := position, tokenIndex
   361  							if buffer[position] != rune('a') {
   362  								goto l8
   363  							}
   364  							position++
   365  							goto l7
   366  						l8:
   367  							position, tokenIndex = position7, tokenIndex7
   368  							if buffer[position] != rune('A') {
   369  								goto l3
   370  							}
   371  							position++
   372  						}
   373  					l7:
   374  						{
   375  							position9, tokenIndex9 := position, tokenIndex
   376  							if buffer[position] != rune('n') {
   377  								goto l10
   378  							}
   379  							position++
   380  							goto l9
   381  						l10:
   382  							position, tokenIndex = position9, tokenIndex9
   383  							if buffer[position] != rune('N') {
   384  								goto l3
   385  							}
   386  							position++
   387  						}
   388  					l9:
   389  						{
   390  							position11, tokenIndex11 := position, tokenIndex
   391  							if buffer[position] != rune('d') {
   392  								goto l12
   393  							}
   394  							position++
   395  							goto l11
   396  						l12:
   397  							position, tokenIndex = position11, tokenIndex11
   398  							if buffer[position] != rune('D') {
   399  								goto l3
   400  							}
   401  							position++
   402  						}
   403  					l11:
   404  						add(ruleand, position6)
   405  					}
   406  					if buffer[position] != rune(' ') {
   407  						goto l3
   408  					}
   409  					position++
   410  				l13:
   411  					{
   412  						position14, tokenIndex14 := position, tokenIndex
   413  						if buffer[position] != rune(' ') {
   414  							goto l14
   415  						}
   416  						position++
   417  						goto l13
   418  					l14:
   419  						position, tokenIndex = position14, tokenIndex14
   420  					}
   421  					if !_rules[rulecondition]() {
   422  						goto l3
   423  					}
   424  					goto l2
   425  				l3:
   426  					position, tokenIndex = position3, tokenIndex3
   427  				}
   428  				if buffer[position] != rune('"') {
   429  					goto l0
   430  				}
   431  				position++
   432  				{
   433  					position15, tokenIndex15 := position, tokenIndex
   434  					if !matchDot() {
   435  						goto l15
   436  					}
   437  					goto l0
   438  				l15:
   439  					position, tokenIndex = position15, tokenIndex15
   440  				}
   441  				add(rulee, position1)
   442  			}
   443  			return true
   444  		l0:
   445  			position, tokenIndex = position0, tokenIndex0
   446  			return false
   447  		},
   448  		/* 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)))))> */
   449  		func() bool {
   450  			position16, tokenIndex16 := position, tokenIndex
   451  			{
   452  				position17 := position
   453  				{
   454  					position18 := position
   455  					{
   456  						position19 := position
   457  						{
   458  							position22, tokenIndex22 := position, tokenIndex
   459  							{
   460  								switch buffer[position] {
   461  								case '<':
   462  									if buffer[position] != rune('<') {
   463  										goto l22
   464  									}
   465  									position++
   466  									break
   467  								case '>':
   468  									if buffer[position] != rune('>') {
   469  										goto l22
   470  									}
   471  									position++
   472  									break
   473  								case '=':
   474  									if buffer[position] != rune('=') {
   475  										goto l22
   476  									}
   477  									position++
   478  									break
   479  								case '\'':
   480  									if buffer[position] != rune('\'') {
   481  										goto l22
   482  									}
   483  									position++
   484  									break
   485  								case '"':
   486  									if buffer[position] != rune('"') {
   487  										goto l22
   488  									}
   489  									position++
   490  									break
   491  								case ')':
   492  									if buffer[position] != rune(')') {
   493  										goto l22
   494  									}
   495  									position++
   496  									break
   497  								case '(':
   498  									if buffer[position] != rune('(') {
   499  										goto l22
   500  									}
   501  									position++
   502  									break
   503  								case '\\':
   504  									if buffer[position] != rune('\\') {
   505  										goto l22
   506  									}
   507  									position++
   508  									break
   509  								case '\r':
   510  									if buffer[position] != rune('\r') {
   511  										goto l22
   512  									}
   513  									position++
   514  									break
   515  								case '\n':
   516  									if buffer[position] != rune('\n') {
   517  										goto l22
   518  									}
   519  									position++
   520  									break
   521  								case '\t':
   522  									if buffer[position] != rune('\t') {
   523  										goto l22
   524  									}
   525  									position++
   526  									break
   527  								default:
   528  									if buffer[position] != rune(' ') {
   529  										goto l22
   530  									}
   531  									position++
   532  									break
   533  								}
   534  							}
   535  
   536  							goto l16
   537  						l22:
   538  							position, tokenIndex = position22, tokenIndex22
   539  						}
   540  						if !matchDot() {
   541  							goto l16
   542  						}
   543  					l20:
   544  						{
   545  							position21, tokenIndex21 := position, tokenIndex
   546  							{
   547  								position24, tokenIndex24 := position, tokenIndex
   548  								{
   549  									switch buffer[position] {
   550  									case '<':
   551  										if buffer[position] != rune('<') {
   552  											goto l24
   553  										}
   554  										position++
   555  										break
   556  									case '>':
   557  										if buffer[position] != rune('>') {
   558  											goto l24
   559  										}
   560  										position++
   561  										break
   562  									case '=':
   563  										if buffer[position] != rune('=') {
   564  											goto l24
   565  										}
   566  										position++
   567  										break
   568  									case '\'':
   569  										if buffer[position] != rune('\'') {
   570  											goto l24
   571  										}
   572  										position++
   573  										break
   574  									case '"':
   575  										if buffer[position] != rune('"') {
   576  											goto l24
   577  										}
   578  										position++
   579  										break
   580  									case ')':
   581  										if buffer[position] != rune(')') {
   582  											goto l24
   583  										}
   584  										position++
   585  										break
   586  									case '(':
   587  										if buffer[position] != rune('(') {
   588  											goto l24
   589  										}
   590  										position++
   591  										break
   592  									case '\\':
   593  										if buffer[position] != rune('\\') {
   594  											goto l24
   595  										}
   596  										position++
   597  										break
   598  									case '\r':
   599  										if buffer[position] != rune('\r') {
   600  											goto l24
   601  										}
   602  										position++
   603  										break
   604  									case '\n':
   605  										if buffer[position] != rune('\n') {
   606  											goto l24
   607  										}
   608  										position++
   609  										break
   610  									case '\t':
   611  										if buffer[position] != rune('\t') {
   612  											goto l24
   613  										}
   614  										position++
   615  										break
   616  									default:
   617  										if buffer[position] != rune(' ') {
   618  											goto l24
   619  										}
   620  										position++
   621  										break
   622  									}
   623  								}
   624  
   625  								goto l21
   626  							l24:
   627  								position, tokenIndex = position24, tokenIndex24
   628  							}
   629  							if !matchDot() {
   630  								goto l21
   631  							}
   632  							goto l20
   633  						l21:
   634  							position, tokenIndex = position21, tokenIndex21
   635  						}
   636  						add(rulePegText, position19)
   637  					}
   638  					add(ruletag, position18)
   639  				}
   640  			l26:
   641  				{
   642  					position27, tokenIndex27 := position, tokenIndex
   643  					if buffer[position] != rune(' ') {
   644  						goto l27
   645  					}
   646  					position++
   647  					goto l26
   648  				l27:
   649  					position, tokenIndex = position27, tokenIndex27
   650  				}
   651  				{
   652  					position28, tokenIndex28 := position, tokenIndex
   653  					{
   654  						position30 := position
   655  						if buffer[position] != rune('<') {
   656  							goto l29
   657  						}
   658  						position++
   659  						if buffer[position] != rune('=') {
   660  							goto l29
   661  						}
   662  						position++
   663  						add(rulele, position30)
   664  					}
   665  				l31:
   666  					{
   667  						position32, tokenIndex32 := position, tokenIndex
   668  						if buffer[position] != rune(' ') {
   669  							goto l32
   670  						}
   671  						position++
   672  						goto l31
   673  					l32:
   674  						position, tokenIndex = position32, tokenIndex32
   675  					}
   676  					{
   677  						switch buffer[position] {
   678  						case 'D', 'd':
   679  							if !_rules[ruledate]() {
   680  								goto l29
   681  							}
   682  							break
   683  						case 'T', 't':
   684  							if !_rules[ruletime]() {
   685  								goto l29
   686  							}
   687  							break
   688  						default:
   689  							if !_rules[rulenumber]() {
   690  								goto l29
   691  							}
   692  							break
   693  						}
   694  					}
   695  
   696  					goto l28
   697  				l29:
   698  					position, tokenIndex = position28, tokenIndex28
   699  					{
   700  						position35 := position
   701  						if buffer[position] != rune('>') {
   702  							goto l34
   703  						}
   704  						position++
   705  						if buffer[position] != rune('=') {
   706  							goto l34
   707  						}
   708  						position++
   709  						add(rulege, position35)
   710  					}
   711  				l36:
   712  					{
   713  						position37, tokenIndex37 := position, tokenIndex
   714  						if buffer[position] != rune(' ') {
   715  							goto l37
   716  						}
   717  						position++
   718  						goto l36
   719  					l37:
   720  						position, tokenIndex = position37, tokenIndex37
   721  					}
   722  					{
   723  						switch buffer[position] {
   724  						case 'D', 'd':
   725  							if !_rules[ruledate]() {
   726  								goto l34
   727  							}
   728  							break
   729  						case 'T', 't':
   730  							if !_rules[ruletime]() {
   731  								goto l34
   732  							}
   733  							break
   734  						default:
   735  							if !_rules[rulenumber]() {
   736  								goto l34
   737  							}
   738  							break
   739  						}
   740  					}
   741  
   742  					goto l28
   743  				l34:
   744  					position, tokenIndex = position28, tokenIndex28
   745  					{
   746  						switch buffer[position] {
   747  						case '=':
   748  							{
   749  								position40 := position
   750  								if buffer[position] != rune('=') {
   751  									goto l16
   752  								}
   753  								position++
   754  								add(ruleequal, position40)
   755  							}
   756  						l41:
   757  							{
   758  								position42, tokenIndex42 := position, tokenIndex
   759  								if buffer[position] != rune(' ') {
   760  									goto l42
   761  								}
   762  								position++
   763  								goto l41
   764  							l42:
   765  								position, tokenIndex = position42, tokenIndex42
   766  							}
   767  							{
   768  								switch buffer[position] {
   769  								case '\'':
   770  									if !_rules[rulevalue]() {
   771  										goto l16
   772  									}
   773  									break
   774  								case 'D', 'd':
   775  									if !_rules[ruledate]() {
   776  										goto l16
   777  									}
   778  									break
   779  								case 'T', 't':
   780  									if !_rules[ruletime]() {
   781  										goto l16
   782  									}
   783  									break
   784  								default:
   785  									if !_rules[rulenumber]() {
   786  										goto l16
   787  									}
   788  									break
   789  								}
   790  							}
   791  
   792  							break
   793  						case '>':
   794  							{
   795  								position44 := position
   796  								if buffer[position] != rune('>') {
   797  									goto l16
   798  								}
   799  								position++
   800  								add(ruleg, position44)
   801  							}
   802  						l45:
   803  							{
   804  								position46, tokenIndex46 := position, tokenIndex
   805  								if buffer[position] != rune(' ') {
   806  									goto l46
   807  								}
   808  								position++
   809  								goto l45
   810  							l46:
   811  								position, tokenIndex = position46, tokenIndex46
   812  							}
   813  							{
   814  								switch buffer[position] {
   815  								case 'D', 'd':
   816  									if !_rules[ruledate]() {
   817  										goto l16
   818  									}
   819  									break
   820  								case 'T', 't':
   821  									if !_rules[ruletime]() {
   822  										goto l16
   823  									}
   824  									break
   825  								default:
   826  									if !_rules[rulenumber]() {
   827  										goto l16
   828  									}
   829  									break
   830  								}
   831  							}
   832  
   833  							break
   834  						case '<':
   835  							{
   836  								position48 := position
   837  								if buffer[position] != rune('<') {
   838  									goto l16
   839  								}
   840  								position++
   841  								add(rulel, position48)
   842  							}
   843  						l49:
   844  							{
   845  								position50, tokenIndex50 := position, tokenIndex
   846  								if buffer[position] != rune(' ') {
   847  									goto l50
   848  								}
   849  								position++
   850  								goto l49
   851  							l50:
   852  								position, tokenIndex = position50, tokenIndex50
   853  							}
   854  							{
   855  								switch buffer[position] {
   856  								case 'D', 'd':
   857  									if !_rules[ruledate]() {
   858  										goto l16
   859  									}
   860  									break
   861  								case 'T', 't':
   862  									if !_rules[ruletime]() {
   863  										goto l16
   864  									}
   865  									break
   866  								default:
   867  									if !_rules[rulenumber]() {
   868  										goto l16
   869  									}
   870  									break
   871  								}
   872  							}
   873  
   874  							break
   875  						default:
   876  							{
   877  								position52 := position
   878  								{
   879  									position53, tokenIndex53 := position, tokenIndex
   880  									if buffer[position] != rune('c') {
   881  										goto l54
   882  									}
   883  									position++
   884  									goto l53
   885  								l54:
   886  									position, tokenIndex = position53, tokenIndex53
   887  									if buffer[position] != rune('C') {
   888  										goto l16
   889  									}
   890  									position++
   891  								}
   892  							l53:
   893  								{
   894  									position55, tokenIndex55 := position, tokenIndex
   895  									if buffer[position] != rune('o') {
   896  										goto l56
   897  									}
   898  									position++
   899  									goto l55
   900  								l56:
   901  									position, tokenIndex = position55, tokenIndex55
   902  									if buffer[position] != rune('O') {
   903  										goto l16
   904  									}
   905  									position++
   906  								}
   907  							l55:
   908  								{
   909  									position57, tokenIndex57 := position, tokenIndex
   910  									if buffer[position] != rune('n') {
   911  										goto l58
   912  									}
   913  									position++
   914  									goto l57
   915  								l58:
   916  									position, tokenIndex = position57, tokenIndex57
   917  									if buffer[position] != rune('N') {
   918  										goto l16
   919  									}
   920  									position++
   921  								}
   922  							l57:
   923  								{
   924  									position59, tokenIndex59 := position, tokenIndex
   925  									if buffer[position] != rune('t') {
   926  										goto l60
   927  									}
   928  									position++
   929  									goto l59
   930  								l60:
   931  									position, tokenIndex = position59, tokenIndex59
   932  									if buffer[position] != rune('T') {
   933  										goto l16
   934  									}
   935  									position++
   936  								}
   937  							l59:
   938  								{
   939  									position61, tokenIndex61 := position, tokenIndex
   940  									if buffer[position] != rune('a') {
   941  										goto l62
   942  									}
   943  									position++
   944  									goto l61
   945  								l62:
   946  									position, tokenIndex = position61, tokenIndex61
   947  									if buffer[position] != rune('A') {
   948  										goto l16
   949  									}
   950  									position++
   951  								}
   952  							l61:
   953  								{
   954  									position63, tokenIndex63 := position, tokenIndex
   955  									if buffer[position] != rune('i') {
   956  										goto l64
   957  									}
   958  									position++
   959  									goto l63
   960  								l64:
   961  									position, tokenIndex = position63, tokenIndex63
   962  									if buffer[position] != rune('I') {
   963  										goto l16
   964  									}
   965  									position++
   966  								}
   967  							l63:
   968  								{
   969  									position65, tokenIndex65 := position, tokenIndex
   970  									if buffer[position] != rune('n') {
   971  										goto l66
   972  									}
   973  									position++
   974  									goto l65
   975  								l66:
   976  									position, tokenIndex = position65, tokenIndex65
   977  									if buffer[position] != rune('N') {
   978  										goto l16
   979  									}
   980  									position++
   981  								}
   982  							l65:
   983  								{
   984  									position67, tokenIndex67 := position, tokenIndex
   985  									if buffer[position] != rune('s') {
   986  										goto l68
   987  									}
   988  									position++
   989  									goto l67
   990  								l68:
   991  									position, tokenIndex = position67, tokenIndex67
   992  									if buffer[position] != rune('S') {
   993  										goto l16
   994  									}
   995  									position++
   996  								}
   997  							l67:
   998  								add(rulecontains, position52)
   999  							}
  1000  						l69:
  1001  							{
  1002  								position70, tokenIndex70 := position, tokenIndex
  1003  								if buffer[position] != rune(' ') {
  1004  									goto l70
  1005  								}
  1006  								position++
  1007  								goto l69
  1008  							l70:
  1009  								position, tokenIndex = position70, tokenIndex70
  1010  							}
  1011  							if !_rules[rulevalue]() {
  1012  								goto l16
  1013  							}
  1014  							break
  1015  						}
  1016  					}
  1017  
  1018  				}
  1019  			l28:
  1020  				add(rulecondition, position17)
  1021  			}
  1022  			return true
  1023  		l16:
  1024  			position, tokenIndex = position16, tokenIndex16
  1025  			return false
  1026  		},
  1027  		/* 2 tag <- <<(!((&('<') '<') | (&('>') '>') | (&('=') '=') | (&('\'') '\'') | (&('"') '"') | (&(')') ')') | (&('(') '(') | (&('\\') '\\') | (&('\r') '\r') | (&('\n') '\n') | (&('\t') '\t') | (&(' ') ' ')) .)+>> */
  1028  		nil,
  1029  		/* 3 value <- <<('\'' (!('"' / '\'') .)* '\'')>> */
  1030  		func() bool {
  1031  			position72, tokenIndex72 := position, tokenIndex
  1032  			{
  1033  				position73 := position
  1034  				{
  1035  					position74 := position
  1036  					if buffer[position] != rune('\'') {
  1037  						goto l72
  1038  					}
  1039  					position++
  1040  				l75:
  1041  					{
  1042  						position76, tokenIndex76 := position, tokenIndex
  1043  						{
  1044  							position77, tokenIndex77 := position, tokenIndex
  1045  							{
  1046  								position78, tokenIndex78 := position, tokenIndex
  1047  								if buffer[position] != rune('"') {
  1048  									goto l79
  1049  								}
  1050  								position++
  1051  								goto l78
  1052  							l79:
  1053  								position, tokenIndex = position78, tokenIndex78
  1054  								if buffer[position] != rune('\'') {
  1055  									goto l77
  1056  								}
  1057  								position++
  1058  							}
  1059  						l78:
  1060  							goto l76
  1061  						l77:
  1062  							position, tokenIndex = position77, tokenIndex77
  1063  						}
  1064  						if !matchDot() {
  1065  							goto l76
  1066  						}
  1067  						goto l75
  1068  					l76:
  1069  						position, tokenIndex = position76, tokenIndex76
  1070  					}
  1071  					if buffer[position] != rune('\'') {
  1072  						goto l72
  1073  					}
  1074  					position++
  1075  					add(rulePegText, position74)
  1076  				}
  1077  				add(rulevalue, position73)
  1078  			}
  1079  			return true
  1080  		l72:
  1081  			position, tokenIndex = position72, tokenIndex72
  1082  			return false
  1083  		},
  1084  		/* 4 number <- <<('0' / ([1-9] digit* ('.' digit*)?))>> */
  1085  		func() bool {
  1086  			position80, tokenIndex80 := position, tokenIndex
  1087  			{
  1088  				position81 := position
  1089  				{
  1090  					position82 := position
  1091  					{
  1092  						position83, tokenIndex83 := position, tokenIndex
  1093  						if buffer[position] != rune('0') {
  1094  							goto l84
  1095  						}
  1096  						position++
  1097  						goto l83
  1098  					l84:
  1099  						position, tokenIndex = position83, tokenIndex83
  1100  						if c := buffer[position]; c < rune('1') || c > rune('9') {
  1101  							goto l80
  1102  						}
  1103  						position++
  1104  					l85:
  1105  						{
  1106  							position86, tokenIndex86 := position, tokenIndex
  1107  							if !_rules[ruledigit]() {
  1108  								goto l86
  1109  							}
  1110  							goto l85
  1111  						l86:
  1112  							position, tokenIndex = position86, tokenIndex86
  1113  						}
  1114  						{
  1115  							position87, tokenIndex87 := position, tokenIndex
  1116  							if buffer[position] != rune('.') {
  1117  								goto l87
  1118  							}
  1119  							position++
  1120  						l89:
  1121  							{
  1122  								position90, tokenIndex90 := position, tokenIndex
  1123  								if !_rules[ruledigit]() {
  1124  									goto l90
  1125  								}
  1126  								goto l89
  1127  							l90:
  1128  								position, tokenIndex = position90, tokenIndex90
  1129  							}
  1130  							goto l88
  1131  						l87:
  1132  							position, tokenIndex = position87, tokenIndex87
  1133  						}
  1134  					l88:
  1135  					}
  1136  				l83:
  1137  					add(rulePegText, position82)
  1138  				}
  1139  				add(rulenumber, position81)
  1140  			}
  1141  			return true
  1142  		l80:
  1143  			position, tokenIndex = position80, tokenIndex80
  1144  			return false
  1145  		},
  1146  		/* 5 digit <- <[0-9]> */
  1147  		func() bool {
  1148  			position91, tokenIndex91 := position, tokenIndex
  1149  			{
  1150  				position92 := position
  1151  				if c := buffer[position]; c < rune('0') || c > rune('9') {
  1152  					goto l91
  1153  				}
  1154  				position++
  1155  				add(ruledigit, position92)
  1156  			}
  1157  			return true
  1158  		l91:
  1159  			position, tokenIndex = position91, tokenIndex91
  1160  			return false
  1161  		},
  1162  		/* 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'))>)> */
  1163  		func() bool {
  1164  			position93, tokenIndex93 := position, tokenIndex
  1165  			{
  1166  				position94 := position
  1167  				{
  1168  					position95, tokenIndex95 := position, tokenIndex
  1169  					if buffer[position] != rune('t') {
  1170  						goto l96
  1171  					}
  1172  					position++
  1173  					goto l95
  1174  				l96:
  1175  					position, tokenIndex = position95, tokenIndex95
  1176  					if buffer[position] != rune('T') {
  1177  						goto l93
  1178  					}
  1179  					position++
  1180  				}
  1181  			l95:
  1182  				{
  1183  					position97, tokenIndex97 := position, tokenIndex
  1184  					if buffer[position] != rune('i') {
  1185  						goto l98
  1186  					}
  1187  					position++
  1188  					goto l97
  1189  				l98:
  1190  					position, tokenIndex = position97, tokenIndex97
  1191  					if buffer[position] != rune('I') {
  1192  						goto l93
  1193  					}
  1194  					position++
  1195  				}
  1196  			l97:
  1197  				{
  1198  					position99, tokenIndex99 := position, tokenIndex
  1199  					if buffer[position] != rune('m') {
  1200  						goto l100
  1201  					}
  1202  					position++
  1203  					goto l99
  1204  				l100:
  1205  					position, tokenIndex = position99, tokenIndex99
  1206  					if buffer[position] != rune('M') {
  1207  						goto l93
  1208  					}
  1209  					position++
  1210  				}
  1211  			l99:
  1212  				{
  1213  					position101, tokenIndex101 := position, tokenIndex
  1214  					if buffer[position] != rune('e') {
  1215  						goto l102
  1216  					}
  1217  					position++
  1218  					goto l101
  1219  				l102:
  1220  					position, tokenIndex = position101, tokenIndex101
  1221  					if buffer[position] != rune('E') {
  1222  						goto l93
  1223  					}
  1224  					position++
  1225  				}
  1226  			l101:
  1227  				if buffer[position] != rune(' ') {
  1228  					goto l93
  1229  				}
  1230  				position++
  1231  				{
  1232  					position103 := position
  1233  					if !_rules[ruleyear]() {
  1234  						goto l93
  1235  					}
  1236  					if buffer[position] != rune('-') {
  1237  						goto l93
  1238  					}
  1239  					position++
  1240  					if !_rules[rulemonth]() {
  1241  						goto l93
  1242  					}
  1243  					if buffer[position] != rune('-') {
  1244  						goto l93
  1245  					}
  1246  					position++
  1247  					if !_rules[ruleday]() {
  1248  						goto l93
  1249  					}
  1250  					if buffer[position] != rune('T') {
  1251  						goto l93
  1252  					}
  1253  					position++
  1254  					if !_rules[ruledigit]() {
  1255  						goto l93
  1256  					}
  1257  					if !_rules[ruledigit]() {
  1258  						goto l93
  1259  					}
  1260  					if buffer[position] != rune(':') {
  1261  						goto l93
  1262  					}
  1263  					position++
  1264  					if !_rules[ruledigit]() {
  1265  						goto l93
  1266  					}
  1267  					if !_rules[ruledigit]() {
  1268  						goto l93
  1269  					}
  1270  					if buffer[position] != rune(':') {
  1271  						goto l93
  1272  					}
  1273  					position++
  1274  					if !_rules[ruledigit]() {
  1275  						goto l93
  1276  					}
  1277  					if !_rules[ruledigit]() {
  1278  						goto l93
  1279  					}
  1280  					{
  1281  						position104, tokenIndex104 := position, tokenIndex
  1282  						{
  1283  							position106, tokenIndex106 := position, tokenIndex
  1284  							if buffer[position] != rune('-') {
  1285  								goto l107
  1286  							}
  1287  							position++
  1288  							goto l106
  1289  						l107:
  1290  							position, tokenIndex = position106, tokenIndex106
  1291  							if buffer[position] != rune('+') {
  1292  								goto l105
  1293  							}
  1294  							position++
  1295  						}
  1296  					l106:
  1297  						if !_rules[ruledigit]() {
  1298  							goto l105
  1299  						}
  1300  						if !_rules[ruledigit]() {
  1301  							goto l105
  1302  						}
  1303  						if buffer[position] != rune(':') {
  1304  							goto l105
  1305  						}
  1306  						position++
  1307  						if !_rules[ruledigit]() {
  1308  							goto l105
  1309  						}
  1310  						if !_rules[ruledigit]() {
  1311  							goto l105
  1312  						}
  1313  						goto l104
  1314  					l105:
  1315  						position, tokenIndex = position104, tokenIndex104
  1316  						if buffer[position] != rune('Z') {
  1317  							goto l93
  1318  						}
  1319  						position++
  1320  					}
  1321  				l104:
  1322  					add(rulePegText, position103)
  1323  				}
  1324  				add(ruletime, position94)
  1325  			}
  1326  			return true
  1327  		l93:
  1328  			position, tokenIndex = position93, tokenIndex93
  1329  			return false
  1330  		},
  1331  		/* 7 date <- <(('d' / 'D') ('a' / 'A') ('t' / 'T') ('e' / 'E') ' ' <(year '-' month '-' day)>)> */
  1332  		func() bool {
  1333  			position108, tokenIndex108 := position, tokenIndex
  1334  			{
  1335  				position109 := position
  1336  				{
  1337  					position110, tokenIndex110 := position, tokenIndex
  1338  					if buffer[position] != rune('d') {
  1339  						goto l111
  1340  					}
  1341  					position++
  1342  					goto l110
  1343  				l111:
  1344  					position, tokenIndex = position110, tokenIndex110
  1345  					if buffer[position] != rune('D') {
  1346  						goto l108
  1347  					}
  1348  					position++
  1349  				}
  1350  			l110:
  1351  				{
  1352  					position112, tokenIndex112 := position, tokenIndex
  1353  					if buffer[position] != rune('a') {
  1354  						goto l113
  1355  					}
  1356  					position++
  1357  					goto l112
  1358  				l113:
  1359  					position, tokenIndex = position112, tokenIndex112
  1360  					if buffer[position] != rune('A') {
  1361  						goto l108
  1362  					}
  1363  					position++
  1364  				}
  1365  			l112:
  1366  				{
  1367  					position114, tokenIndex114 := position, tokenIndex
  1368  					if buffer[position] != rune('t') {
  1369  						goto l115
  1370  					}
  1371  					position++
  1372  					goto l114
  1373  				l115:
  1374  					position, tokenIndex = position114, tokenIndex114
  1375  					if buffer[position] != rune('T') {
  1376  						goto l108
  1377  					}
  1378  					position++
  1379  				}
  1380  			l114:
  1381  				{
  1382  					position116, tokenIndex116 := position, tokenIndex
  1383  					if buffer[position] != rune('e') {
  1384  						goto l117
  1385  					}
  1386  					position++
  1387  					goto l116
  1388  				l117:
  1389  					position, tokenIndex = position116, tokenIndex116
  1390  					if buffer[position] != rune('E') {
  1391  						goto l108
  1392  					}
  1393  					position++
  1394  				}
  1395  			l116:
  1396  				if buffer[position] != rune(' ') {
  1397  					goto l108
  1398  				}
  1399  				position++
  1400  				{
  1401  					position118 := position
  1402  					if !_rules[ruleyear]() {
  1403  						goto l108
  1404  					}
  1405  					if buffer[position] != rune('-') {
  1406  						goto l108
  1407  					}
  1408  					position++
  1409  					if !_rules[rulemonth]() {
  1410  						goto l108
  1411  					}
  1412  					if buffer[position] != rune('-') {
  1413  						goto l108
  1414  					}
  1415  					position++
  1416  					if !_rules[ruleday]() {
  1417  						goto l108
  1418  					}
  1419  					add(rulePegText, position118)
  1420  				}
  1421  				add(ruledate, position109)
  1422  			}
  1423  			return true
  1424  		l108:
  1425  			position, tokenIndex = position108, tokenIndex108
  1426  			return false
  1427  		},
  1428  		/* 8 year <- <(('1' / '2') digit digit digit)> */
  1429  		func() bool {
  1430  			position119, tokenIndex119 := position, tokenIndex
  1431  			{
  1432  				position120 := position
  1433  				{
  1434  					position121, tokenIndex121 := position, tokenIndex
  1435  					if buffer[position] != rune('1') {
  1436  						goto l122
  1437  					}
  1438  					position++
  1439  					goto l121
  1440  				l122:
  1441  					position, tokenIndex = position121, tokenIndex121
  1442  					if buffer[position] != rune('2') {
  1443  						goto l119
  1444  					}
  1445  					position++
  1446  				}
  1447  			l121:
  1448  				if !_rules[ruledigit]() {
  1449  					goto l119
  1450  				}
  1451  				if !_rules[ruledigit]() {
  1452  					goto l119
  1453  				}
  1454  				if !_rules[ruledigit]() {
  1455  					goto l119
  1456  				}
  1457  				add(ruleyear, position120)
  1458  			}
  1459  			return true
  1460  		l119:
  1461  			position, tokenIndex = position119, tokenIndex119
  1462  			return false
  1463  		},
  1464  		/* 9 month <- <(('0' / '1') digit)> */
  1465  		func() bool {
  1466  			position123, tokenIndex123 := position, tokenIndex
  1467  			{
  1468  				position124 := position
  1469  				{
  1470  					position125, tokenIndex125 := position, tokenIndex
  1471  					if buffer[position] != rune('0') {
  1472  						goto l126
  1473  					}
  1474  					position++
  1475  					goto l125
  1476  				l126:
  1477  					position, tokenIndex = position125, tokenIndex125
  1478  					if buffer[position] != rune('1') {
  1479  						goto l123
  1480  					}
  1481  					position++
  1482  				}
  1483  			l125:
  1484  				if !_rules[ruledigit]() {
  1485  					goto l123
  1486  				}
  1487  				add(rulemonth, position124)
  1488  			}
  1489  			return true
  1490  		l123:
  1491  			position, tokenIndex = position123, tokenIndex123
  1492  			return false
  1493  		},
  1494  		/* 10 day <- <(((&('3') '3') | (&('2') '2') | (&('1') '1') | (&('0') '0')) digit)> */
  1495  		func() bool {
  1496  			position127, tokenIndex127 := position, tokenIndex
  1497  			{
  1498  				position128 := position
  1499  				{
  1500  					switch buffer[position] {
  1501  					case '3':
  1502  						if buffer[position] != rune('3') {
  1503  							goto l127
  1504  						}
  1505  						position++
  1506  						break
  1507  					case '2':
  1508  						if buffer[position] != rune('2') {
  1509  							goto l127
  1510  						}
  1511  						position++
  1512  						break
  1513  					case '1':
  1514  						if buffer[position] != rune('1') {
  1515  							goto l127
  1516  						}
  1517  						position++
  1518  						break
  1519  					default:
  1520  						if buffer[position] != rune('0') {
  1521  							goto l127
  1522  						}
  1523  						position++
  1524  						break
  1525  					}
  1526  				}
  1527  
  1528  				if !_rules[ruledigit]() {
  1529  					goto l127
  1530  				}
  1531  				add(ruleday, position128)
  1532  			}
  1533  			return true
  1534  		l127:
  1535  			position, tokenIndex = position127, tokenIndex127
  1536  			return false
  1537  		},
  1538  		/* 11 and <- <(('a' / 'A') ('n' / 'N') ('d' / 'D'))> */
  1539  		nil,
  1540  		/* 12 equal <- <'='> */
  1541  		nil,
  1542  		/* 13 contains <- <(('c' / 'C') ('o' / 'O') ('n' / 'N') ('t' / 'T') ('a' / 'A') ('i' / 'I') ('n' / 'N') ('s' / 'S'))> */
  1543  		nil,
  1544  		/* 14 le <- <('<' '=')> */
  1545  		nil,
  1546  		/* 15 ge <- <('>' '=')> */
  1547  		nil,
  1548  		/* 16 l <- <'<'> */
  1549  		nil,
  1550  		/* 17 g <- <'>'> */
  1551  		nil,
  1552  		nil,
  1553  	}
  1554  	p.rules = _rules
  1555  }