github.com/orteth01/up@v0.2.0/internal/logs/parser/grammar.peg.go (about)

     1  package parser
     2  
     3  import (
     4  	"github.com/apex/up/internal/logs/parser/ast"
     5  	"fmt"
     6  	"math"
     7  	"sort"
     8  	"strconv"
     9  )
    10  
    11  const endSymbol rune = 1114112
    12  
    13  /* The rule types inferred from the grammar are below. */
    14  type pegRule uint8
    15  
    16  const (
    17  	ruleUnknown pegRule = iota
    18  	ruleQuery
    19  	rulePrimaryExpr
    20  	ruleTupleExpr
    21  	ruleInExpr
    22  	ruleNotInExpr
    23  	rulePostfixExpr
    24  	ruleUnaryExpr
    25  	ruleRelationalExpr
    26  	ruleEqualityExpr
    27  	ruleLogicalAndExpr
    28  	ruleLogicalOrExpr
    29  	ruleLowNotExpr
    30  	ruleExpr
    31  	ruleString
    32  	ruleStringChar
    33  	ruleEscape
    34  	ruleSimpleEscape
    35  	ruleOctalEscape
    36  	ruleHexEscape
    37  	ruleUniversalCharacter
    38  	ruleHexQuad
    39  	ruleHexDigit
    40  	ruleNumber
    41  	ruleInteger
    42  	ruleFloat
    43  	ruleFraction
    44  	ruleExponent
    45  	ruleId
    46  	ruleIdChar
    47  	ruleIdCharNoDigit
    48  	ruleSeverity
    49  	ruleIN
    50  	ruleOR
    51  	ruleAND
    52  	ruleNOT
    53  	ruleCONTAINS
    54  	ruleDEBUG
    55  	ruleINFO
    56  	ruleWARN
    57  	ruleERROR
    58  	ruleFATAL
    59  	ruleKeyword
    60  	ruleEQ
    61  	ruleLBRK
    62  	ruleRBRK
    63  	ruleLPAR
    64  	ruleRPAR
    65  	ruleDOT
    66  	ruleBANG
    67  	ruleLT
    68  	ruleGT
    69  	ruleLE
    70  	ruleEQEQ
    71  	ruleGE
    72  	ruleNE
    73  	ruleANDAND
    74  	ruleOROR
    75  	ruleCOMMA
    76  	rule_
    77  	ruleWhitespace
    78  	ruleEOL
    79  	ruleEOF
    80  	ruleAction0
    81  	ruleAction1
    82  	ruleAction2
    83  	ruleAction3
    84  	ruleAction4
    85  	ruleAction5
    86  	ruleAction6
    87  	ruleAction7
    88  	ruleAction8
    89  	ruleAction9
    90  	ruleAction10
    91  	ruleAction11
    92  	ruleAction12
    93  	ruleAction13
    94  	ruleAction14
    95  	ruleAction15
    96  	ruleAction16
    97  	ruleAction17
    98  	ruleAction18
    99  	ruleAction19
   100  	ruleAction20
   101  	ruleAction21
   102  	ruleAction22
   103  	ruleAction23
   104  	ruleAction24
   105  	ruleAction25
   106  	ruleAction26
   107  	ruleAction27
   108  	rulePegText
   109  )
   110  
   111  var rul3s = [...]string{
   112  	"Unknown",
   113  	"Query",
   114  	"PrimaryExpr",
   115  	"TupleExpr",
   116  	"InExpr",
   117  	"NotInExpr",
   118  	"PostfixExpr",
   119  	"UnaryExpr",
   120  	"RelationalExpr",
   121  	"EqualityExpr",
   122  	"LogicalAndExpr",
   123  	"LogicalOrExpr",
   124  	"LowNotExpr",
   125  	"Expr",
   126  	"String",
   127  	"StringChar",
   128  	"Escape",
   129  	"SimpleEscape",
   130  	"OctalEscape",
   131  	"HexEscape",
   132  	"UniversalCharacter",
   133  	"HexQuad",
   134  	"HexDigit",
   135  	"Number",
   136  	"Integer",
   137  	"Float",
   138  	"Fraction",
   139  	"Exponent",
   140  	"Id",
   141  	"IdChar",
   142  	"IdCharNoDigit",
   143  	"Severity",
   144  	"IN",
   145  	"OR",
   146  	"AND",
   147  	"NOT",
   148  	"CONTAINS",
   149  	"DEBUG",
   150  	"INFO",
   151  	"WARN",
   152  	"ERROR",
   153  	"FATAL",
   154  	"Keyword",
   155  	"EQ",
   156  	"LBRK",
   157  	"RBRK",
   158  	"LPAR",
   159  	"RPAR",
   160  	"DOT",
   161  	"BANG",
   162  	"LT",
   163  	"GT",
   164  	"LE",
   165  	"EQEQ",
   166  	"GE",
   167  	"NE",
   168  	"ANDAND",
   169  	"OROR",
   170  	"COMMA",
   171  	"_",
   172  	"Whitespace",
   173  	"EOL",
   174  	"EOF",
   175  	"Action0",
   176  	"Action1",
   177  	"Action2",
   178  	"Action3",
   179  	"Action4",
   180  	"Action5",
   181  	"Action6",
   182  	"Action7",
   183  	"Action8",
   184  	"Action9",
   185  	"Action10",
   186  	"Action11",
   187  	"Action12",
   188  	"Action13",
   189  	"Action14",
   190  	"Action15",
   191  	"Action16",
   192  	"Action17",
   193  	"Action18",
   194  	"Action19",
   195  	"Action20",
   196  	"Action21",
   197  	"Action22",
   198  	"Action23",
   199  	"Action24",
   200  	"Action25",
   201  	"Action26",
   202  	"Action27",
   203  	"PegText",
   204  }
   205  
   206  type token32 struct {
   207  	pegRule
   208  	begin, end uint32
   209  }
   210  
   211  func (t *token32) String() string {
   212  	return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end)
   213  }
   214  
   215  type node32 struct {
   216  	token32
   217  	up, next *node32
   218  }
   219  
   220  func (node *node32) print(pretty bool, buffer string) {
   221  	var print func(node *node32, depth int)
   222  	print = func(node *node32, depth int) {
   223  		for node != nil {
   224  			for c := 0; c < depth; c++ {
   225  				fmt.Printf(" ")
   226  			}
   227  			rule := rul3s[node.pegRule]
   228  			quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end])))
   229  			if !pretty {
   230  				fmt.Printf("%v %v\n", rule, quote)
   231  			} else {
   232  				fmt.Printf("\x1B[34m%v\x1B[m %v\n", rule, quote)
   233  			}
   234  			if node.up != nil {
   235  				print(node.up, depth+1)
   236  			}
   237  			node = node.next
   238  		}
   239  	}
   240  	print(node, 0)
   241  }
   242  
   243  func (node *node32) Print(buffer string) {
   244  	node.print(false, buffer)
   245  }
   246  
   247  func (node *node32) PrettyPrint(buffer string) {
   248  	node.print(true, buffer)
   249  }
   250  
   251  type tokens32 struct {
   252  	tree []token32
   253  }
   254  
   255  func (t *tokens32) Trim(length uint32) {
   256  	t.tree = t.tree[:length]
   257  }
   258  
   259  func (t *tokens32) Print() {
   260  	for _, token := range t.tree {
   261  		fmt.Println(token.String())
   262  	}
   263  }
   264  
   265  func (t *tokens32) AST() *node32 {
   266  	type element struct {
   267  		node *node32
   268  		down *element
   269  	}
   270  	tokens := t.Tokens()
   271  	var stack *element
   272  	for _, token := range tokens {
   273  		if token.begin == token.end {
   274  			continue
   275  		}
   276  		node := &node32{token32: token}
   277  		for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end {
   278  			stack.node.next = node.up
   279  			node.up = stack.node
   280  			stack = stack.down
   281  		}
   282  		stack = &element{node: node, down: stack}
   283  	}
   284  	if stack != nil {
   285  		return stack.node
   286  	}
   287  	return nil
   288  }
   289  
   290  func (t *tokens32) PrintSyntaxTree(buffer string) {
   291  	t.AST().Print(buffer)
   292  }
   293  
   294  func (t *tokens32) PrettyPrintSyntaxTree(buffer string) {
   295  	t.AST().PrettyPrint(buffer)
   296  }
   297  
   298  func (t *tokens32) Add(rule pegRule, begin, end, index uint32) {
   299  	if tree := t.tree; int(index) >= len(tree) {
   300  		expanded := make([]token32, 2*len(tree))
   301  		copy(expanded, tree)
   302  		t.tree = expanded
   303  	}
   304  	t.tree[index] = token32{
   305  		pegRule: rule,
   306  		begin:   begin,
   307  		end:     end,
   308  	}
   309  }
   310  
   311  func (t *tokens32) Tokens() []token32 {
   312  	return t.tree
   313  }
   314  
   315  type parser struct {
   316  	stack []ast.Node
   317  
   318  	Buffer string
   319  	buffer []rune
   320  	rules  [92]func() bool
   321  	parse  func(rule ...int) error
   322  	reset  func()
   323  	Pretty bool
   324  	tokens32
   325  }
   326  
   327  func (p *parser) Parse(rule ...int) error {
   328  	return p.parse(rule...)
   329  }
   330  
   331  func (p *parser) Reset() {
   332  	p.reset()
   333  }
   334  
   335  type textPosition struct {
   336  	line, symbol int
   337  }
   338  
   339  type textPositionMap map[int]textPosition
   340  
   341  func translatePositions(buffer []rune, positions []int) textPositionMap {
   342  	length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0
   343  	sort.Ints(positions)
   344  
   345  search:
   346  	for i, c := range buffer {
   347  		if c == '\n' {
   348  			line, symbol = line+1, 0
   349  		} else {
   350  			symbol++
   351  		}
   352  		if i == positions[j] {
   353  			translations[positions[j]] = textPosition{line, symbol}
   354  			for j++; j < length; j++ {
   355  				if i != positions[j] {
   356  					continue search
   357  				}
   358  			}
   359  			break search
   360  		}
   361  	}
   362  
   363  	return translations
   364  }
   365  
   366  type parseError struct {
   367  	p   *parser
   368  	max token32
   369  }
   370  
   371  func (e *parseError) Error() string {
   372  	tokens, error := []token32{e.max}, "\n"
   373  	positions, p := make([]int, 2*len(tokens)), 0
   374  	for _, token := range tokens {
   375  		positions[p], p = int(token.begin), p+1
   376  		positions[p], p = int(token.end), p+1
   377  	}
   378  	translations := translatePositions(e.p.buffer, positions)
   379  	format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n"
   380  	if e.p.Pretty {
   381  		format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n"
   382  	}
   383  	for _, token := range tokens {
   384  		begin, end := int(token.begin), int(token.end)
   385  		error += fmt.Sprintf(format,
   386  			rul3s[token.pegRule],
   387  			translations[begin].line, translations[begin].symbol,
   388  			translations[end].line, translations[end].symbol,
   389  			strconv.Quote(string(e.p.buffer[begin:end])))
   390  	}
   391  
   392  	return error
   393  }
   394  
   395  func (p *parser) PrintSyntaxTree() {
   396  	if p.Pretty {
   397  		p.tokens32.PrettyPrintSyntaxTree(p.Buffer)
   398  	} else {
   399  		p.tokens32.PrintSyntaxTree(p.Buffer)
   400  	}
   401  }
   402  
   403  func (p *parser) Execute() {
   404  	buffer, _buffer, text, begin, end := p.Buffer, p.buffer, "", 0, 0
   405  	for _, token := range p.Tokens() {
   406  		switch token.pegRule {
   407  
   408  		case rulePegText:
   409  			begin, end = int(token.begin), int(token.end)
   410  			text = string(_buffer[begin:end])
   411  
   412  		case ruleAction0:
   413  			p.AddNumber(text)
   414  		case ruleAction1:
   415  			p.AddLevel(text)
   416  		case ruleAction2:
   417  			p.AddField(text)
   418  		case ruleAction3:
   419  			p.AddString(text)
   420  		case ruleAction4:
   421  			p.AddExpr()
   422  		case ruleAction5:
   423  			p.AddTupleValue()
   424  		case ruleAction6:
   425  			p.AddTupleValue()
   426  		case ruleAction7:
   427  			p.AddTuple()
   428  		case ruleAction8:
   429  			p.AddBinary(ast.IN)
   430  		case ruleAction9:
   431  			p.AddTuple()
   432  		case ruleAction10:
   433  			p.AddBinary(ast.IN)
   434  			p.AddUnary(ast.LNOT)
   435  		case ruleAction11:
   436  			p.AddMember(text)
   437  		case ruleAction12:
   438  			p.AddSubscript(text)
   439  		case ruleAction13:
   440  			p.AddUnary(ast.NOT)
   441  		case ruleAction14:
   442  			p.AddBinary(ast.GE)
   443  		case ruleAction15:
   444  			p.AddBinary(ast.GT)
   445  		case ruleAction16:
   446  			p.AddBinary(ast.LE)
   447  		case ruleAction17:
   448  			p.AddBinary(ast.LT)
   449  		case ruleAction18:
   450  			p.AddBinary(ast.EQ)
   451  		case ruleAction19:
   452  			p.AddBinary(ast.NE)
   453  		case ruleAction20:
   454  			p.AddBinary(ast.EQ)
   455  		case ruleAction21:
   456  			p.AddBinaryContains()
   457  		case ruleAction22:
   458  			p.AddBinary(ast.AND)
   459  		case ruleAction23:
   460  			p.AddBinary(ast.AND)
   461  		case ruleAction24:
   462  			p.AddBinary(ast.AND)
   463  		case ruleAction25:
   464  			p.AddBinary(ast.OR)
   465  		case ruleAction26:
   466  			p.AddBinary(ast.OR)
   467  		case ruleAction27:
   468  			p.AddUnary(ast.LNOT)
   469  
   470  		}
   471  	}
   472  	_, _, _, _, _ = buffer, _buffer, text, begin, end
   473  }
   474  
   475  func (p *parser) Init() {
   476  	var (
   477  		max                  token32
   478  		position, tokenIndex uint32
   479  		buffer               []rune
   480  	)
   481  	p.reset = func() {
   482  		max = token32{}
   483  		position, tokenIndex = 0, 0
   484  
   485  		p.buffer = []rune(p.Buffer)
   486  		if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol {
   487  			p.buffer = append(p.buffer, endSymbol)
   488  		}
   489  		buffer = p.buffer
   490  	}
   491  	p.reset()
   492  
   493  	_rules := p.rules
   494  	tree := tokens32{tree: make([]token32, math.MaxInt16)}
   495  	p.parse = func(rule ...int) error {
   496  		r := 1
   497  		if len(rule) > 0 {
   498  			r = rule[0]
   499  		}
   500  		matches := p.rules[r]()
   501  		p.tokens32 = tree
   502  		if matches {
   503  			p.Trim(tokenIndex)
   504  			return nil
   505  		}
   506  		return &parseError{p, max}
   507  	}
   508  
   509  	add := func(rule pegRule, begin uint32) {
   510  		tree.Add(rule, begin, position, tokenIndex)
   511  		tokenIndex++
   512  		if begin != position && position > max.end {
   513  			max = token32{rule, begin, position}
   514  		}
   515  	}
   516  
   517  	matchDot := func() bool {
   518  		if buffer[position] != endSymbol {
   519  			position++
   520  			return true
   521  		}
   522  		return false
   523  	}
   524  
   525  	/*matchChar := func(c byte) bool {
   526  		if buffer[position] == c {
   527  			position++
   528  			return true
   529  		}
   530  		return false
   531  	}*/
   532  
   533  	/*matchRange := func(lower byte, upper byte) bool {
   534  		if c := buffer[position]; c >= lower && c <= upper {
   535  			position++
   536  			return true
   537  		}
   538  		return false
   539  	}*/
   540  
   541  	_rules = [...]func() bool{
   542  		nil,
   543  		/* 0 Query <- <(_ Expr _ EOF)> */
   544  		func() bool {
   545  			position0, tokenIndex0 := position, tokenIndex
   546  			{
   547  				position1 := position
   548  				if !_rules[rule_]() {
   549  					goto l0
   550  				}
   551  				if !_rules[ruleExpr]() {
   552  					goto l0
   553  				}
   554  				if !_rules[rule_]() {
   555  					goto l0
   556  				}
   557  				{
   558  					position2 := position
   559  					{
   560  						position3, tokenIndex3 := position, tokenIndex
   561  						if !matchDot() {
   562  							goto l3
   563  						}
   564  						goto l0
   565  					l3:
   566  						position, tokenIndex = position3, tokenIndex3
   567  					}
   568  					add(ruleEOF, position2)
   569  				}
   570  				add(ruleQuery, position1)
   571  			}
   572  			return true
   573  		l0:
   574  			position, tokenIndex = position0, tokenIndex0
   575  			return false
   576  		},
   577  		/* 1 PrimaryExpr <- <((Severity Action1) / ((&('(') (LPAR Expr RPAR Action4)) | (&('"') (String Action3)) | (&('\t' | '\n' | '\r' | ' ' | '.' | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') (Number Action0)) | (&('A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z' | '_' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z') (Id Action2))))> */
   578  		nil,
   579  		/* 2 TupleExpr <- <(LPAR Expr Action5 (COMMA Expr Action6)* RPAR)> */
   580  		func() bool {
   581  			position5, tokenIndex5 := position, tokenIndex
   582  			{
   583  				position6 := position
   584  				if !_rules[ruleLPAR]() {
   585  					goto l5
   586  				}
   587  				if !_rules[ruleExpr]() {
   588  					goto l5
   589  				}
   590  				{
   591  					add(ruleAction5, position)
   592  				}
   593  			l8:
   594  				{
   595  					position9, tokenIndex9 := position, tokenIndex
   596  					{
   597  						position10 := position
   598  						if buffer[position] != rune(',') {
   599  							goto l9
   600  						}
   601  						position++
   602  						if !_rules[rule_]() {
   603  							goto l9
   604  						}
   605  						add(ruleCOMMA, position10)
   606  					}
   607  					if !_rules[ruleExpr]() {
   608  						goto l9
   609  					}
   610  					{
   611  						add(ruleAction6, position)
   612  					}
   613  					goto l8
   614  				l9:
   615  					position, tokenIndex = position9, tokenIndex9
   616  				}
   617  				if !_rules[ruleRPAR]() {
   618  					goto l5
   619  				}
   620  				add(ruleTupleExpr, position6)
   621  			}
   622  			return true
   623  		l5:
   624  			position, tokenIndex = position5, tokenIndex5
   625  			return false
   626  		},
   627  		/* 3 InExpr <- <(IN Action7 TupleExpr Action8)> */
   628  		nil,
   629  		/* 4 NotInExpr <- <(NOT IN Action9 TupleExpr Action10)> */
   630  		nil,
   631  		/* 5 PostfixExpr <- <(PrimaryExpr ((&('n') NotInExpr) | (&('i') InExpr) | (&('[') (LBRK Number RBRK Action12)) | (&('.') (DOT Id Action11)))*)> */
   632  		nil,
   633  		/* 6 UnaryExpr <- <(PostfixExpr / (BANG RelationalExpr Action13))> */
   634  		func() bool {
   635  			position15, tokenIndex15 := position, tokenIndex
   636  			{
   637  				position16 := position
   638  				{
   639  					position17, tokenIndex17 := position, tokenIndex
   640  					{
   641  						position19 := position
   642  						{
   643  							position20 := position
   644  							{
   645  								position21, tokenIndex21 := position, tokenIndex
   646  								{
   647  									position23 := position
   648  									{
   649  										switch buffer[position] {
   650  										case 'f':
   651  											{
   652  												position25 := position
   653  												{
   654  													position26 := position
   655  													if buffer[position] != rune('f') {
   656  														goto l22
   657  													}
   658  													position++
   659  													if buffer[position] != rune('a') {
   660  														goto l22
   661  													}
   662  													position++
   663  													if buffer[position] != rune('t') {
   664  														goto l22
   665  													}
   666  													position++
   667  													if buffer[position] != rune('a') {
   668  														goto l22
   669  													}
   670  													position++
   671  													if buffer[position] != rune('l') {
   672  														goto l22
   673  													}
   674  													position++
   675  													add(rulePegText, position26)
   676  												}
   677  												{
   678  													position27, tokenIndex27 := position, tokenIndex
   679  													if !_rules[ruleIdChar]() {
   680  														goto l27
   681  													}
   682  													goto l22
   683  												l27:
   684  													position, tokenIndex = position27, tokenIndex27
   685  												}
   686  												if !_rules[rule_]() {
   687  													goto l22
   688  												}
   689  												add(ruleFATAL, position25)
   690  											}
   691  											break
   692  										case 'e':
   693  											{
   694  												position28 := position
   695  												{
   696  													position29 := position
   697  													if buffer[position] != rune('e') {
   698  														goto l22
   699  													}
   700  													position++
   701  													if buffer[position] != rune('r') {
   702  														goto l22
   703  													}
   704  													position++
   705  													if buffer[position] != rune('r') {
   706  														goto l22
   707  													}
   708  													position++
   709  													if buffer[position] != rune('o') {
   710  														goto l22
   711  													}
   712  													position++
   713  													if buffer[position] != rune('r') {
   714  														goto l22
   715  													}
   716  													position++
   717  													add(rulePegText, position29)
   718  												}
   719  												{
   720  													position30, tokenIndex30 := position, tokenIndex
   721  													if !_rules[ruleIdChar]() {
   722  														goto l30
   723  													}
   724  													goto l22
   725  												l30:
   726  													position, tokenIndex = position30, tokenIndex30
   727  												}
   728  												if !_rules[rule_]() {
   729  													goto l22
   730  												}
   731  												add(ruleERROR, position28)
   732  											}
   733  											break
   734  										case 'w':
   735  											{
   736  												position31 := position
   737  												{
   738  													position32 := position
   739  													if buffer[position] != rune('w') {
   740  														goto l22
   741  													}
   742  													position++
   743  													if buffer[position] != rune('a') {
   744  														goto l22
   745  													}
   746  													position++
   747  													if buffer[position] != rune('r') {
   748  														goto l22
   749  													}
   750  													position++
   751  													if buffer[position] != rune('n') {
   752  														goto l22
   753  													}
   754  													position++
   755  													add(rulePegText, position32)
   756  												}
   757  												{
   758  													position33, tokenIndex33 := position, tokenIndex
   759  													if !_rules[ruleIdChar]() {
   760  														goto l33
   761  													}
   762  													goto l22
   763  												l33:
   764  													position, tokenIndex = position33, tokenIndex33
   765  												}
   766  												if !_rules[rule_]() {
   767  													goto l22
   768  												}
   769  												add(ruleWARN, position31)
   770  											}
   771  											break
   772  										case 'i':
   773  											{
   774  												position34 := position
   775  												{
   776  													position35 := position
   777  													if buffer[position] != rune('i') {
   778  														goto l22
   779  													}
   780  													position++
   781  													if buffer[position] != rune('n') {
   782  														goto l22
   783  													}
   784  													position++
   785  													if buffer[position] != rune('f') {
   786  														goto l22
   787  													}
   788  													position++
   789  													if buffer[position] != rune('o') {
   790  														goto l22
   791  													}
   792  													position++
   793  													add(rulePegText, position35)
   794  												}
   795  												{
   796  													position36, tokenIndex36 := position, tokenIndex
   797  													if !_rules[ruleIdChar]() {
   798  														goto l36
   799  													}
   800  													goto l22
   801  												l36:
   802  													position, tokenIndex = position36, tokenIndex36
   803  												}
   804  												if !_rules[rule_]() {
   805  													goto l22
   806  												}
   807  												add(ruleINFO, position34)
   808  											}
   809  											break
   810  										default:
   811  											{
   812  												position37 := position
   813  												{
   814  													position38 := position
   815  													if buffer[position] != rune('d') {
   816  														goto l22
   817  													}
   818  													position++
   819  													if buffer[position] != rune('e') {
   820  														goto l22
   821  													}
   822  													position++
   823  													if buffer[position] != rune('b') {
   824  														goto l22
   825  													}
   826  													position++
   827  													if buffer[position] != rune('u') {
   828  														goto l22
   829  													}
   830  													position++
   831  													if buffer[position] != rune('g') {
   832  														goto l22
   833  													}
   834  													position++
   835  													add(rulePegText, position38)
   836  												}
   837  												{
   838  													position39, tokenIndex39 := position, tokenIndex
   839  													if !_rules[ruleIdChar]() {
   840  														goto l39
   841  													}
   842  													goto l22
   843  												l39:
   844  													position, tokenIndex = position39, tokenIndex39
   845  												}
   846  												if !_rules[rule_]() {
   847  													goto l22
   848  												}
   849  												add(ruleDEBUG, position37)
   850  											}
   851  											break
   852  										}
   853  									}
   854  
   855  									add(ruleSeverity, position23)
   856  								}
   857  								{
   858  									add(ruleAction1, position)
   859  								}
   860  								goto l21
   861  							l22:
   862  								position, tokenIndex = position21, tokenIndex21
   863  								{
   864  									switch buffer[position] {
   865  									case '(':
   866  										if !_rules[ruleLPAR]() {
   867  											goto l18
   868  										}
   869  										if !_rules[ruleExpr]() {
   870  											goto l18
   871  										}
   872  										if !_rules[ruleRPAR]() {
   873  											goto l18
   874  										}
   875  										{
   876  											add(ruleAction4, position)
   877  										}
   878  										break
   879  									case '"':
   880  										{
   881  											position43 := position
   882  											if buffer[position] != rune('"') {
   883  												goto l18
   884  											}
   885  											position++
   886  											{
   887  												position46 := position
   888  											l47:
   889  												{
   890  													position48, tokenIndex48 := position, tokenIndex
   891  													{
   892  														position49 := position
   893  														{
   894  															position50, tokenIndex50 := position, tokenIndex
   895  															{
   896  																position52 := position
   897  																{
   898  																	position53, tokenIndex53 := position, tokenIndex
   899  																	{
   900  																		position55 := position
   901  																		if buffer[position] != rune('\\') {
   902  																			goto l54
   903  																		}
   904  																		position++
   905  																		{
   906  																			switch buffer[position] {
   907  																			case 'v':
   908  																				if buffer[position] != rune('v') {
   909  																					goto l54
   910  																				}
   911  																				position++
   912  																				break
   913  																			case 't':
   914  																				if buffer[position] != rune('t') {
   915  																					goto l54
   916  																				}
   917  																				position++
   918  																				break
   919  																			case 'r':
   920  																				if buffer[position] != rune('r') {
   921  																					goto l54
   922  																				}
   923  																				position++
   924  																				break
   925  																			case 'n':
   926  																				if buffer[position] != rune('n') {
   927  																					goto l54
   928  																				}
   929  																				position++
   930  																				break
   931  																			case 'f':
   932  																				if buffer[position] != rune('f') {
   933  																					goto l54
   934  																				}
   935  																				position++
   936  																				break
   937  																			case 'b':
   938  																				if buffer[position] != rune('b') {
   939  																					goto l54
   940  																				}
   941  																				position++
   942  																				break
   943  																			case 'a':
   944  																				if buffer[position] != rune('a') {
   945  																					goto l54
   946  																				}
   947  																				position++
   948  																				break
   949  																			case '\\':
   950  																				if buffer[position] != rune('\\') {
   951  																					goto l54
   952  																				}
   953  																				position++
   954  																				break
   955  																			case '?':
   956  																				if buffer[position] != rune('?') {
   957  																					goto l54
   958  																				}
   959  																				position++
   960  																				break
   961  																			case '"':
   962  																				if buffer[position] != rune('"') {
   963  																					goto l54
   964  																				}
   965  																				position++
   966  																				break
   967  																			default:
   968  																				if buffer[position] != rune('\'') {
   969  																					goto l54
   970  																				}
   971  																				position++
   972  																				break
   973  																			}
   974  																		}
   975  
   976  																		add(ruleSimpleEscape, position55)
   977  																	}
   978  																	goto l53
   979  																l54:
   980  																	position, tokenIndex = position53, tokenIndex53
   981  																	{
   982  																		position58 := position
   983  																		if buffer[position] != rune('\\') {
   984  																			goto l57
   985  																		}
   986  																		position++
   987  																		if c := buffer[position]; c < rune('0') || c > rune('7') {
   988  																			goto l57
   989  																		}
   990  																		position++
   991  																		{
   992  																			position59, tokenIndex59 := position, tokenIndex
   993  																			if c := buffer[position]; c < rune('0') || c > rune('7') {
   994  																				goto l59
   995  																			}
   996  																			position++
   997  																			goto l60
   998  																		l59:
   999  																			position, tokenIndex = position59, tokenIndex59
  1000  																		}
  1001  																	l60:
  1002  																		{
  1003  																			position61, tokenIndex61 := position, tokenIndex
  1004  																			if c := buffer[position]; c < rune('0') || c > rune('7') {
  1005  																				goto l61
  1006  																			}
  1007  																			position++
  1008  																			goto l62
  1009  																		l61:
  1010  																			position, tokenIndex = position61, tokenIndex61
  1011  																		}
  1012  																	l62:
  1013  																		add(ruleOctalEscape, position58)
  1014  																	}
  1015  																	goto l53
  1016  																l57:
  1017  																	position, tokenIndex = position53, tokenIndex53
  1018  																	{
  1019  																		position64 := position
  1020  																		if buffer[position] != rune('\\') {
  1021  																			goto l63
  1022  																		}
  1023  																		position++
  1024  																		if buffer[position] != rune('x') {
  1025  																			goto l63
  1026  																		}
  1027  																		position++
  1028  																		if !_rules[ruleHexDigit]() {
  1029  																			goto l63
  1030  																		}
  1031  																	l65:
  1032  																		{
  1033  																			position66, tokenIndex66 := position, tokenIndex
  1034  																			if !_rules[ruleHexDigit]() {
  1035  																				goto l66
  1036  																			}
  1037  																			goto l65
  1038  																		l66:
  1039  																			position, tokenIndex = position66, tokenIndex66
  1040  																		}
  1041  																		add(ruleHexEscape, position64)
  1042  																	}
  1043  																	goto l53
  1044  																l63:
  1045  																	position, tokenIndex = position53, tokenIndex53
  1046  																	{
  1047  																		position67 := position
  1048  																		{
  1049  																			position68, tokenIndex68 := position, tokenIndex
  1050  																			if buffer[position] != rune('\\') {
  1051  																				goto l69
  1052  																			}
  1053  																			position++
  1054  																			if buffer[position] != rune('u') {
  1055  																				goto l69
  1056  																			}
  1057  																			position++
  1058  																			if !_rules[ruleHexQuad]() {
  1059  																				goto l69
  1060  																			}
  1061  																			goto l68
  1062  																		l69:
  1063  																			position, tokenIndex = position68, tokenIndex68
  1064  																			if buffer[position] != rune('\\') {
  1065  																				goto l51
  1066  																			}
  1067  																			position++
  1068  																			if buffer[position] != rune('U') {
  1069  																				goto l51
  1070  																			}
  1071  																			position++
  1072  																			if !_rules[ruleHexQuad]() {
  1073  																				goto l51
  1074  																			}
  1075  																			if !_rules[ruleHexQuad]() {
  1076  																				goto l51
  1077  																			}
  1078  																		}
  1079  																	l68:
  1080  																		add(ruleUniversalCharacter, position67)
  1081  																	}
  1082  																}
  1083  															l53:
  1084  																add(ruleEscape, position52)
  1085  															}
  1086  															goto l50
  1087  														l51:
  1088  															position, tokenIndex = position50, tokenIndex50
  1089  															{
  1090  																position70, tokenIndex70 := position, tokenIndex
  1091  																{
  1092  																	switch buffer[position] {
  1093  																	case '\\':
  1094  																		if buffer[position] != rune('\\') {
  1095  																			goto l70
  1096  																		}
  1097  																		position++
  1098  																		break
  1099  																	case '\n':
  1100  																		if buffer[position] != rune('\n') {
  1101  																			goto l70
  1102  																		}
  1103  																		position++
  1104  																		break
  1105  																	default:
  1106  																		if buffer[position] != rune('"') {
  1107  																			goto l70
  1108  																		}
  1109  																		position++
  1110  																		break
  1111  																	}
  1112  																}
  1113  
  1114  																goto l48
  1115  															l70:
  1116  																position, tokenIndex = position70, tokenIndex70
  1117  															}
  1118  															if !matchDot() {
  1119  																goto l48
  1120  															}
  1121  														}
  1122  													l50:
  1123  														add(ruleStringChar, position49)
  1124  													}
  1125  													goto l47
  1126  												l48:
  1127  													position, tokenIndex = position48, tokenIndex48
  1128  												}
  1129  												add(rulePegText, position46)
  1130  											}
  1131  											if buffer[position] != rune('"') {
  1132  												goto l18
  1133  											}
  1134  											position++
  1135  											if !_rules[rule_]() {
  1136  												goto l18
  1137  											}
  1138  										l44:
  1139  											{
  1140  												position45, tokenIndex45 := position, tokenIndex
  1141  												if buffer[position] != rune('"') {
  1142  													goto l45
  1143  												}
  1144  												position++
  1145  												{
  1146  													position72 := position
  1147  												l73:
  1148  													{
  1149  														position74, tokenIndex74 := position, tokenIndex
  1150  														{
  1151  															position75 := position
  1152  															{
  1153  																position76, tokenIndex76 := position, tokenIndex
  1154  																{
  1155  																	position78 := position
  1156  																	{
  1157  																		position79, tokenIndex79 := position, tokenIndex
  1158  																		{
  1159  																			position81 := position
  1160  																			if buffer[position] != rune('\\') {
  1161  																				goto l80
  1162  																			}
  1163  																			position++
  1164  																			{
  1165  																				switch buffer[position] {
  1166  																				case 'v':
  1167  																					if buffer[position] != rune('v') {
  1168  																						goto l80
  1169  																					}
  1170  																					position++
  1171  																					break
  1172  																				case 't':
  1173  																					if buffer[position] != rune('t') {
  1174  																						goto l80
  1175  																					}
  1176  																					position++
  1177  																					break
  1178  																				case 'r':
  1179  																					if buffer[position] != rune('r') {
  1180  																						goto l80
  1181  																					}
  1182  																					position++
  1183  																					break
  1184  																				case 'n':
  1185  																					if buffer[position] != rune('n') {
  1186  																						goto l80
  1187  																					}
  1188  																					position++
  1189  																					break
  1190  																				case 'f':
  1191  																					if buffer[position] != rune('f') {
  1192  																						goto l80
  1193  																					}
  1194  																					position++
  1195  																					break
  1196  																				case 'b':
  1197  																					if buffer[position] != rune('b') {
  1198  																						goto l80
  1199  																					}
  1200  																					position++
  1201  																					break
  1202  																				case 'a':
  1203  																					if buffer[position] != rune('a') {
  1204  																						goto l80
  1205  																					}
  1206  																					position++
  1207  																					break
  1208  																				case '\\':
  1209  																					if buffer[position] != rune('\\') {
  1210  																						goto l80
  1211  																					}
  1212  																					position++
  1213  																					break
  1214  																				case '?':
  1215  																					if buffer[position] != rune('?') {
  1216  																						goto l80
  1217  																					}
  1218  																					position++
  1219  																					break
  1220  																				case '"':
  1221  																					if buffer[position] != rune('"') {
  1222  																						goto l80
  1223  																					}
  1224  																					position++
  1225  																					break
  1226  																				default:
  1227  																					if buffer[position] != rune('\'') {
  1228  																						goto l80
  1229  																					}
  1230  																					position++
  1231  																					break
  1232  																				}
  1233  																			}
  1234  
  1235  																			add(ruleSimpleEscape, position81)
  1236  																		}
  1237  																		goto l79
  1238  																	l80:
  1239  																		position, tokenIndex = position79, tokenIndex79
  1240  																		{
  1241  																			position84 := position
  1242  																			if buffer[position] != rune('\\') {
  1243  																				goto l83
  1244  																			}
  1245  																			position++
  1246  																			if c := buffer[position]; c < rune('0') || c > rune('7') {
  1247  																				goto l83
  1248  																			}
  1249  																			position++
  1250  																			{
  1251  																				position85, tokenIndex85 := position, tokenIndex
  1252  																				if c := buffer[position]; c < rune('0') || c > rune('7') {
  1253  																					goto l85
  1254  																				}
  1255  																				position++
  1256  																				goto l86
  1257  																			l85:
  1258  																				position, tokenIndex = position85, tokenIndex85
  1259  																			}
  1260  																		l86:
  1261  																			{
  1262  																				position87, tokenIndex87 := position, tokenIndex
  1263  																				if c := buffer[position]; c < rune('0') || c > rune('7') {
  1264  																					goto l87
  1265  																				}
  1266  																				position++
  1267  																				goto l88
  1268  																			l87:
  1269  																				position, tokenIndex = position87, tokenIndex87
  1270  																			}
  1271  																		l88:
  1272  																			add(ruleOctalEscape, position84)
  1273  																		}
  1274  																		goto l79
  1275  																	l83:
  1276  																		position, tokenIndex = position79, tokenIndex79
  1277  																		{
  1278  																			position90 := position
  1279  																			if buffer[position] != rune('\\') {
  1280  																				goto l89
  1281  																			}
  1282  																			position++
  1283  																			if buffer[position] != rune('x') {
  1284  																				goto l89
  1285  																			}
  1286  																			position++
  1287  																			if !_rules[ruleHexDigit]() {
  1288  																				goto l89
  1289  																			}
  1290  																		l91:
  1291  																			{
  1292  																				position92, tokenIndex92 := position, tokenIndex
  1293  																				if !_rules[ruleHexDigit]() {
  1294  																					goto l92
  1295  																				}
  1296  																				goto l91
  1297  																			l92:
  1298  																				position, tokenIndex = position92, tokenIndex92
  1299  																			}
  1300  																			add(ruleHexEscape, position90)
  1301  																		}
  1302  																		goto l79
  1303  																	l89:
  1304  																		position, tokenIndex = position79, tokenIndex79
  1305  																		{
  1306  																			position93 := position
  1307  																			{
  1308  																				position94, tokenIndex94 := position, tokenIndex
  1309  																				if buffer[position] != rune('\\') {
  1310  																					goto l95
  1311  																				}
  1312  																				position++
  1313  																				if buffer[position] != rune('u') {
  1314  																					goto l95
  1315  																				}
  1316  																				position++
  1317  																				if !_rules[ruleHexQuad]() {
  1318  																					goto l95
  1319  																				}
  1320  																				goto l94
  1321  																			l95:
  1322  																				position, tokenIndex = position94, tokenIndex94
  1323  																				if buffer[position] != rune('\\') {
  1324  																					goto l77
  1325  																				}
  1326  																				position++
  1327  																				if buffer[position] != rune('U') {
  1328  																					goto l77
  1329  																				}
  1330  																				position++
  1331  																				if !_rules[ruleHexQuad]() {
  1332  																					goto l77
  1333  																				}
  1334  																				if !_rules[ruleHexQuad]() {
  1335  																					goto l77
  1336  																				}
  1337  																			}
  1338  																		l94:
  1339  																			add(ruleUniversalCharacter, position93)
  1340  																		}
  1341  																	}
  1342  																l79:
  1343  																	add(ruleEscape, position78)
  1344  																}
  1345  																goto l76
  1346  															l77:
  1347  																position, tokenIndex = position76, tokenIndex76
  1348  																{
  1349  																	position96, tokenIndex96 := position, tokenIndex
  1350  																	{
  1351  																		switch buffer[position] {
  1352  																		case '\\':
  1353  																			if buffer[position] != rune('\\') {
  1354  																				goto l96
  1355  																			}
  1356  																			position++
  1357  																			break
  1358  																		case '\n':
  1359  																			if buffer[position] != rune('\n') {
  1360  																				goto l96
  1361  																			}
  1362  																			position++
  1363  																			break
  1364  																		default:
  1365  																			if buffer[position] != rune('"') {
  1366  																				goto l96
  1367  																			}
  1368  																			position++
  1369  																			break
  1370  																		}
  1371  																	}
  1372  
  1373  																	goto l74
  1374  																l96:
  1375  																	position, tokenIndex = position96, tokenIndex96
  1376  																}
  1377  																if !matchDot() {
  1378  																	goto l74
  1379  																}
  1380  															}
  1381  														l76:
  1382  															add(ruleStringChar, position75)
  1383  														}
  1384  														goto l73
  1385  													l74:
  1386  														position, tokenIndex = position74, tokenIndex74
  1387  													}
  1388  													add(rulePegText, position72)
  1389  												}
  1390  												if buffer[position] != rune('"') {
  1391  													goto l45
  1392  												}
  1393  												position++
  1394  												if !_rules[rule_]() {
  1395  													goto l45
  1396  												}
  1397  												goto l44
  1398  											l45:
  1399  												position, tokenIndex = position45, tokenIndex45
  1400  											}
  1401  											add(ruleString, position43)
  1402  										}
  1403  										{
  1404  											add(ruleAction3, position)
  1405  										}
  1406  										break
  1407  									case '\t', '\n', '\r', ' ', '.', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
  1408  										if !_rules[ruleNumber]() {
  1409  											goto l18
  1410  										}
  1411  										{
  1412  											add(ruleAction0, position)
  1413  										}
  1414  										break
  1415  									default:
  1416  										if !_rules[ruleId]() {
  1417  											goto l18
  1418  										}
  1419  										{
  1420  											add(ruleAction2, position)
  1421  										}
  1422  										break
  1423  									}
  1424  								}
  1425  
  1426  							}
  1427  						l21:
  1428  							add(rulePrimaryExpr, position20)
  1429  						}
  1430  					l101:
  1431  						{
  1432  							position102, tokenIndex102 := position, tokenIndex
  1433  							{
  1434  								switch buffer[position] {
  1435  								case 'n':
  1436  									{
  1437  										position104 := position
  1438  										if !_rules[ruleNOT]() {
  1439  											goto l102
  1440  										}
  1441  										if !_rules[ruleIN]() {
  1442  											goto l102
  1443  										}
  1444  										{
  1445  											add(ruleAction9, position)
  1446  										}
  1447  										if !_rules[ruleTupleExpr]() {
  1448  											goto l102
  1449  										}
  1450  										{
  1451  											add(ruleAction10, position)
  1452  										}
  1453  										add(ruleNotInExpr, position104)
  1454  									}
  1455  									break
  1456  								case 'i':
  1457  									{
  1458  										position107 := position
  1459  										if !_rules[ruleIN]() {
  1460  											goto l102
  1461  										}
  1462  										{
  1463  											add(ruleAction7, position)
  1464  										}
  1465  										if !_rules[ruleTupleExpr]() {
  1466  											goto l102
  1467  										}
  1468  										{
  1469  											add(ruleAction8, position)
  1470  										}
  1471  										add(ruleInExpr, position107)
  1472  									}
  1473  									break
  1474  								case '[':
  1475  									{
  1476  										position110 := position
  1477  										if buffer[position] != rune('[') {
  1478  											goto l102
  1479  										}
  1480  										position++
  1481  										if !_rules[rule_]() {
  1482  											goto l102
  1483  										}
  1484  										add(ruleLBRK, position110)
  1485  									}
  1486  									if !_rules[ruleNumber]() {
  1487  										goto l102
  1488  									}
  1489  									{
  1490  										position111 := position
  1491  										if buffer[position] != rune(']') {
  1492  											goto l102
  1493  										}
  1494  										position++
  1495  										if !_rules[rule_]() {
  1496  											goto l102
  1497  										}
  1498  										add(ruleRBRK, position111)
  1499  									}
  1500  									{
  1501  										add(ruleAction12, position)
  1502  									}
  1503  									break
  1504  								default:
  1505  									{
  1506  										position113 := position
  1507  										if buffer[position] != rune('.') {
  1508  											goto l102
  1509  										}
  1510  										position++
  1511  										if !_rules[rule_]() {
  1512  											goto l102
  1513  										}
  1514  										add(ruleDOT, position113)
  1515  									}
  1516  									if !_rules[ruleId]() {
  1517  										goto l102
  1518  									}
  1519  									{
  1520  										add(ruleAction11, position)
  1521  									}
  1522  									break
  1523  								}
  1524  							}
  1525  
  1526  							goto l101
  1527  						l102:
  1528  							position, tokenIndex = position102, tokenIndex102
  1529  						}
  1530  						add(rulePostfixExpr, position19)
  1531  					}
  1532  					goto l17
  1533  				l18:
  1534  					position, tokenIndex = position17, tokenIndex17
  1535  					{
  1536  						position115 := position
  1537  						if buffer[position] != rune('!') {
  1538  							goto l15
  1539  						}
  1540  						position++
  1541  						{
  1542  							position116, tokenIndex116 := position, tokenIndex
  1543  							if buffer[position] != rune('=') {
  1544  								goto l116
  1545  							}
  1546  							position++
  1547  							goto l15
  1548  						l116:
  1549  							position, tokenIndex = position116, tokenIndex116
  1550  						}
  1551  						if !_rules[rule_]() {
  1552  							goto l15
  1553  						}
  1554  						add(ruleBANG, position115)
  1555  					}
  1556  					if !_rules[ruleRelationalExpr]() {
  1557  						goto l15
  1558  					}
  1559  					{
  1560  						add(ruleAction13, position)
  1561  					}
  1562  				}
  1563  			l17:
  1564  				add(ruleUnaryExpr, position16)
  1565  			}
  1566  			return true
  1567  		l15:
  1568  			position, tokenIndex = position15, tokenIndex15
  1569  			return false
  1570  		},
  1571  		/* 7 RelationalExpr <- <(UnaryExpr ((GE UnaryExpr Action14) / (GT UnaryExpr Action15) / (LE UnaryExpr Action16) / (LT UnaryExpr Action17))*)> */
  1572  		func() bool {
  1573  			position118, tokenIndex118 := position, tokenIndex
  1574  			{
  1575  				position119 := position
  1576  				if !_rules[ruleUnaryExpr]() {
  1577  					goto l118
  1578  				}
  1579  			l120:
  1580  				{
  1581  					position121, tokenIndex121 := position, tokenIndex
  1582  					{
  1583  						position122, tokenIndex122 := position, tokenIndex
  1584  						{
  1585  							position124 := position
  1586  							if buffer[position] != rune('>') {
  1587  								goto l123
  1588  							}
  1589  							position++
  1590  							if buffer[position] != rune('=') {
  1591  								goto l123
  1592  							}
  1593  							position++
  1594  							if !_rules[rule_]() {
  1595  								goto l123
  1596  							}
  1597  							add(ruleGE, position124)
  1598  						}
  1599  						if !_rules[ruleUnaryExpr]() {
  1600  							goto l123
  1601  						}
  1602  						{
  1603  							add(ruleAction14, position)
  1604  						}
  1605  						goto l122
  1606  					l123:
  1607  						position, tokenIndex = position122, tokenIndex122
  1608  						{
  1609  							position127 := position
  1610  							if buffer[position] != rune('>') {
  1611  								goto l126
  1612  							}
  1613  							position++
  1614  							{
  1615  								position128, tokenIndex128 := position, tokenIndex
  1616  								if buffer[position] != rune('=') {
  1617  									goto l128
  1618  								}
  1619  								position++
  1620  								goto l126
  1621  							l128:
  1622  								position, tokenIndex = position128, tokenIndex128
  1623  							}
  1624  							if !_rules[rule_]() {
  1625  								goto l126
  1626  							}
  1627  							add(ruleGT, position127)
  1628  						}
  1629  						if !_rules[ruleUnaryExpr]() {
  1630  							goto l126
  1631  						}
  1632  						{
  1633  							add(ruleAction15, position)
  1634  						}
  1635  						goto l122
  1636  					l126:
  1637  						position, tokenIndex = position122, tokenIndex122
  1638  						{
  1639  							position131 := position
  1640  							if buffer[position] != rune('<') {
  1641  								goto l130
  1642  							}
  1643  							position++
  1644  							if buffer[position] != rune('=') {
  1645  								goto l130
  1646  							}
  1647  							position++
  1648  							if !_rules[rule_]() {
  1649  								goto l130
  1650  							}
  1651  							add(ruleLE, position131)
  1652  						}
  1653  						if !_rules[ruleUnaryExpr]() {
  1654  							goto l130
  1655  						}
  1656  						{
  1657  							add(ruleAction16, position)
  1658  						}
  1659  						goto l122
  1660  					l130:
  1661  						position, tokenIndex = position122, tokenIndex122
  1662  						{
  1663  							position133 := position
  1664  							if buffer[position] != rune('<') {
  1665  								goto l121
  1666  							}
  1667  							position++
  1668  							{
  1669  								position134, tokenIndex134 := position, tokenIndex
  1670  								if buffer[position] != rune('=') {
  1671  									goto l134
  1672  								}
  1673  								position++
  1674  								goto l121
  1675  							l134:
  1676  								position, tokenIndex = position134, tokenIndex134
  1677  							}
  1678  							if !_rules[rule_]() {
  1679  								goto l121
  1680  							}
  1681  							add(ruleLT, position133)
  1682  						}
  1683  						if !_rules[ruleUnaryExpr]() {
  1684  							goto l121
  1685  						}
  1686  						{
  1687  							add(ruleAction17, position)
  1688  						}
  1689  					}
  1690  				l122:
  1691  					goto l120
  1692  				l121:
  1693  					position, tokenIndex = position121, tokenIndex121
  1694  				}
  1695  				add(ruleRelationalExpr, position119)
  1696  			}
  1697  			return true
  1698  		l118:
  1699  			position, tokenIndex = position118, tokenIndex118
  1700  			return false
  1701  		},
  1702  		/* 8 EqualityExpr <- <(RelationalExpr ((EQEQ RelationalExpr Action18) / ((&('c') (CONTAINS RelationalExpr Action21)) | (&('=') (EQ RelationalExpr Action20)) | (&('!') (NE RelationalExpr Action19))))*)> */
  1703  		func() bool {
  1704  			position136, tokenIndex136 := position, tokenIndex
  1705  			{
  1706  				position137 := position
  1707  				if !_rules[ruleRelationalExpr]() {
  1708  					goto l136
  1709  				}
  1710  			l138:
  1711  				{
  1712  					position139, tokenIndex139 := position, tokenIndex
  1713  					{
  1714  						position140, tokenIndex140 := position, tokenIndex
  1715  						{
  1716  							position142 := position
  1717  							if buffer[position] != rune('=') {
  1718  								goto l141
  1719  							}
  1720  							position++
  1721  							if buffer[position] != rune('=') {
  1722  								goto l141
  1723  							}
  1724  							position++
  1725  							if !_rules[rule_]() {
  1726  								goto l141
  1727  							}
  1728  							add(ruleEQEQ, position142)
  1729  						}
  1730  						if !_rules[ruleRelationalExpr]() {
  1731  							goto l141
  1732  						}
  1733  						{
  1734  							add(ruleAction18, position)
  1735  						}
  1736  						goto l140
  1737  					l141:
  1738  						position, tokenIndex = position140, tokenIndex140
  1739  						{
  1740  							switch buffer[position] {
  1741  							case 'c':
  1742  								{
  1743  									position145 := position
  1744  									if buffer[position] != rune('c') {
  1745  										goto l139
  1746  									}
  1747  									position++
  1748  									if buffer[position] != rune('o') {
  1749  										goto l139
  1750  									}
  1751  									position++
  1752  									if buffer[position] != rune('n') {
  1753  										goto l139
  1754  									}
  1755  									position++
  1756  									if buffer[position] != rune('t') {
  1757  										goto l139
  1758  									}
  1759  									position++
  1760  									if buffer[position] != rune('a') {
  1761  										goto l139
  1762  									}
  1763  									position++
  1764  									if buffer[position] != rune('i') {
  1765  										goto l139
  1766  									}
  1767  									position++
  1768  									if buffer[position] != rune('n') {
  1769  										goto l139
  1770  									}
  1771  									position++
  1772  									if buffer[position] != rune('s') {
  1773  										goto l139
  1774  									}
  1775  									position++
  1776  									{
  1777  										position146, tokenIndex146 := position, tokenIndex
  1778  										if !_rules[ruleIdChar]() {
  1779  											goto l146
  1780  										}
  1781  										goto l139
  1782  									l146:
  1783  										position, tokenIndex = position146, tokenIndex146
  1784  									}
  1785  									if !_rules[rule_]() {
  1786  										goto l139
  1787  									}
  1788  									add(ruleCONTAINS, position145)
  1789  								}
  1790  								if !_rules[ruleRelationalExpr]() {
  1791  									goto l139
  1792  								}
  1793  								{
  1794  									add(ruleAction21, position)
  1795  								}
  1796  								break
  1797  							case '=':
  1798  								{
  1799  									position148 := position
  1800  									if buffer[position] != rune('=') {
  1801  										goto l139
  1802  									}
  1803  									position++
  1804  									if !_rules[rule_]() {
  1805  										goto l139
  1806  									}
  1807  									add(ruleEQ, position148)
  1808  								}
  1809  								if !_rules[ruleRelationalExpr]() {
  1810  									goto l139
  1811  								}
  1812  								{
  1813  									add(ruleAction20, position)
  1814  								}
  1815  								break
  1816  							default:
  1817  								{
  1818  									position150 := position
  1819  									if buffer[position] != rune('!') {
  1820  										goto l139
  1821  									}
  1822  									position++
  1823  									if buffer[position] != rune('=') {
  1824  										goto l139
  1825  									}
  1826  									position++
  1827  									if !_rules[rule_]() {
  1828  										goto l139
  1829  									}
  1830  									add(ruleNE, position150)
  1831  								}
  1832  								if !_rules[ruleRelationalExpr]() {
  1833  									goto l139
  1834  								}
  1835  								{
  1836  									add(ruleAction19, position)
  1837  								}
  1838  								break
  1839  							}
  1840  						}
  1841  
  1842  					}
  1843  				l140:
  1844  					goto l138
  1845  				l139:
  1846  					position, tokenIndex = position139, tokenIndex139
  1847  				}
  1848  				add(ruleEqualityExpr, position137)
  1849  			}
  1850  			return true
  1851  		l136:
  1852  			position, tokenIndex = position136, tokenIndex136
  1853  			return false
  1854  		},
  1855  		/* 9 LogicalAndExpr <- <(EqualityExpr ((AND EqualityExpr Action22) / (ANDAND EqualityExpr Action23) / (_ EqualityExpr Action24))*)> */
  1856  		func() bool {
  1857  			position152, tokenIndex152 := position, tokenIndex
  1858  			{
  1859  				position153 := position
  1860  				if !_rules[ruleEqualityExpr]() {
  1861  					goto l152
  1862  				}
  1863  			l154:
  1864  				{
  1865  					position155, tokenIndex155 := position, tokenIndex
  1866  					{
  1867  						position156, tokenIndex156 := position, tokenIndex
  1868  						{
  1869  							position158 := position
  1870  							if buffer[position] != rune('a') {
  1871  								goto l157
  1872  							}
  1873  							position++
  1874  							if buffer[position] != rune('n') {
  1875  								goto l157
  1876  							}
  1877  							position++
  1878  							if buffer[position] != rune('d') {
  1879  								goto l157
  1880  							}
  1881  							position++
  1882  							{
  1883  								position159, tokenIndex159 := position, tokenIndex
  1884  								if !_rules[ruleIdChar]() {
  1885  									goto l159
  1886  								}
  1887  								goto l157
  1888  							l159:
  1889  								position, tokenIndex = position159, tokenIndex159
  1890  							}
  1891  							if !_rules[rule_]() {
  1892  								goto l157
  1893  							}
  1894  							add(ruleAND, position158)
  1895  						}
  1896  						if !_rules[ruleEqualityExpr]() {
  1897  							goto l157
  1898  						}
  1899  						{
  1900  							add(ruleAction22, position)
  1901  						}
  1902  						goto l156
  1903  					l157:
  1904  						position, tokenIndex = position156, tokenIndex156
  1905  						{
  1906  							position162 := position
  1907  							if buffer[position] != rune('&') {
  1908  								goto l161
  1909  							}
  1910  							position++
  1911  							if buffer[position] != rune('&') {
  1912  								goto l161
  1913  							}
  1914  							position++
  1915  							if !_rules[rule_]() {
  1916  								goto l161
  1917  							}
  1918  							add(ruleANDAND, position162)
  1919  						}
  1920  						if !_rules[ruleEqualityExpr]() {
  1921  							goto l161
  1922  						}
  1923  						{
  1924  							add(ruleAction23, position)
  1925  						}
  1926  						goto l156
  1927  					l161:
  1928  						position, tokenIndex = position156, tokenIndex156
  1929  						if !_rules[rule_]() {
  1930  							goto l155
  1931  						}
  1932  						if !_rules[ruleEqualityExpr]() {
  1933  							goto l155
  1934  						}
  1935  						{
  1936  							add(ruleAction24, position)
  1937  						}
  1938  					}
  1939  				l156:
  1940  					goto l154
  1941  				l155:
  1942  					position, tokenIndex = position155, tokenIndex155
  1943  				}
  1944  				add(ruleLogicalAndExpr, position153)
  1945  			}
  1946  			return true
  1947  		l152:
  1948  			position, tokenIndex = position152, tokenIndex152
  1949  			return false
  1950  		},
  1951  		/* 10 LogicalOrExpr <- <(LogicalAndExpr ((OR LogicalAndExpr Action25) / (OROR LogicalAndExpr Action26))*)> */
  1952  		func() bool {
  1953  			position165, tokenIndex165 := position, tokenIndex
  1954  			{
  1955  				position166 := position
  1956  				if !_rules[ruleLogicalAndExpr]() {
  1957  					goto l165
  1958  				}
  1959  			l167:
  1960  				{
  1961  					position168, tokenIndex168 := position, tokenIndex
  1962  					{
  1963  						position169, tokenIndex169 := position, tokenIndex
  1964  						{
  1965  							position171 := position
  1966  							if buffer[position] != rune('o') {
  1967  								goto l170
  1968  							}
  1969  							position++
  1970  							if buffer[position] != rune('r') {
  1971  								goto l170
  1972  							}
  1973  							position++
  1974  							{
  1975  								position172, tokenIndex172 := position, tokenIndex
  1976  								if !_rules[ruleIdChar]() {
  1977  									goto l172
  1978  								}
  1979  								goto l170
  1980  							l172:
  1981  								position, tokenIndex = position172, tokenIndex172
  1982  							}
  1983  							if !_rules[rule_]() {
  1984  								goto l170
  1985  							}
  1986  							add(ruleOR, position171)
  1987  						}
  1988  						if !_rules[ruleLogicalAndExpr]() {
  1989  							goto l170
  1990  						}
  1991  						{
  1992  							add(ruleAction25, position)
  1993  						}
  1994  						goto l169
  1995  					l170:
  1996  						position, tokenIndex = position169, tokenIndex169
  1997  						{
  1998  							position174 := position
  1999  							if buffer[position] != rune('|') {
  2000  								goto l168
  2001  							}
  2002  							position++
  2003  							if buffer[position] != rune('|') {
  2004  								goto l168
  2005  							}
  2006  							position++
  2007  							if !_rules[rule_]() {
  2008  								goto l168
  2009  							}
  2010  							add(ruleOROR, position174)
  2011  						}
  2012  						if !_rules[ruleLogicalAndExpr]() {
  2013  							goto l168
  2014  						}
  2015  						{
  2016  							add(ruleAction26, position)
  2017  						}
  2018  					}
  2019  				l169:
  2020  					goto l167
  2021  				l168:
  2022  					position, tokenIndex = position168, tokenIndex168
  2023  				}
  2024  				add(ruleLogicalOrExpr, position166)
  2025  			}
  2026  			return true
  2027  		l165:
  2028  			position, tokenIndex = position165, tokenIndex165
  2029  			return false
  2030  		},
  2031  		/* 11 LowNotExpr <- <(LogicalOrExpr / (NOT LogicalOrExpr Action27))> */
  2032  		nil,
  2033  		/* 12 Expr <- <LowNotExpr> */
  2034  		func() bool {
  2035  			position177, tokenIndex177 := position, tokenIndex
  2036  			{
  2037  				position178 := position
  2038  				{
  2039  					position179 := position
  2040  					{
  2041  						position180, tokenIndex180 := position, tokenIndex
  2042  						if !_rules[ruleLogicalOrExpr]() {
  2043  							goto l181
  2044  						}
  2045  						goto l180
  2046  					l181:
  2047  						position, tokenIndex = position180, tokenIndex180
  2048  						if !_rules[ruleNOT]() {
  2049  							goto l177
  2050  						}
  2051  						if !_rules[ruleLogicalOrExpr]() {
  2052  							goto l177
  2053  						}
  2054  						{
  2055  							add(ruleAction27, position)
  2056  						}
  2057  					}
  2058  				l180:
  2059  					add(ruleLowNotExpr, position179)
  2060  				}
  2061  				add(ruleExpr, position178)
  2062  			}
  2063  			return true
  2064  		l177:
  2065  			position, tokenIndex = position177, tokenIndex177
  2066  			return false
  2067  		},
  2068  		/* 13 String <- <('"' <StringChar*> '"' _)+> */
  2069  		nil,
  2070  		/* 14 StringChar <- <(Escape / (!((&('\\') '\\') | (&('\n') '\n') | (&('"') '"')) .))> */
  2071  		nil,
  2072  		/* 15 Escape <- <(SimpleEscape / OctalEscape / HexEscape / UniversalCharacter)> */
  2073  		nil,
  2074  		/* 16 SimpleEscape <- <('\\' ((&('v') 'v') | (&('t') 't') | (&('r') 'r') | (&('n') 'n') | (&('f') 'f') | (&('b') 'b') | (&('a') 'a') | (&('\\') '\\') | (&('?') '?') | (&('"') '"') | (&('\'') '\'')))> */
  2075  		nil,
  2076  		/* 17 OctalEscape <- <('\\' [0-7] [0-7]? [0-7]?)> */
  2077  		nil,
  2078  		/* 18 HexEscape <- <('\\' 'x' HexDigit+)> */
  2079  		nil,
  2080  		/* 19 UniversalCharacter <- <(('\\' 'u' HexQuad) / ('\\' 'U' HexQuad HexQuad))> */
  2081  		nil,
  2082  		/* 20 HexQuad <- <(HexDigit HexDigit HexDigit HexDigit)> */
  2083  		func() bool {
  2084  			position190, tokenIndex190 := position, tokenIndex
  2085  			{
  2086  				position191 := position
  2087  				if !_rules[ruleHexDigit]() {
  2088  					goto l190
  2089  				}
  2090  				if !_rules[ruleHexDigit]() {
  2091  					goto l190
  2092  				}
  2093  				if !_rules[ruleHexDigit]() {
  2094  					goto l190
  2095  				}
  2096  				if !_rules[ruleHexDigit]() {
  2097  					goto l190
  2098  				}
  2099  				add(ruleHexQuad, position191)
  2100  			}
  2101  			return true
  2102  		l190:
  2103  			position, tokenIndex = position190, tokenIndex190
  2104  			return false
  2105  		},
  2106  		/* 21 HexDigit <- <((&('A' | 'B' | 'C' | 'D' | 'E' | 'F') [A-F]) | (&('a' | 'b' | 'c' | 'd' | 'e' | 'f') [a-f]) | (&('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') [0-9]))> */
  2107  		func() bool {
  2108  			position192, tokenIndex192 := position, tokenIndex
  2109  			{
  2110  				position193 := position
  2111  				{
  2112  					switch buffer[position] {
  2113  					case 'A', 'B', 'C', 'D', 'E', 'F':
  2114  						if c := buffer[position]; c < rune('A') || c > rune('F') {
  2115  							goto l192
  2116  						}
  2117  						position++
  2118  						break
  2119  					case 'a', 'b', 'c', 'd', 'e', 'f':
  2120  						if c := buffer[position]; c < rune('a') || c > rune('f') {
  2121  							goto l192
  2122  						}
  2123  						position++
  2124  						break
  2125  					default:
  2126  						if c := buffer[position]; c < rune('0') || c > rune('9') {
  2127  							goto l192
  2128  						}
  2129  						position++
  2130  						break
  2131  					}
  2132  				}
  2133  
  2134  				add(ruleHexDigit, position193)
  2135  			}
  2136  			return true
  2137  		l192:
  2138  			position, tokenIndex = position192, tokenIndex192
  2139  			return false
  2140  		},
  2141  		/* 22 Number <- <((<Float> _) / (<Integer> _))> */
  2142  		func() bool {
  2143  			position195, tokenIndex195 := position, tokenIndex
  2144  			{
  2145  				position196 := position
  2146  				{
  2147  					position197, tokenIndex197 := position, tokenIndex
  2148  					{
  2149  						position199 := position
  2150  						{
  2151  							position200 := position
  2152  							{
  2153  								position201, tokenIndex201 := position, tokenIndex
  2154  								{
  2155  									position203 := position
  2156  									{
  2157  										position204, tokenIndex204 := position, tokenIndex
  2158  									l206:
  2159  										{
  2160  											position207, tokenIndex207 := position, tokenIndex
  2161  											if c := buffer[position]; c < rune('0') || c > rune('9') {
  2162  												goto l207
  2163  											}
  2164  											position++
  2165  											goto l206
  2166  										l207:
  2167  											position, tokenIndex = position207, tokenIndex207
  2168  										}
  2169  										if buffer[position] != rune('.') {
  2170  											goto l205
  2171  										}
  2172  										position++
  2173  										if c := buffer[position]; c < rune('0') || c > rune('9') {
  2174  											goto l205
  2175  										}
  2176  										position++
  2177  									l208:
  2178  										{
  2179  											position209, tokenIndex209 := position, tokenIndex
  2180  											if c := buffer[position]; c < rune('0') || c > rune('9') {
  2181  												goto l209
  2182  											}
  2183  											position++
  2184  											goto l208
  2185  										l209:
  2186  											position, tokenIndex = position209, tokenIndex209
  2187  										}
  2188  										goto l204
  2189  									l205:
  2190  										position, tokenIndex = position204, tokenIndex204
  2191  										if c := buffer[position]; c < rune('0') || c > rune('9') {
  2192  											goto l202
  2193  										}
  2194  										position++
  2195  									l210:
  2196  										{
  2197  											position211, tokenIndex211 := position, tokenIndex
  2198  											if c := buffer[position]; c < rune('0') || c > rune('9') {
  2199  												goto l211
  2200  											}
  2201  											position++
  2202  											goto l210
  2203  										l211:
  2204  											position, tokenIndex = position211, tokenIndex211
  2205  										}
  2206  										if buffer[position] != rune('.') {
  2207  											goto l202
  2208  										}
  2209  										position++
  2210  									}
  2211  								l204:
  2212  									add(ruleFraction, position203)
  2213  								}
  2214  								{
  2215  									position212, tokenIndex212 := position, tokenIndex
  2216  									if !_rules[ruleExponent]() {
  2217  										goto l212
  2218  									}
  2219  									goto l213
  2220  								l212:
  2221  									position, tokenIndex = position212, tokenIndex212
  2222  								}
  2223  							l213:
  2224  								goto l201
  2225  							l202:
  2226  								position, tokenIndex = position201, tokenIndex201
  2227  								if c := buffer[position]; c < rune('0') || c > rune('9') {
  2228  									goto l198
  2229  								}
  2230  								position++
  2231  							l214:
  2232  								{
  2233  									position215, tokenIndex215 := position, tokenIndex
  2234  									if c := buffer[position]; c < rune('0') || c > rune('9') {
  2235  										goto l215
  2236  									}
  2237  									position++
  2238  									goto l214
  2239  								l215:
  2240  									position, tokenIndex = position215, tokenIndex215
  2241  								}
  2242  								if !_rules[ruleExponent]() {
  2243  									goto l198
  2244  								}
  2245  							}
  2246  						l201:
  2247  							add(ruleFloat, position200)
  2248  						}
  2249  						add(rulePegText, position199)
  2250  					}
  2251  					if !_rules[rule_]() {
  2252  						goto l198
  2253  					}
  2254  					goto l197
  2255  				l198:
  2256  					position, tokenIndex = position197, tokenIndex197
  2257  					{
  2258  						position216 := position
  2259  						{
  2260  							position217 := position
  2261  						l218:
  2262  							{
  2263  								position219, tokenIndex219 := position, tokenIndex
  2264  								if c := buffer[position]; c < rune('0') || c > rune('9') {
  2265  									goto l219
  2266  								}
  2267  								position++
  2268  								goto l218
  2269  							l219:
  2270  								position, tokenIndex = position219, tokenIndex219
  2271  							}
  2272  							add(ruleInteger, position217)
  2273  						}
  2274  						add(rulePegText, position216)
  2275  					}
  2276  					if !_rules[rule_]() {
  2277  						goto l195
  2278  					}
  2279  				}
  2280  			l197:
  2281  				add(ruleNumber, position196)
  2282  			}
  2283  			return true
  2284  		l195:
  2285  			position, tokenIndex = position195, tokenIndex195
  2286  			return false
  2287  		},
  2288  		/* 23 Integer <- <[0-9]*> */
  2289  		nil,
  2290  		/* 24 Float <- <((Fraction Exponent?) / ([0-9]+ Exponent))> */
  2291  		nil,
  2292  		/* 25 Fraction <- <(([0-9]* '.' [0-9]+) / ([0-9]+ '.'))> */
  2293  		nil,
  2294  		/* 26 Exponent <- <(('e' / 'E') ('+' / '-')? [0-9]+)> */
  2295  		func() bool {
  2296  			position223, tokenIndex223 := position, tokenIndex
  2297  			{
  2298  				position224 := position
  2299  				{
  2300  					position225, tokenIndex225 := position, tokenIndex
  2301  					if buffer[position] != rune('e') {
  2302  						goto l226
  2303  					}
  2304  					position++
  2305  					goto l225
  2306  				l226:
  2307  					position, tokenIndex = position225, tokenIndex225
  2308  					if buffer[position] != rune('E') {
  2309  						goto l223
  2310  					}
  2311  					position++
  2312  				}
  2313  			l225:
  2314  				{
  2315  					position227, tokenIndex227 := position, tokenIndex
  2316  					{
  2317  						position229, tokenIndex229 := position, tokenIndex
  2318  						if buffer[position] != rune('+') {
  2319  							goto l230
  2320  						}
  2321  						position++
  2322  						goto l229
  2323  					l230:
  2324  						position, tokenIndex = position229, tokenIndex229
  2325  						if buffer[position] != rune('-') {
  2326  							goto l227
  2327  						}
  2328  						position++
  2329  					}
  2330  				l229:
  2331  					goto l228
  2332  				l227:
  2333  					position, tokenIndex = position227, tokenIndex227
  2334  				}
  2335  			l228:
  2336  				if c := buffer[position]; c < rune('0') || c > rune('9') {
  2337  					goto l223
  2338  				}
  2339  				position++
  2340  			l231:
  2341  				{
  2342  					position232, tokenIndex232 := position, tokenIndex
  2343  					if c := buffer[position]; c < rune('0') || c > rune('9') {
  2344  						goto l232
  2345  					}
  2346  					position++
  2347  					goto l231
  2348  				l232:
  2349  					position, tokenIndex = position232, tokenIndex232
  2350  				}
  2351  				add(ruleExponent, position224)
  2352  			}
  2353  			return true
  2354  		l223:
  2355  			position, tokenIndex = position223, tokenIndex223
  2356  			return false
  2357  		},
  2358  		/* 27 Id <- <(!Keyword <(IdCharNoDigit IdChar*)> _)> */
  2359  		func() bool {
  2360  			position233, tokenIndex233 := position, tokenIndex
  2361  			{
  2362  				position234 := position
  2363  				{
  2364  					position235, tokenIndex235 := position, tokenIndex
  2365  					{
  2366  						position236 := position
  2367  						{
  2368  							position237, tokenIndex237 := position, tokenIndex
  2369  							if buffer[position] != rune('i') {
  2370  								goto l238
  2371  							}
  2372  							position++
  2373  							if buffer[position] != rune('n') {
  2374  								goto l238
  2375  							}
  2376  							position++
  2377  							if buffer[position] != rune('f') {
  2378  								goto l238
  2379  							}
  2380  							position++
  2381  							if buffer[position] != rune('o') {
  2382  								goto l238
  2383  							}
  2384  							position++
  2385  							goto l237
  2386  						l238:
  2387  							position, tokenIndex = position237, tokenIndex237
  2388  							{
  2389  								switch buffer[position] {
  2390  								case 'i':
  2391  									if buffer[position] != rune('i') {
  2392  										goto l235
  2393  									}
  2394  									position++
  2395  									if buffer[position] != rune('n') {
  2396  										goto l235
  2397  									}
  2398  									position++
  2399  									break
  2400  								case 'f':
  2401  									if buffer[position] != rune('f') {
  2402  										goto l235
  2403  									}
  2404  									position++
  2405  									if buffer[position] != rune('a') {
  2406  										goto l235
  2407  									}
  2408  									position++
  2409  									if buffer[position] != rune('t') {
  2410  										goto l235
  2411  									}
  2412  									position++
  2413  									if buffer[position] != rune('a') {
  2414  										goto l235
  2415  									}
  2416  									position++
  2417  									if buffer[position] != rune('l') {
  2418  										goto l235
  2419  									}
  2420  									position++
  2421  									break
  2422  								case 'e':
  2423  									if buffer[position] != rune('e') {
  2424  										goto l235
  2425  									}
  2426  									position++
  2427  									if buffer[position] != rune('r') {
  2428  										goto l235
  2429  									}
  2430  									position++
  2431  									if buffer[position] != rune('r') {
  2432  										goto l235
  2433  									}
  2434  									position++
  2435  									if buffer[position] != rune('o') {
  2436  										goto l235
  2437  									}
  2438  									position++
  2439  									if buffer[position] != rune('r') {
  2440  										goto l235
  2441  									}
  2442  									position++
  2443  									break
  2444  								case 'w':
  2445  									if buffer[position] != rune('w') {
  2446  										goto l235
  2447  									}
  2448  									position++
  2449  									if buffer[position] != rune('a') {
  2450  										goto l235
  2451  									}
  2452  									position++
  2453  									if buffer[position] != rune('r') {
  2454  										goto l235
  2455  									}
  2456  									position++
  2457  									if buffer[position] != rune('n') {
  2458  										goto l235
  2459  									}
  2460  									position++
  2461  									break
  2462  								case 'd':
  2463  									if buffer[position] != rune('d') {
  2464  										goto l235
  2465  									}
  2466  									position++
  2467  									if buffer[position] != rune('e') {
  2468  										goto l235
  2469  									}
  2470  									position++
  2471  									if buffer[position] != rune('b') {
  2472  										goto l235
  2473  									}
  2474  									position++
  2475  									if buffer[position] != rune('u') {
  2476  										goto l235
  2477  									}
  2478  									position++
  2479  									if buffer[position] != rune('g') {
  2480  										goto l235
  2481  									}
  2482  									position++
  2483  									break
  2484  								case 'c':
  2485  									if buffer[position] != rune('c') {
  2486  										goto l235
  2487  									}
  2488  									position++
  2489  									if buffer[position] != rune('o') {
  2490  										goto l235
  2491  									}
  2492  									position++
  2493  									if buffer[position] != rune('n') {
  2494  										goto l235
  2495  									}
  2496  									position++
  2497  									if buffer[position] != rune('t') {
  2498  										goto l235
  2499  									}
  2500  									position++
  2501  									if buffer[position] != rune('a') {
  2502  										goto l235
  2503  									}
  2504  									position++
  2505  									if buffer[position] != rune('i') {
  2506  										goto l235
  2507  									}
  2508  									position++
  2509  									if buffer[position] != rune('n') {
  2510  										goto l235
  2511  									}
  2512  									position++
  2513  									if buffer[position] != rune('s') {
  2514  										goto l235
  2515  									}
  2516  									position++
  2517  									break
  2518  								case 'n':
  2519  									if buffer[position] != rune('n') {
  2520  										goto l235
  2521  									}
  2522  									position++
  2523  									if buffer[position] != rune('o') {
  2524  										goto l235
  2525  									}
  2526  									position++
  2527  									if buffer[position] != rune('t') {
  2528  										goto l235
  2529  									}
  2530  									position++
  2531  									break
  2532  								case 'a':
  2533  									if buffer[position] != rune('a') {
  2534  										goto l235
  2535  									}
  2536  									position++
  2537  									if buffer[position] != rune('n') {
  2538  										goto l235
  2539  									}
  2540  									position++
  2541  									if buffer[position] != rune('d') {
  2542  										goto l235
  2543  									}
  2544  									position++
  2545  									break
  2546  								default:
  2547  									if buffer[position] != rune('o') {
  2548  										goto l235
  2549  									}
  2550  									position++
  2551  									if buffer[position] != rune('r') {
  2552  										goto l235
  2553  									}
  2554  									position++
  2555  									break
  2556  								}
  2557  							}
  2558  
  2559  						}
  2560  					l237:
  2561  						{
  2562  							position240, tokenIndex240 := position, tokenIndex
  2563  							if !_rules[ruleIdChar]() {
  2564  								goto l240
  2565  							}
  2566  							goto l235
  2567  						l240:
  2568  							position, tokenIndex = position240, tokenIndex240
  2569  						}
  2570  						add(ruleKeyword, position236)
  2571  					}
  2572  					goto l233
  2573  				l235:
  2574  					position, tokenIndex = position235, tokenIndex235
  2575  				}
  2576  				{
  2577  					position241 := position
  2578  					{
  2579  						position242 := position
  2580  						{
  2581  							switch buffer[position] {
  2582  							case '_':
  2583  								if buffer[position] != rune('_') {
  2584  									goto l233
  2585  								}
  2586  								position++
  2587  								break
  2588  							case 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z':
  2589  								if c := buffer[position]; c < rune('A') || c > rune('Z') {
  2590  									goto l233
  2591  								}
  2592  								position++
  2593  								break
  2594  							default:
  2595  								if c := buffer[position]; c < rune('a') || c > rune('z') {
  2596  									goto l233
  2597  								}
  2598  								position++
  2599  								break
  2600  							}
  2601  						}
  2602  
  2603  						add(ruleIdCharNoDigit, position242)
  2604  					}
  2605  				l244:
  2606  					{
  2607  						position245, tokenIndex245 := position, tokenIndex
  2608  						if !_rules[ruleIdChar]() {
  2609  							goto l245
  2610  						}
  2611  						goto l244
  2612  					l245:
  2613  						position, tokenIndex = position245, tokenIndex245
  2614  					}
  2615  					add(rulePegText, position241)
  2616  				}
  2617  				if !_rules[rule_]() {
  2618  					goto l233
  2619  				}
  2620  				add(ruleId, position234)
  2621  			}
  2622  			return true
  2623  		l233:
  2624  			position, tokenIndex = position233, tokenIndex233
  2625  			return false
  2626  		},
  2627  		/* 28 IdChar <- <((&('_') '_') | (&('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') [0-9]) | (&('A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z') [A-Z]) | (&('a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z') [a-z]))> */
  2628  		func() bool {
  2629  			position246, tokenIndex246 := position, tokenIndex
  2630  			{
  2631  				position247 := position
  2632  				{
  2633  					switch buffer[position] {
  2634  					case '_':
  2635  						if buffer[position] != rune('_') {
  2636  							goto l246
  2637  						}
  2638  						position++
  2639  						break
  2640  					case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
  2641  						if c := buffer[position]; c < rune('0') || c > rune('9') {
  2642  							goto l246
  2643  						}
  2644  						position++
  2645  						break
  2646  					case 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z':
  2647  						if c := buffer[position]; c < rune('A') || c > rune('Z') {
  2648  							goto l246
  2649  						}
  2650  						position++
  2651  						break
  2652  					default:
  2653  						if c := buffer[position]; c < rune('a') || c > rune('z') {
  2654  							goto l246
  2655  						}
  2656  						position++
  2657  						break
  2658  					}
  2659  				}
  2660  
  2661  				add(ruleIdChar, position247)
  2662  			}
  2663  			return true
  2664  		l246:
  2665  			position, tokenIndex = position246, tokenIndex246
  2666  			return false
  2667  		},
  2668  		/* 29 IdCharNoDigit <- <((&('_') '_') | (&('A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z') [A-Z]) | (&('a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z') [a-z]))> */
  2669  		nil,
  2670  		/* 30 Severity <- <((&('f') FATAL) | (&('e') ERROR) | (&('w') WARN) | (&('i') INFO) | (&('d') DEBUG))> */
  2671  		nil,
  2672  		/* 31 IN <- <('i' 'n' !IdChar _)> */
  2673  		func() bool {
  2674  			position251, tokenIndex251 := position, tokenIndex
  2675  			{
  2676  				position252 := position
  2677  				if buffer[position] != rune('i') {
  2678  					goto l251
  2679  				}
  2680  				position++
  2681  				if buffer[position] != rune('n') {
  2682  					goto l251
  2683  				}
  2684  				position++
  2685  				{
  2686  					position253, tokenIndex253 := position, tokenIndex
  2687  					if !_rules[ruleIdChar]() {
  2688  						goto l253
  2689  					}
  2690  					goto l251
  2691  				l253:
  2692  					position, tokenIndex = position253, tokenIndex253
  2693  				}
  2694  				if !_rules[rule_]() {
  2695  					goto l251
  2696  				}
  2697  				add(ruleIN, position252)
  2698  			}
  2699  			return true
  2700  		l251:
  2701  			position, tokenIndex = position251, tokenIndex251
  2702  			return false
  2703  		},
  2704  		/* 32 OR <- <('o' 'r' !IdChar _)> */
  2705  		nil,
  2706  		/* 33 AND <- <('a' 'n' 'd' !IdChar _)> */
  2707  		nil,
  2708  		/* 34 NOT <- <('n' 'o' 't' !IdChar _)> */
  2709  		func() bool {
  2710  			position256, tokenIndex256 := position, tokenIndex
  2711  			{
  2712  				position257 := position
  2713  				if buffer[position] != rune('n') {
  2714  					goto l256
  2715  				}
  2716  				position++
  2717  				if buffer[position] != rune('o') {
  2718  					goto l256
  2719  				}
  2720  				position++
  2721  				if buffer[position] != rune('t') {
  2722  					goto l256
  2723  				}
  2724  				position++
  2725  				{
  2726  					position258, tokenIndex258 := position, tokenIndex
  2727  					if !_rules[ruleIdChar]() {
  2728  						goto l258
  2729  					}
  2730  					goto l256
  2731  				l258:
  2732  					position, tokenIndex = position258, tokenIndex258
  2733  				}
  2734  				if !_rules[rule_]() {
  2735  					goto l256
  2736  				}
  2737  				add(ruleNOT, position257)
  2738  			}
  2739  			return true
  2740  		l256:
  2741  			position, tokenIndex = position256, tokenIndex256
  2742  			return false
  2743  		},
  2744  		/* 35 CONTAINS <- <('c' 'o' 'n' 't' 'a' 'i' 'n' 's' !IdChar _)> */
  2745  		nil,
  2746  		/* 36 DEBUG <- <(<('d' 'e' 'b' 'u' 'g')> !IdChar _)> */
  2747  		nil,
  2748  		/* 37 INFO <- <(<('i' 'n' 'f' 'o')> !IdChar _)> */
  2749  		nil,
  2750  		/* 38 WARN <- <(<('w' 'a' 'r' 'n')> !IdChar _)> */
  2751  		nil,
  2752  		/* 39 ERROR <- <(<('e' 'r' 'r' 'o' 'r')> !IdChar _)> */
  2753  		nil,
  2754  		/* 40 FATAL <- <(<('f' 'a' 't' 'a' 'l')> !IdChar _)> */
  2755  		nil,
  2756  		/* 41 Keyword <- <((('i' 'n' 'f' 'o') / ((&('i') ('i' 'n')) | (&('f') ('f' 'a' 't' 'a' 'l')) | (&('e') ('e' 'r' 'r' 'o' 'r')) | (&('w') ('w' 'a' 'r' 'n')) | (&('d') ('d' 'e' 'b' 'u' 'g')) | (&('c') ('c' 'o' 'n' 't' 'a' 'i' 'n' 's')) | (&('n') ('n' 'o' 't')) | (&('a') ('a' 'n' 'd')) | (&('o') ('o' 'r')))) !IdChar)> */
  2757  		nil,
  2758  		/* 42 EQ <- <('=' _)> */
  2759  		nil,
  2760  		/* 43 LBRK <- <('[' _)> */
  2761  		nil,
  2762  		/* 44 RBRK <- <(']' _)> */
  2763  		nil,
  2764  		/* 45 LPAR <- <('(' _)> */
  2765  		func() bool {
  2766  			position269, tokenIndex269 := position, tokenIndex
  2767  			{
  2768  				position270 := position
  2769  				if buffer[position] != rune('(') {
  2770  					goto l269
  2771  				}
  2772  				position++
  2773  				if !_rules[rule_]() {
  2774  					goto l269
  2775  				}
  2776  				add(ruleLPAR, position270)
  2777  			}
  2778  			return true
  2779  		l269:
  2780  			position, tokenIndex = position269, tokenIndex269
  2781  			return false
  2782  		},
  2783  		/* 46 RPAR <- <(')' _)> */
  2784  		func() bool {
  2785  			position271, tokenIndex271 := position, tokenIndex
  2786  			{
  2787  				position272 := position
  2788  				if buffer[position] != rune(')') {
  2789  					goto l271
  2790  				}
  2791  				position++
  2792  				if !_rules[rule_]() {
  2793  					goto l271
  2794  				}
  2795  				add(ruleRPAR, position272)
  2796  			}
  2797  			return true
  2798  		l271:
  2799  			position, tokenIndex = position271, tokenIndex271
  2800  			return false
  2801  		},
  2802  		/* 47 DOT <- <('.' _)> */
  2803  		nil,
  2804  		/* 48 BANG <- <('!' !'=' _)> */
  2805  		nil,
  2806  		/* 49 LT <- <('<' !'=' _)> */
  2807  		nil,
  2808  		/* 50 GT <- <('>' !'=' _)> */
  2809  		nil,
  2810  		/* 51 LE <- <('<' '=' _)> */
  2811  		nil,
  2812  		/* 52 EQEQ <- <('=' '=' _)> */
  2813  		nil,
  2814  		/* 53 GE <- <('>' '=' _)> */
  2815  		nil,
  2816  		/* 54 NE <- <('!' '=' _)> */
  2817  		nil,
  2818  		/* 55 ANDAND <- <('&' '&' _)> */
  2819  		nil,
  2820  		/* 56 OROR <- <('|' '|' _)> */
  2821  		nil,
  2822  		/* 57 COMMA <- <(',' _)> */
  2823  		nil,
  2824  		/* 58 _ <- <Whitespace*> */
  2825  		func() bool {
  2826  			{
  2827  				position285 := position
  2828  			l286:
  2829  				{
  2830  					position287, tokenIndex287 := position, tokenIndex
  2831  					{
  2832  						position288 := position
  2833  						{
  2834  							switch buffer[position] {
  2835  							case '\t':
  2836  								if buffer[position] != rune('\t') {
  2837  									goto l287
  2838  								}
  2839  								position++
  2840  								break
  2841  							case ' ':
  2842  								if buffer[position] != rune(' ') {
  2843  									goto l287
  2844  								}
  2845  								position++
  2846  								break
  2847  							default:
  2848  								{
  2849  									position290 := position
  2850  									{
  2851  										position291, tokenIndex291 := position, tokenIndex
  2852  										if buffer[position] != rune('\r') {
  2853  											goto l292
  2854  										}
  2855  										position++
  2856  										if buffer[position] != rune('\n') {
  2857  											goto l292
  2858  										}
  2859  										position++
  2860  										goto l291
  2861  									l292:
  2862  										position, tokenIndex = position291, tokenIndex291
  2863  										if buffer[position] != rune('\n') {
  2864  											goto l293
  2865  										}
  2866  										position++
  2867  										goto l291
  2868  									l293:
  2869  										position, tokenIndex = position291, tokenIndex291
  2870  										if buffer[position] != rune('\r') {
  2871  											goto l287
  2872  										}
  2873  										position++
  2874  									}
  2875  								l291:
  2876  									add(ruleEOL, position290)
  2877  								}
  2878  								break
  2879  							}
  2880  						}
  2881  
  2882  						add(ruleWhitespace, position288)
  2883  					}
  2884  					goto l286
  2885  				l287:
  2886  					position, tokenIndex = position287, tokenIndex287
  2887  				}
  2888  				add(rule_, position285)
  2889  			}
  2890  			return true
  2891  		},
  2892  		/* 59 Whitespace <- <((&('\t') '\t') | (&(' ') ' ') | (&('\n' | '\r') EOL))> */
  2893  		nil,
  2894  		/* 60 EOL <- <(('\r' '\n') / '\n' / '\r')> */
  2895  		nil,
  2896  		/* 61 EOF <- <!.> */
  2897  		nil,
  2898  		/* 63 Action0 <- <{ p.AddNumber(text) }> */
  2899  		nil,
  2900  		/* 64 Action1 <- <{ p.AddLevel(text)  }> */
  2901  		nil,
  2902  		/* 65 Action2 <- <{ p.AddField(text)  }> */
  2903  		nil,
  2904  		/* 66 Action3 <- <{ p.AddString(text) }> */
  2905  		nil,
  2906  		/* 67 Action4 <- <{ p.AddExpr()       }> */
  2907  		nil,
  2908  		/* 68 Action5 <- <{ p.AddTupleValue() }> */
  2909  		nil,
  2910  		/* 69 Action6 <- <{ p.AddTupleValue() }> */
  2911  		nil,
  2912  		/* 70 Action7 <- <{ p.AddTuple() }> */
  2913  		nil,
  2914  		/* 71 Action8 <- <{ p.AddBinary(ast.IN) }> */
  2915  		nil,
  2916  		/* 72 Action9 <- <{ p.AddTuple() }> */
  2917  		nil,
  2918  		/* 73 Action10 <- <{ p.AddBinary(ast.IN); p.AddUnary(ast.LNOT) }> */
  2919  		nil,
  2920  		/* 74 Action11 <- <{ p.AddMember(text)    }> */
  2921  		nil,
  2922  		/* 75 Action12 <- <{ p.AddSubscript(text) }> */
  2923  		nil,
  2924  		/* 76 Action13 <- <{ p.AddUnary(ast.NOT) }> */
  2925  		nil,
  2926  		/* 77 Action14 <- <{ p.AddBinary(ast.GE) }> */
  2927  		nil,
  2928  		/* 78 Action15 <- <{ p.AddBinary(ast.GT) }> */
  2929  		nil,
  2930  		/* 79 Action16 <- <{ p.AddBinary(ast.LE) }> */
  2931  		nil,
  2932  		/* 80 Action17 <- <{ p.AddBinary(ast.LT) }> */
  2933  		nil,
  2934  		/* 81 Action18 <- <{ p.AddBinary(ast.EQ)   }> */
  2935  		nil,
  2936  		/* 82 Action19 <- <{ p.AddBinary(ast.NE)   }> */
  2937  		nil,
  2938  		/* 83 Action20 <- <{ p.AddBinary(ast.EQ)   }> */
  2939  		nil,
  2940  		/* 84 Action21 <- <{ p.AddBinaryContains() }> */
  2941  		nil,
  2942  		/* 85 Action22 <- <{ p.AddBinary(ast.AND) }> */
  2943  		nil,
  2944  		/* 86 Action23 <- <{ p.AddBinary(ast.AND) }> */
  2945  		nil,
  2946  		/* 87 Action24 <- <{ p.AddBinary(ast.AND) }> */
  2947  		nil,
  2948  		/* 88 Action25 <- <{ p.AddBinary(ast.OR) }> */
  2949  		nil,
  2950  		/* 89 Action26 <- <{ p.AddBinary(ast.OR) }> */
  2951  		nil,
  2952  		/* 90 Action27 <- <{ p.AddUnary(ast.LNOT) }> */
  2953  		nil,
  2954  		nil,
  2955  	}
  2956  	p.rules = _rules
  2957  }