github.com/webonyx/up@v0.7.4-0.20180808230834-91b94e551323/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  	ruleUnquotedString
    34  	ruleUnquotedStringStartChar
    35  	ruleUnquotedStringChar
    36  	ruleEscape
    37  	ruleSimpleEscape
    38  	ruleOctalEscape
    39  	ruleHexEscape
    40  	ruleUniversalCharacter
    41  	ruleHexQuad
    42  	ruleHexDigit
    43  	ruleNumbers
    44  	ruleNumber
    45  	ruleInteger
    46  	ruleFloat
    47  	ruleFraction
    48  	ruleExponent
    49  	ruleStage
    50  	ruleDEVELOPMENT
    51  	ruleSTAGING
    52  	rulePRODUCTION
    53  	ruleUnit
    54  	ruleDuration
    55  	ruleS
    56  	ruleMS
    57  	ruleBytes
    58  	ruleB
    59  	ruleKB
    60  	ruleMB
    61  	ruleGB
    62  	ruleId
    63  	ruleIdChar
    64  	ruleIdCharNoDigit
    65  	ruleSeverity
    66  	ruleIN
    67  	ruleOR
    68  	ruleAND
    69  	ruleNOT
    70  	ruleCONTAINS
    71  	ruleDEBUG
    72  	ruleINFO
    73  	ruleWARN
    74  	ruleERROR
    75  	ruleFATAL
    76  	ruleKeyword
    77  	ruleEQ
    78  	ruleLBRK
    79  	ruleRBRK
    80  	ruleLPAR
    81  	ruleRPAR
    82  	ruleDOT
    83  	ruleBANG
    84  	ruleLT
    85  	ruleGT
    86  	ruleLE
    87  	ruleEQEQ
    88  	ruleGE
    89  	ruleNE
    90  	ruleANDAND
    91  	ruleOROR
    92  	ruleCOMMA
    93  	rule_
    94  	ruleWhitespace
    95  	ruleEOL
    96  	ruleEOF
    97  	ruleAction0
    98  	ruleAction1
    99  	ruleAction2
   100  	ruleAction3
   101  	ruleAction4
   102  	ruleAction5
   103  	ruleAction6
   104  	ruleAction7
   105  	ruleAction8
   106  	ruleAction9
   107  	ruleAction10
   108  	ruleAction11
   109  	ruleAction12
   110  	ruleAction13
   111  	ruleAction14
   112  	ruleAction15
   113  	ruleAction16
   114  	ruleAction17
   115  	ruleAction18
   116  	ruleAction19
   117  	ruleAction20
   118  	ruleAction21
   119  	ruleAction22
   120  	ruleAction23
   121  	ruleAction24
   122  	ruleAction25
   123  	ruleAction26
   124  	ruleAction27
   125  	ruleAction28
   126  	ruleAction29
   127  	ruleAction30
   128  	rulePegText
   129  	ruleAction31
   130  )
   131  
   132  var rul3s = [...]string{
   133  	"Unknown",
   134  	"Query",
   135  	"PrimaryExpr",
   136  	"TupleExpr",
   137  	"InExpr",
   138  	"NotInExpr",
   139  	"PostfixExpr",
   140  	"UnaryExpr",
   141  	"RelationalExpr",
   142  	"EqualityExpr",
   143  	"LogicalAndExpr",
   144  	"LogicalOrExpr",
   145  	"LowNotExpr",
   146  	"Expr",
   147  	"String",
   148  	"StringChar",
   149  	"UnquotedString",
   150  	"UnquotedStringStartChar",
   151  	"UnquotedStringChar",
   152  	"Escape",
   153  	"SimpleEscape",
   154  	"OctalEscape",
   155  	"HexEscape",
   156  	"UniversalCharacter",
   157  	"HexQuad",
   158  	"HexDigit",
   159  	"Numbers",
   160  	"Number",
   161  	"Integer",
   162  	"Float",
   163  	"Fraction",
   164  	"Exponent",
   165  	"Stage",
   166  	"DEVELOPMENT",
   167  	"STAGING",
   168  	"PRODUCTION",
   169  	"Unit",
   170  	"Duration",
   171  	"S",
   172  	"MS",
   173  	"Bytes",
   174  	"B",
   175  	"KB",
   176  	"MB",
   177  	"GB",
   178  	"Id",
   179  	"IdChar",
   180  	"IdCharNoDigit",
   181  	"Severity",
   182  	"IN",
   183  	"OR",
   184  	"AND",
   185  	"NOT",
   186  	"CONTAINS",
   187  	"DEBUG",
   188  	"INFO",
   189  	"WARN",
   190  	"ERROR",
   191  	"FATAL",
   192  	"Keyword",
   193  	"EQ",
   194  	"LBRK",
   195  	"RBRK",
   196  	"LPAR",
   197  	"RPAR",
   198  	"DOT",
   199  	"BANG",
   200  	"LT",
   201  	"GT",
   202  	"LE",
   203  	"EQEQ",
   204  	"GE",
   205  	"NE",
   206  	"ANDAND",
   207  	"OROR",
   208  	"COMMA",
   209  	"_",
   210  	"Whitespace",
   211  	"EOL",
   212  	"EOF",
   213  	"Action0",
   214  	"Action1",
   215  	"Action2",
   216  	"Action3",
   217  	"Action4",
   218  	"Action5",
   219  	"Action6",
   220  	"Action7",
   221  	"Action8",
   222  	"Action9",
   223  	"Action10",
   224  	"Action11",
   225  	"Action12",
   226  	"Action13",
   227  	"Action14",
   228  	"Action15",
   229  	"Action16",
   230  	"Action17",
   231  	"Action18",
   232  	"Action19",
   233  	"Action20",
   234  	"Action21",
   235  	"Action22",
   236  	"Action23",
   237  	"Action24",
   238  	"Action25",
   239  	"Action26",
   240  	"Action27",
   241  	"Action28",
   242  	"Action29",
   243  	"Action30",
   244  	"PegText",
   245  	"Action31",
   246  }
   247  
   248  type token32 struct {
   249  	pegRule
   250  	begin, end uint32
   251  }
   252  
   253  func (t *token32) String() string {
   254  	return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end)
   255  }
   256  
   257  type node32 struct {
   258  	token32
   259  	up, next *node32
   260  }
   261  
   262  func (node *node32) print(pretty bool, buffer string) {
   263  	var print func(node *node32, depth int)
   264  	print = func(node *node32, depth int) {
   265  		for node != nil {
   266  			for c := 0; c < depth; c++ {
   267  				fmt.Printf(" ")
   268  			}
   269  			rule := rul3s[node.pegRule]
   270  			quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end])))
   271  			if !pretty {
   272  				fmt.Printf("%v %v\n", rule, quote)
   273  			} else {
   274  				fmt.Printf("\x1B[34m%v\x1B[m %v\n", rule, quote)
   275  			}
   276  			if node.up != nil {
   277  				print(node.up, depth+1)
   278  			}
   279  			node = node.next
   280  		}
   281  	}
   282  	print(node, 0)
   283  }
   284  
   285  func (node *node32) Print(buffer string) {
   286  	node.print(false, buffer)
   287  }
   288  
   289  func (node *node32) PrettyPrint(buffer string) {
   290  	node.print(true, buffer)
   291  }
   292  
   293  type tokens32 struct {
   294  	tree []token32
   295  }
   296  
   297  func (t *tokens32) Trim(length uint32) {
   298  	t.tree = t.tree[:length]
   299  }
   300  
   301  func (t *tokens32) Print() {
   302  	for _, token := range t.tree {
   303  		fmt.Println(token.String())
   304  	}
   305  }
   306  
   307  func (t *tokens32) AST() *node32 {
   308  	type element struct {
   309  		node *node32
   310  		down *element
   311  	}
   312  	tokens := t.Tokens()
   313  	var stack *element
   314  	for _, token := range tokens {
   315  		if token.begin == token.end {
   316  			continue
   317  		}
   318  		node := &node32{token32: token}
   319  		for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end {
   320  			stack.node.next = node.up
   321  			node.up = stack.node
   322  			stack = stack.down
   323  		}
   324  		stack = &element{node: node, down: stack}
   325  	}
   326  	if stack != nil {
   327  		return stack.node
   328  	}
   329  	return nil
   330  }
   331  
   332  func (t *tokens32) PrintSyntaxTree(buffer string) {
   333  	t.AST().Print(buffer)
   334  }
   335  
   336  func (t *tokens32) PrettyPrintSyntaxTree(buffer string) {
   337  	t.AST().PrettyPrint(buffer)
   338  }
   339  
   340  func (t *tokens32) Add(rule pegRule, begin, end, index uint32) {
   341  	if tree := t.tree; int(index) >= len(tree) {
   342  		expanded := make([]token32, 2*len(tree))
   343  		copy(expanded, tree)
   344  		t.tree = expanded
   345  	}
   346  	t.tree[index] = token32{
   347  		pegRule: rule,
   348  		begin:   begin,
   349  		end:     end,
   350  	}
   351  }
   352  
   353  func (t *tokens32) Tokens() []token32 {
   354  	return t.tree
   355  }
   356  
   357  type parser struct {
   358  	stack  []ast.Node
   359  	number string
   360  
   361  	Buffer string
   362  	buffer []rune
   363  	rules  [113]func() bool
   364  	parse  func(rule ...int) error
   365  	reset  func()
   366  	Pretty bool
   367  	tokens32
   368  }
   369  
   370  func (p *parser) Parse(rule ...int) error {
   371  	return p.parse(rule...)
   372  }
   373  
   374  func (p *parser) Reset() {
   375  	p.reset()
   376  }
   377  
   378  type textPosition struct {
   379  	line, symbol int
   380  }
   381  
   382  type textPositionMap map[int]textPosition
   383  
   384  func translatePositions(buffer []rune, positions []int) textPositionMap {
   385  	length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0
   386  	sort.Ints(positions)
   387  
   388  search:
   389  	for i, c := range buffer {
   390  		if c == '\n' {
   391  			line, symbol = line+1, 0
   392  		} else {
   393  			symbol++
   394  		}
   395  		if i == positions[j] {
   396  			translations[positions[j]] = textPosition{line, symbol}
   397  			for j++; j < length; j++ {
   398  				if i != positions[j] {
   399  					continue search
   400  				}
   401  			}
   402  			break search
   403  		}
   404  	}
   405  
   406  	return translations
   407  }
   408  
   409  type parseError struct {
   410  	p   *parser
   411  	max token32
   412  }
   413  
   414  func (e *parseError) Error() string {
   415  	tokens, error := []token32{e.max}, "\n"
   416  	positions, p := make([]int, 2*len(tokens)), 0
   417  	for _, token := range tokens {
   418  		positions[p], p = int(token.begin), p+1
   419  		positions[p], p = int(token.end), p+1
   420  	}
   421  	translations := translatePositions(e.p.buffer, positions)
   422  	format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n"
   423  	if e.p.Pretty {
   424  		format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n"
   425  	}
   426  	for _, token := range tokens {
   427  		begin, end := int(token.begin), int(token.end)
   428  		error += fmt.Sprintf(format,
   429  			rul3s[token.pegRule],
   430  			translations[begin].line, translations[begin].symbol,
   431  			translations[end].line, translations[end].symbol,
   432  			strconv.Quote(string(e.p.buffer[begin:end])))
   433  	}
   434  
   435  	return error
   436  }
   437  
   438  func (p *parser) PrintSyntaxTree() {
   439  	if p.Pretty {
   440  		p.tokens32.PrettyPrintSyntaxTree(p.Buffer)
   441  	} else {
   442  		p.tokens32.PrintSyntaxTree(p.Buffer)
   443  	}
   444  }
   445  
   446  func (p *parser) Execute() {
   447  	buffer, _buffer, text, begin, end := p.Buffer, p.buffer, "", 0, 0
   448  	for _, token := range p.Tokens() {
   449  		switch token.pegRule {
   450  
   451  		case rulePegText:
   452  			begin, end = int(token.begin), int(token.end)
   453  			text = string(_buffer[begin:end])
   454  
   455  		case ruleAction0:
   456  			p.AddNumber(text)
   457  		case ruleAction1:
   458  			p.AddNumber("")
   459  		case ruleAction2:
   460  			p.AddLevel(text)
   461  		case ruleAction3:
   462  			p.AddStage(text)
   463  		case ruleAction4:
   464  			p.AddField(text)
   465  		case ruleAction5:
   466  			p.AddString(text)
   467  		case ruleAction6:
   468  			p.AddString(text)
   469  		case ruleAction7:
   470  			p.AddExpr()
   471  		case ruleAction8:
   472  			p.AddTupleValue()
   473  		case ruleAction9:
   474  			p.AddTupleValue()
   475  		case ruleAction10:
   476  			p.AddTuple()
   477  		case ruleAction11:
   478  			p.AddBinary(ast.IN)
   479  		case ruleAction12:
   480  			p.AddTuple()
   481  		case ruleAction13:
   482  			p.AddBinary(ast.IN)
   483  			p.AddUnary(ast.LNOT)
   484  		case ruleAction14:
   485  			p.AddMember(text)
   486  		case ruleAction15:
   487  			p.AddSubscript(text)
   488  		case ruleAction16:
   489  			p.AddUnary(ast.NOT)
   490  		case ruleAction17:
   491  			p.AddBinary(ast.GE)
   492  		case ruleAction18:
   493  			p.AddBinary(ast.GT)
   494  		case ruleAction19:
   495  			p.AddBinary(ast.LE)
   496  		case ruleAction20:
   497  			p.AddBinary(ast.LT)
   498  		case ruleAction21:
   499  			p.AddBinary(ast.EQ)
   500  		case ruleAction22:
   501  			p.AddBinary(ast.NE)
   502  		case ruleAction23:
   503  			p.AddBinary(ast.EQ)
   504  		case ruleAction24:
   505  			p.AddBinaryContains()
   506  		case ruleAction25:
   507  			p.AddBinary(ast.AND)
   508  		case ruleAction26:
   509  			p.AddBinary(ast.AND)
   510  		case ruleAction27:
   511  			p.AddBinary(ast.AND)
   512  		case ruleAction28:
   513  			p.AddBinary(ast.OR)
   514  		case ruleAction29:
   515  			p.AddBinary(ast.OR)
   516  		case ruleAction30:
   517  			p.AddUnary(ast.LNOT)
   518  		case ruleAction31:
   519  			p.SetNumber(text)
   520  
   521  		}
   522  	}
   523  	_, _, _, _, _ = buffer, _buffer, text, begin, end
   524  }
   525  
   526  func (p *parser) Init() {
   527  	var (
   528  		max                  token32
   529  		position, tokenIndex uint32
   530  		buffer               []rune
   531  	)
   532  	p.reset = func() {
   533  		max = token32{}
   534  		position, tokenIndex = 0, 0
   535  
   536  		p.buffer = []rune(p.Buffer)
   537  		if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol {
   538  			p.buffer = append(p.buffer, endSymbol)
   539  		}
   540  		buffer = p.buffer
   541  	}
   542  	p.reset()
   543  
   544  	_rules := p.rules
   545  	tree := tokens32{tree: make([]token32, math.MaxInt16)}
   546  	p.parse = func(rule ...int) error {
   547  		r := 1
   548  		if len(rule) > 0 {
   549  			r = rule[0]
   550  		}
   551  		matches := p.rules[r]()
   552  		p.tokens32 = tree
   553  		if matches {
   554  			p.Trim(tokenIndex)
   555  			return nil
   556  		}
   557  		return &parseError{p, max}
   558  	}
   559  
   560  	add := func(rule pegRule, begin uint32) {
   561  		tree.Add(rule, begin, position, tokenIndex)
   562  		tokenIndex++
   563  		if begin != position && position > max.end {
   564  			max = token32{rule, begin, position}
   565  		}
   566  	}
   567  
   568  	matchDot := func() bool {
   569  		if buffer[position] != endSymbol {
   570  			position++
   571  			return true
   572  		}
   573  		return false
   574  	}
   575  
   576  	/*matchChar := func(c byte) bool {
   577  		if buffer[position] == c {
   578  			position++
   579  			return true
   580  		}
   581  		return false
   582  	}*/
   583  
   584  	/*matchRange := func(lower byte, upper byte) bool {
   585  		if c := buffer[position]; c >= lower && c <= upper {
   586  			position++
   587  			return true
   588  		}
   589  		return false
   590  	}*/
   591  
   592  	_rules = [...]func() bool{
   593  		nil,
   594  		/* 0 Query <- <(_ Expr _ EOF)> */
   595  		func() bool {
   596  			position0, tokenIndex0 := position, tokenIndex
   597  			{
   598  				position1 := position
   599  				if !_rules[rule_]() {
   600  					goto l0
   601  				}
   602  				if !_rules[ruleExpr]() {
   603  					goto l0
   604  				}
   605  				if !_rules[rule_]() {
   606  					goto l0
   607  				}
   608  				{
   609  					position2 := position
   610  					{
   611  						position3, tokenIndex3 := position, tokenIndex
   612  						if !matchDot() {
   613  							goto l3
   614  						}
   615  						goto l0
   616  					l3:
   617  						position, tokenIndex = position3, tokenIndex3
   618  					}
   619  					add(ruleEOF, position2)
   620  				}
   621  				add(ruleQuery, position1)
   622  			}
   623  			return true
   624  		l0:
   625  			position, tokenIndex = position0, tokenIndex0
   626  			return false
   627  		},
   628  		/* 1 PrimaryExpr <- <((Numbers Unit _ Action0) / (Severity Action2) / (Stage Action3) / (Id Action4) / ((&('(') (LPAR Expr RPAR Action7)) | (&('"') (String Action5)) | (&('\t' | '\n' | '\r' | ' ' | '.' | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') (Numbers _ Action1)) | (&('/' | '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') (UnquotedString Action6))))> */
   629  		nil,
   630  		/* 2 TupleExpr <- <(LPAR Expr Action8 (COMMA Expr Action9)* RPAR)> */
   631  		func() bool {
   632  			position5, tokenIndex5 := position, tokenIndex
   633  			{
   634  				position6 := position
   635  				if !_rules[ruleLPAR]() {
   636  					goto l5
   637  				}
   638  				if !_rules[ruleExpr]() {
   639  					goto l5
   640  				}
   641  				{
   642  					add(ruleAction8, position)
   643  				}
   644  			l8:
   645  				{
   646  					position9, tokenIndex9 := position, tokenIndex
   647  					{
   648  						position10 := position
   649  						if buffer[position] != rune(',') {
   650  							goto l9
   651  						}
   652  						position++
   653  						if !_rules[rule_]() {
   654  							goto l9
   655  						}
   656  						add(ruleCOMMA, position10)
   657  					}
   658  					if !_rules[ruleExpr]() {
   659  						goto l9
   660  					}
   661  					{
   662  						add(ruleAction9, position)
   663  					}
   664  					goto l8
   665  				l9:
   666  					position, tokenIndex = position9, tokenIndex9
   667  				}
   668  				if !_rules[ruleRPAR]() {
   669  					goto l5
   670  				}
   671  				add(ruleTupleExpr, position6)
   672  			}
   673  			return true
   674  		l5:
   675  			position, tokenIndex = position5, tokenIndex5
   676  			return false
   677  		},
   678  		/* 3 InExpr <- <(IN Action10 TupleExpr Action11)> */
   679  		nil,
   680  		/* 4 NotInExpr <- <(NOT IN Action12 TupleExpr Action13)> */
   681  		nil,
   682  		/* 5 PostfixExpr <- <(PrimaryExpr ((&('n') NotInExpr) | (&('i') InExpr) | (&('[') (LBRK Number _ RBRK Action15)) | (&('.') (DOT Id Action14)))*)> */
   683  		nil,
   684  		/* 6 UnaryExpr <- <(PostfixExpr / (BANG RelationalExpr Action16))> */
   685  		func() bool {
   686  			position15, tokenIndex15 := position, tokenIndex
   687  			{
   688  				position16 := position
   689  				{
   690  					position17, tokenIndex17 := position, tokenIndex
   691  					{
   692  						position19 := position
   693  						{
   694  							position20 := position
   695  							{
   696  								position21, tokenIndex21 := position, tokenIndex
   697  								if !_rules[ruleNumbers]() {
   698  									goto l22
   699  								}
   700  								{
   701  									position23 := position
   702  									{
   703  										position24, tokenIndex24 := position, tokenIndex
   704  										{
   705  											position26 := position
   706  											{
   707  												switch buffer[position] {
   708  												case 'g':
   709  													{
   710  														position28 := position
   711  														{
   712  															position29 := position
   713  															if buffer[position] != rune('g') {
   714  																goto l25
   715  															}
   716  															position++
   717  															if buffer[position] != rune('b') {
   718  																goto l25
   719  															}
   720  															position++
   721  															add(rulePegText, position29)
   722  														}
   723  														{
   724  															position30, tokenIndex30 := position, tokenIndex
   725  															if !_rules[ruleIdChar]() {
   726  																goto l30
   727  															}
   728  															goto l25
   729  														l30:
   730  															position, tokenIndex = position30, tokenIndex30
   731  														}
   732  														if !_rules[rule_]() {
   733  															goto l25
   734  														}
   735  														add(ruleGB, position28)
   736  													}
   737  													break
   738  												case 'm':
   739  													{
   740  														position31 := position
   741  														{
   742  															position32 := position
   743  															if buffer[position] != rune('m') {
   744  																goto l25
   745  															}
   746  															position++
   747  															if buffer[position] != rune('b') {
   748  																goto l25
   749  															}
   750  															position++
   751  															add(rulePegText, position32)
   752  														}
   753  														{
   754  															position33, tokenIndex33 := position, tokenIndex
   755  															if !_rules[ruleIdChar]() {
   756  																goto l33
   757  															}
   758  															goto l25
   759  														l33:
   760  															position, tokenIndex = position33, tokenIndex33
   761  														}
   762  														if !_rules[rule_]() {
   763  															goto l25
   764  														}
   765  														add(ruleMB, position31)
   766  													}
   767  													break
   768  												case 'k':
   769  													{
   770  														position34 := position
   771  														{
   772  															position35 := position
   773  															if buffer[position] != rune('k') {
   774  																goto l25
   775  															}
   776  															position++
   777  															if buffer[position] != rune('b') {
   778  																goto l25
   779  															}
   780  															position++
   781  															add(rulePegText, position35)
   782  														}
   783  														{
   784  															position36, tokenIndex36 := position, tokenIndex
   785  															if !_rules[ruleIdChar]() {
   786  																goto l36
   787  															}
   788  															goto l25
   789  														l36:
   790  															position, tokenIndex = position36, tokenIndex36
   791  														}
   792  														if !_rules[rule_]() {
   793  															goto l25
   794  														}
   795  														add(ruleKB, position34)
   796  													}
   797  													break
   798  												default:
   799  													{
   800  														position37 := position
   801  														{
   802  															position38 := position
   803  															if buffer[position] != rune('b') {
   804  																goto l25
   805  															}
   806  															position++
   807  															add(rulePegText, position38)
   808  														}
   809  														{
   810  															position39, tokenIndex39 := position, tokenIndex
   811  															if !_rules[ruleIdChar]() {
   812  																goto l39
   813  															}
   814  															goto l25
   815  														l39:
   816  															position, tokenIndex = position39, tokenIndex39
   817  														}
   818  														if !_rules[rule_]() {
   819  															goto l25
   820  														}
   821  														add(ruleB, position37)
   822  													}
   823  													break
   824  												}
   825  											}
   826  
   827  											add(ruleBytes, position26)
   828  										}
   829  										goto l24
   830  									l25:
   831  										position, tokenIndex = position24, tokenIndex24
   832  										{
   833  											position40 := position
   834  											{
   835  												position41, tokenIndex41 := position, tokenIndex
   836  												{
   837  													position43 := position
   838  													{
   839  														position44 := position
   840  														if buffer[position] != rune('s') {
   841  															goto l42
   842  														}
   843  														position++
   844  														add(rulePegText, position44)
   845  													}
   846  													{
   847  														position45, tokenIndex45 := position, tokenIndex
   848  														if !_rules[ruleIdChar]() {
   849  															goto l45
   850  														}
   851  														goto l42
   852  													l45:
   853  														position, tokenIndex = position45, tokenIndex45
   854  													}
   855  													if !_rules[rule_]() {
   856  														goto l42
   857  													}
   858  													add(ruleS, position43)
   859  												}
   860  												goto l41
   861  											l42:
   862  												position, tokenIndex = position41, tokenIndex41
   863  												{
   864  													position46 := position
   865  													{
   866  														position47 := position
   867  														if buffer[position] != rune('m') {
   868  															goto l22
   869  														}
   870  														position++
   871  														if buffer[position] != rune('s') {
   872  															goto l22
   873  														}
   874  														position++
   875  														add(rulePegText, position47)
   876  													}
   877  													{
   878  														position48, tokenIndex48 := position, tokenIndex
   879  														if !_rules[ruleIdChar]() {
   880  															goto l48
   881  														}
   882  														goto l22
   883  													l48:
   884  														position, tokenIndex = position48, tokenIndex48
   885  													}
   886  													if !_rules[rule_]() {
   887  														goto l22
   888  													}
   889  													add(ruleMS, position46)
   890  												}
   891  											}
   892  										l41:
   893  											add(ruleDuration, position40)
   894  										}
   895  									}
   896  								l24:
   897  									add(ruleUnit, position23)
   898  								}
   899  								if !_rules[rule_]() {
   900  									goto l22
   901  								}
   902  								{
   903  									add(ruleAction0, position)
   904  								}
   905  								goto l21
   906  							l22:
   907  								position, tokenIndex = position21, tokenIndex21
   908  								{
   909  									position51 := position
   910  									{
   911  										switch buffer[position] {
   912  										case 'f':
   913  											{
   914  												position53 := position
   915  												{
   916  													position54 := position
   917  													if buffer[position] != rune('f') {
   918  														goto l50
   919  													}
   920  													position++
   921  													if buffer[position] != rune('a') {
   922  														goto l50
   923  													}
   924  													position++
   925  													if buffer[position] != rune('t') {
   926  														goto l50
   927  													}
   928  													position++
   929  													if buffer[position] != rune('a') {
   930  														goto l50
   931  													}
   932  													position++
   933  													if buffer[position] != rune('l') {
   934  														goto l50
   935  													}
   936  													position++
   937  													add(rulePegText, position54)
   938  												}
   939  												{
   940  													position55, tokenIndex55 := position, tokenIndex
   941  													if !_rules[ruleIdChar]() {
   942  														goto l55
   943  													}
   944  													goto l50
   945  												l55:
   946  													position, tokenIndex = position55, tokenIndex55
   947  												}
   948  												if !_rules[rule_]() {
   949  													goto l50
   950  												}
   951  												add(ruleFATAL, position53)
   952  											}
   953  											break
   954  										case 'e':
   955  											{
   956  												position56 := position
   957  												{
   958  													position57 := position
   959  													if buffer[position] != rune('e') {
   960  														goto l50
   961  													}
   962  													position++
   963  													if buffer[position] != rune('r') {
   964  														goto l50
   965  													}
   966  													position++
   967  													if buffer[position] != rune('r') {
   968  														goto l50
   969  													}
   970  													position++
   971  													if buffer[position] != rune('o') {
   972  														goto l50
   973  													}
   974  													position++
   975  													if buffer[position] != rune('r') {
   976  														goto l50
   977  													}
   978  													position++
   979  													add(rulePegText, position57)
   980  												}
   981  												{
   982  													position58, tokenIndex58 := position, tokenIndex
   983  													if !_rules[ruleIdChar]() {
   984  														goto l58
   985  													}
   986  													goto l50
   987  												l58:
   988  													position, tokenIndex = position58, tokenIndex58
   989  												}
   990  												if !_rules[rule_]() {
   991  													goto l50
   992  												}
   993  												add(ruleERROR, position56)
   994  											}
   995  											break
   996  										case 'w':
   997  											{
   998  												position59 := position
   999  												{
  1000  													position60 := position
  1001  													if buffer[position] != rune('w') {
  1002  														goto l50
  1003  													}
  1004  													position++
  1005  													if buffer[position] != rune('a') {
  1006  														goto l50
  1007  													}
  1008  													position++
  1009  													if buffer[position] != rune('r') {
  1010  														goto l50
  1011  													}
  1012  													position++
  1013  													if buffer[position] != rune('n') {
  1014  														goto l50
  1015  													}
  1016  													position++
  1017  													add(rulePegText, position60)
  1018  												}
  1019  												{
  1020  													position61, tokenIndex61 := position, tokenIndex
  1021  													if !_rules[ruleIdChar]() {
  1022  														goto l61
  1023  													}
  1024  													goto l50
  1025  												l61:
  1026  													position, tokenIndex = position61, tokenIndex61
  1027  												}
  1028  												if !_rules[rule_]() {
  1029  													goto l50
  1030  												}
  1031  												add(ruleWARN, position59)
  1032  											}
  1033  											break
  1034  										case 'i':
  1035  											{
  1036  												position62 := position
  1037  												{
  1038  													position63 := position
  1039  													if buffer[position] != rune('i') {
  1040  														goto l50
  1041  													}
  1042  													position++
  1043  													if buffer[position] != rune('n') {
  1044  														goto l50
  1045  													}
  1046  													position++
  1047  													if buffer[position] != rune('f') {
  1048  														goto l50
  1049  													}
  1050  													position++
  1051  													if buffer[position] != rune('o') {
  1052  														goto l50
  1053  													}
  1054  													position++
  1055  													add(rulePegText, position63)
  1056  												}
  1057  												{
  1058  													position64, tokenIndex64 := position, tokenIndex
  1059  													if !_rules[ruleIdChar]() {
  1060  														goto l64
  1061  													}
  1062  													goto l50
  1063  												l64:
  1064  													position, tokenIndex = position64, tokenIndex64
  1065  												}
  1066  												if !_rules[rule_]() {
  1067  													goto l50
  1068  												}
  1069  												add(ruleINFO, position62)
  1070  											}
  1071  											break
  1072  										default:
  1073  											{
  1074  												position65 := position
  1075  												{
  1076  													position66 := position
  1077  													if buffer[position] != rune('d') {
  1078  														goto l50
  1079  													}
  1080  													position++
  1081  													if buffer[position] != rune('e') {
  1082  														goto l50
  1083  													}
  1084  													position++
  1085  													if buffer[position] != rune('b') {
  1086  														goto l50
  1087  													}
  1088  													position++
  1089  													if buffer[position] != rune('u') {
  1090  														goto l50
  1091  													}
  1092  													position++
  1093  													if buffer[position] != rune('g') {
  1094  														goto l50
  1095  													}
  1096  													position++
  1097  													add(rulePegText, position66)
  1098  												}
  1099  												{
  1100  													position67, tokenIndex67 := position, tokenIndex
  1101  													if !_rules[ruleIdChar]() {
  1102  														goto l67
  1103  													}
  1104  													goto l50
  1105  												l67:
  1106  													position, tokenIndex = position67, tokenIndex67
  1107  												}
  1108  												if !_rules[rule_]() {
  1109  													goto l50
  1110  												}
  1111  												add(ruleDEBUG, position65)
  1112  											}
  1113  											break
  1114  										}
  1115  									}
  1116  
  1117  									add(ruleSeverity, position51)
  1118  								}
  1119  								{
  1120  									add(ruleAction2, position)
  1121  								}
  1122  								goto l21
  1123  							l50:
  1124  								position, tokenIndex = position21, tokenIndex21
  1125  								{
  1126  									position70 := position
  1127  									{
  1128  										switch buffer[position] {
  1129  										case 'p':
  1130  											{
  1131  												position72 := position
  1132  												{
  1133  													position73 := position
  1134  													if buffer[position] != rune('p') {
  1135  														goto l69
  1136  													}
  1137  													position++
  1138  													if buffer[position] != rune('r') {
  1139  														goto l69
  1140  													}
  1141  													position++
  1142  													if buffer[position] != rune('o') {
  1143  														goto l69
  1144  													}
  1145  													position++
  1146  													if buffer[position] != rune('d') {
  1147  														goto l69
  1148  													}
  1149  													position++
  1150  													if buffer[position] != rune('u') {
  1151  														goto l69
  1152  													}
  1153  													position++
  1154  													if buffer[position] != rune('c') {
  1155  														goto l69
  1156  													}
  1157  													position++
  1158  													if buffer[position] != rune('t') {
  1159  														goto l69
  1160  													}
  1161  													position++
  1162  													if buffer[position] != rune('i') {
  1163  														goto l69
  1164  													}
  1165  													position++
  1166  													if buffer[position] != rune('o') {
  1167  														goto l69
  1168  													}
  1169  													position++
  1170  													if buffer[position] != rune('n') {
  1171  														goto l69
  1172  													}
  1173  													position++
  1174  													add(rulePegText, position73)
  1175  												}
  1176  												{
  1177  													position74, tokenIndex74 := position, tokenIndex
  1178  													if !_rules[ruleIdChar]() {
  1179  														goto l74
  1180  													}
  1181  													goto l69
  1182  												l74:
  1183  													position, tokenIndex = position74, tokenIndex74
  1184  												}
  1185  												if !_rules[rule_]() {
  1186  													goto l69
  1187  												}
  1188  												add(rulePRODUCTION, position72)
  1189  											}
  1190  											break
  1191  										case 's':
  1192  											{
  1193  												position75 := position
  1194  												{
  1195  													position76 := position
  1196  													if buffer[position] != rune('s') {
  1197  														goto l69
  1198  													}
  1199  													position++
  1200  													if buffer[position] != rune('t') {
  1201  														goto l69
  1202  													}
  1203  													position++
  1204  													if buffer[position] != rune('a') {
  1205  														goto l69
  1206  													}
  1207  													position++
  1208  													if buffer[position] != rune('g') {
  1209  														goto l69
  1210  													}
  1211  													position++
  1212  													if buffer[position] != rune('i') {
  1213  														goto l69
  1214  													}
  1215  													position++
  1216  													if buffer[position] != rune('n') {
  1217  														goto l69
  1218  													}
  1219  													position++
  1220  													if buffer[position] != rune('g') {
  1221  														goto l69
  1222  													}
  1223  													position++
  1224  													add(rulePegText, position76)
  1225  												}
  1226  												{
  1227  													position77, tokenIndex77 := position, tokenIndex
  1228  													if !_rules[ruleIdChar]() {
  1229  														goto l77
  1230  													}
  1231  													goto l69
  1232  												l77:
  1233  													position, tokenIndex = position77, tokenIndex77
  1234  												}
  1235  												if !_rules[rule_]() {
  1236  													goto l69
  1237  												}
  1238  												add(ruleSTAGING, position75)
  1239  											}
  1240  											break
  1241  										default:
  1242  											{
  1243  												position78 := position
  1244  												{
  1245  													position79 := position
  1246  													if buffer[position] != rune('d') {
  1247  														goto l69
  1248  													}
  1249  													position++
  1250  													if buffer[position] != rune('e') {
  1251  														goto l69
  1252  													}
  1253  													position++
  1254  													if buffer[position] != rune('v') {
  1255  														goto l69
  1256  													}
  1257  													position++
  1258  													if buffer[position] != rune('e') {
  1259  														goto l69
  1260  													}
  1261  													position++
  1262  													if buffer[position] != rune('l') {
  1263  														goto l69
  1264  													}
  1265  													position++
  1266  													if buffer[position] != rune('o') {
  1267  														goto l69
  1268  													}
  1269  													position++
  1270  													if buffer[position] != rune('p') {
  1271  														goto l69
  1272  													}
  1273  													position++
  1274  													if buffer[position] != rune('m') {
  1275  														goto l69
  1276  													}
  1277  													position++
  1278  													if buffer[position] != rune('e') {
  1279  														goto l69
  1280  													}
  1281  													position++
  1282  													if buffer[position] != rune('n') {
  1283  														goto l69
  1284  													}
  1285  													position++
  1286  													if buffer[position] != rune('t') {
  1287  														goto l69
  1288  													}
  1289  													position++
  1290  													add(rulePegText, position79)
  1291  												}
  1292  												{
  1293  													position80, tokenIndex80 := position, tokenIndex
  1294  													if !_rules[ruleIdChar]() {
  1295  														goto l80
  1296  													}
  1297  													goto l69
  1298  												l80:
  1299  													position, tokenIndex = position80, tokenIndex80
  1300  												}
  1301  												if !_rules[rule_]() {
  1302  													goto l69
  1303  												}
  1304  												add(ruleDEVELOPMENT, position78)
  1305  											}
  1306  											break
  1307  										}
  1308  									}
  1309  
  1310  									add(ruleStage, position70)
  1311  								}
  1312  								{
  1313  									add(ruleAction3, position)
  1314  								}
  1315  								goto l21
  1316  							l69:
  1317  								position, tokenIndex = position21, tokenIndex21
  1318  								if !_rules[ruleId]() {
  1319  									goto l82
  1320  								}
  1321  								{
  1322  									add(ruleAction4, position)
  1323  								}
  1324  								goto l21
  1325  							l82:
  1326  								position, tokenIndex = position21, tokenIndex21
  1327  								{
  1328  									switch buffer[position] {
  1329  									case '(':
  1330  										if !_rules[ruleLPAR]() {
  1331  											goto l18
  1332  										}
  1333  										if !_rules[ruleExpr]() {
  1334  											goto l18
  1335  										}
  1336  										if !_rules[ruleRPAR]() {
  1337  											goto l18
  1338  										}
  1339  										{
  1340  											add(ruleAction7, position)
  1341  										}
  1342  										break
  1343  									case '"':
  1344  										{
  1345  											position86 := position
  1346  											if buffer[position] != rune('"') {
  1347  												goto l18
  1348  											}
  1349  											position++
  1350  											{
  1351  												position87 := position
  1352  											l88:
  1353  												{
  1354  													position89, tokenIndex89 := position, tokenIndex
  1355  													{
  1356  														position90 := position
  1357  														{
  1358  															position91, tokenIndex91 := position, tokenIndex
  1359  															{
  1360  																position93 := position
  1361  																{
  1362  																	position94, tokenIndex94 := position, tokenIndex
  1363  																	{
  1364  																		position96 := position
  1365  																		if buffer[position] != rune('\\') {
  1366  																			goto l95
  1367  																		}
  1368  																		position++
  1369  																		{
  1370  																			switch buffer[position] {
  1371  																			case 'v':
  1372  																				if buffer[position] != rune('v') {
  1373  																					goto l95
  1374  																				}
  1375  																				position++
  1376  																				break
  1377  																			case 't':
  1378  																				if buffer[position] != rune('t') {
  1379  																					goto l95
  1380  																				}
  1381  																				position++
  1382  																				break
  1383  																			case 'r':
  1384  																				if buffer[position] != rune('r') {
  1385  																					goto l95
  1386  																				}
  1387  																				position++
  1388  																				break
  1389  																			case 'n':
  1390  																				if buffer[position] != rune('n') {
  1391  																					goto l95
  1392  																				}
  1393  																				position++
  1394  																				break
  1395  																			case 'f':
  1396  																				if buffer[position] != rune('f') {
  1397  																					goto l95
  1398  																				}
  1399  																				position++
  1400  																				break
  1401  																			case 'b':
  1402  																				if buffer[position] != rune('b') {
  1403  																					goto l95
  1404  																				}
  1405  																				position++
  1406  																				break
  1407  																			case 'a':
  1408  																				if buffer[position] != rune('a') {
  1409  																					goto l95
  1410  																				}
  1411  																				position++
  1412  																				break
  1413  																			case '\\':
  1414  																				if buffer[position] != rune('\\') {
  1415  																					goto l95
  1416  																				}
  1417  																				position++
  1418  																				break
  1419  																			case '?':
  1420  																				if buffer[position] != rune('?') {
  1421  																					goto l95
  1422  																				}
  1423  																				position++
  1424  																				break
  1425  																			case '"':
  1426  																				if buffer[position] != rune('"') {
  1427  																					goto l95
  1428  																				}
  1429  																				position++
  1430  																				break
  1431  																			default:
  1432  																				if buffer[position] != rune('\'') {
  1433  																					goto l95
  1434  																				}
  1435  																				position++
  1436  																				break
  1437  																			}
  1438  																		}
  1439  
  1440  																		add(ruleSimpleEscape, position96)
  1441  																	}
  1442  																	goto l94
  1443  																l95:
  1444  																	position, tokenIndex = position94, tokenIndex94
  1445  																	{
  1446  																		position99 := position
  1447  																		if buffer[position] != rune('\\') {
  1448  																			goto l98
  1449  																		}
  1450  																		position++
  1451  																		if c := buffer[position]; c < rune('0') || c > rune('7') {
  1452  																			goto l98
  1453  																		}
  1454  																		position++
  1455  																		{
  1456  																			position100, tokenIndex100 := position, tokenIndex
  1457  																			if c := buffer[position]; c < rune('0') || c > rune('7') {
  1458  																				goto l100
  1459  																			}
  1460  																			position++
  1461  																			goto l101
  1462  																		l100:
  1463  																			position, tokenIndex = position100, tokenIndex100
  1464  																		}
  1465  																	l101:
  1466  																		{
  1467  																			position102, tokenIndex102 := position, tokenIndex
  1468  																			if c := buffer[position]; c < rune('0') || c > rune('7') {
  1469  																				goto l102
  1470  																			}
  1471  																			position++
  1472  																			goto l103
  1473  																		l102:
  1474  																			position, tokenIndex = position102, tokenIndex102
  1475  																		}
  1476  																	l103:
  1477  																		add(ruleOctalEscape, position99)
  1478  																	}
  1479  																	goto l94
  1480  																l98:
  1481  																	position, tokenIndex = position94, tokenIndex94
  1482  																	{
  1483  																		position105 := position
  1484  																		if buffer[position] != rune('\\') {
  1485  																			goto l104
  1486  																		}
  1487  																		position++
  1488  																		if buffer[position] != rune('x') {
  1489  																			goto l104
  1490  																		}
  1491  																		position++
  1492  																		if !_rules[ruleHexDigit]() {
  1493  																			goto l104
  1494  																		}
  1495  																	l106:
  1496  																		{
  1497  																			position107, tokenIndex107 := position, tokenIndex
  1498  																			if !_rules[ruleHexDigit]() {
  1499  																				goto l107
  1500  																			}
  1501  																			goto l106
  1502  																		l107:
  1503  																			position, tokenIndex = position107, tokenIndex107
  1504  																		}
  1505  																		add(ruleHexEscape, position105)
  1506  																	}
  1507  																	goto l94
  1508  																l104:
  1509  																	position, tokenIndex = position94, tokenIndex94
  1510  																	{
  1511  																		position108 := position
  1512  																		{
  1513  																			position109, tokenIndex109 := position, tokenIndex
  1514  																			if buffer[position] != rune('\\') {
  1515  																				goto l110
  1516  																			}
  1517  																			position++
  1518  																			if buffer[position] != rune('u') {
  1519  																				goto l110
  1520  																			}
  1521  																			position++
  1522  																			if !_rules[ruleHexQuad]() {
  1523  																				goto l110
  1524  																			}
  1525  																			goto l109
  1526  																		l110:
  1527  																			position, tokenIndex = position109, tokenIndex109
  1528  																			if buffer[position] != rune('\\') {
  1529  																				goto l92
  1530  																			}
  1531  																			position++
  1532  																			if buffer[position] != rune('U') {
  1533  																				goto l92
  1534  																			}
  1535  																			position++
  1536  																			if !_rules[ruleHexQuad]() {
  1537  																				goto l92
  1538  																			}
  1539  																			if !_rules[ruleHexQuad]() {
  1540  																				goto l92
  1541  																			}
  1542  																		}
  1543  																	l109:
  1544  																		add(ruleUniversalCharacter, position108)
  1545  																	}
  1546  																}
  1547  															l94:
  1548  																add(ruleEscape, position93)
  1549  															}
  1550  															goto l91
  1551  														l92:
  1552  															position, tokenIndex = position91, tokenIndex91
  1553  															{
  1554  																position111, tokenIndex111 := position, tokenIndex
  1555  																{
  1556  																	switch buffer[position] {
  1557  																	case '\\':
  1558  																		if buffer[position] != rune('\\') {
  1559  																			goto l111
  1560  																		}
  1561  																		position++
  1562  																		break
  1563  																	case '\n':
  1564  																		if buffer[position] != rune('\n') {
  1565  																			goto l111
  1566  																		}
  1567  																		position++
  1568  																		break
  1569  																	default:
  1570  																		if buffer[position] != rune('"') {
  1571  																			goto l111
  1572  																		}
  1573  																		position++
  1574  																		break
  1575  																	}
  1576  																}
  1577  
  1578  																goto l89
  1579  															l111:
  1580  																position, tokenIndex = position111, tokenIndex111
  1581  															}
  1582  															if !matchDot() {
  1583  																goto l89
  1584  															}
  1585  														}
  1586  													l91:
  1587  														add(ruleStringChar, position90)
  1588  													}
  1589  													goto l88
  1590  												l89:
  1591  													position, tokenIndex = position89, tokenIndex89
  1592  												}
  1593  												add(rulePegText, position87)
  1594  											}
  1595  											if buffer[position] != rune('"') {
  1596  												goto l18
  1597  											}
  1598  											position++
  1599  											if !_rules[rule_]() {
  1600  												goto l18
  1601  											}
  1602  											add(ruleString, position86)
  1603  										}
  1604  										{
  1605  											add(ruleAction5, position)
  1606  										}
  1607  										break
  1608  									case '\t', '\n', '\r', ' ', '.', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
  1609  										if !_rules[ruleNumbers]() {
  1610  											goto l18
  1611  										}
  1612  										if !_rules[rule_]() {
  1613  											goto l18
  1614  										}
  1615  										{
  1616  											add(ruleAction1, position)
  1617  										}
  1618  										break
  1619  									default:
  1620  										{
  1621  											position115 := position
  1622  											{
  1623  												position116, tokenIndex116 := position, tokenIndex
  1624  												if !_rules[ruleKeyword]() {
  1625  													goto l116
  1626  												}
  1627  												goto l18
  1628  											l116:
  1629  												position, tokenIndex = position116, tokenIndex116
  1630  											}
  1631  											{
  1632  												position117 := position
  1633  												{
  1634  													position118 := position
  1635  													{
  1636  														switch buffer[position] {
  1637  														case '/', '_':
  1638  															{
  1639  																position120, tokenIndex120 := position, tokenIndex
  1640  																if buffer[position] != rune('/') {
  1641  																	goto l121
  1642  																}
  1643  																position++
  1644  																goto l120
  1645  															l121:
  1646  																position, tokenIndex = position120, tokenIndex120
  1647  																if buffer[position] != rune('_') {
  1648  																	goto l18
  1649  																}
  1650  																position++
  1651  															}
  1652  														l120:
  1653  															break
  1654  														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':
  1655  															if c := buffer[position]; c < rune('A') || c > rune('Z') {
  1656  																goto l18
  1657  															}
  1658  															position++
  1659  															break
  1660  														default:
  1661  															if c := buffer[position]; c < rune('a') || c > rune('z') {
  1662  																goto l18
  1663  															}
  1664  															position++
  1665  															break
  1666  														}
  1667  													}
  1668  
  1669  													add(ruleUnquotedStringStartChar, position118)
  1670  												}
  1671  											l122:
  1672  												{
  1673  													position123, tokenIndex123 := position, tokenIndex
  1674  													{
  1675  														position124 := position
  1676  														{
  1677  															switch buffer[position] {
  1678  															case '/', '_':
  1679  																{
  1680  																	position126, tokenIndex126 := position, tokenIndex
  1681  																	if buffer[position] != rune('/') {
  1682  																		goto l127
  1683  																	}
  1684  																	position++
  1685  																	goto l126
  1686  																l127:
  1687  																	position, tokenIndex = position126, tokenIndex126
  1688  																	if buffer[position] != rune('_') {
  1689  																		goto l123
  1690  																	}
  1691  																	position++
  1692  																}
  1693  															l126:
  1694  																break
  1695  															case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
  1696  																if c := buffer[position]; c < rune('0') || c > rune('9') {
  1697  																	goto l123
  1698  																}
  1699  																position++
  1700  																break
  1701  															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':
  1702  																if c := buffer[position]; c < rune('A') || c > rune('Z') {
  1703  																	goto l123
  1704  																}
  1705  																position++
  1706  																break
  1707  															default:
  1708  																if c := buffer[position]; c < rune('a') || c > rune('z') {
  1709  																	goto l123
  1710  																}
  1711  																position++
  1712  																break
  1713  															}
  1714  														}
  1715  
  1716  														add(ruleUnquotedStringChar, position124)
  1717  													}
  1718  													goto l122
  1719  												l123:
  1720  													position, tokenIndex = position123, tokenIndex123
  1721  												}
  1722  												add(rulePegText, position117)
  1723  											}
  1724  											if !_rules[rule_]() {
  1725  												goto l18
  1726  											}
  1727  											add(ruleUnquotedString, position115)
  1728  										}
  1729  										{
  1730  											add(ruleAction6, position)
  1731  										}
  1732  										break
  1733  									}
  1734  								}
  1735  
  1736  							}
  1737  						l21:
  1738  							add(rulePrimaryExpr, position20)
  1739  						}
  1740  					l129:
  1741  						{
  1742  							position130, tokenIndex130 := position, tokenIndex
  1743  							{
  1744  								switch buffer[position] {
  1745  								case 'n':
  1746  									{
  1747  										position132 := position
  1748  										if !_rules[ruleNOT]() {
  1749  											goto l130
  1750  										}
  1751  										if !_rules[ruleIN]() {
  1752  											goto l130
  1753  										}
  1754  										{
  1755  											add(ruleAction12, position)
  1756  										}
  1757  										if !_rules[ruleTupleExpr]() {
  1758  											goto l130
  1759  										}
  1760  										{
  1761  											add(ruleAction13, position)
  1762  										}
  1763  										add(ruleNotInExpr, position132)
  1764  									}
  1765  									break
  1766  								case 'i':
  1767  									{
  1768  										position135 := position
  1769  										if !_rules[ruleIN]() {
  1770  											goto l130
  1771  										}
  1772  										{
  1773  											add(ruleAction10, position)
  1774  										}
  1775  										if !_rules[ruleTupleExpr]() {
  1776  											goto l130
  1777  										}
  1778  										{
  1779  											add(ruleAction11, position)
  1780  										}
  1781  										add(ruleInExpr, position135)
  1782  									}
  1783  									break
  1784  								case '[':
  1785  									{
  1786  										position138 := position
  1787  										if buffer[position] != rune('[') {
  1788  											goto l130
  1789  										}
  1790  										position++
  1791  										if !_rules[rule_]() {
  1792  											goto l130
  1793  										}
  1794  										add(ruleLBRK, position138)
  1795  									}
  1796  									if !_rules[ruleNumber]() {
  1797  										goto l130
  1798  									}
  1799  									if !_rules[rule_]() {
  1800  										goto l130
  1801  									}
  1802  									{
  1803  										position139 := position
  1804  										if buffer[position] != rune(']') {
  1805  											goto l130
  1806  										}
  1807  										position++
  1808  										if !_rules[rule_]() {
  1809  											goto l130
  1810  										}
  1811  										add(ruleRBRK, position139)
  1812  									}
  1813  									{
  1814  										add(ruleAction15, position)
  1815  									}
  1816  									break
  1817  								default:
  1818  									{
  1819  										position141 := position
  1820  										if buffer[position] != rune('.') {
  1821  											goto l130
  1822  										}
  1823  										position++
  1824  										if !_rules[rule_]() {
  1825  											goto l130
  1826  										}
  1827  										add(ruleDOT, position141)
  1828  									}
  1829  									if !_rules[ruleId]() {
  1830  										goto l130
  1831  									}
  1832  									{
  1833  										add(ruleAction14, position)
  1834  									}
  1835  									break
  1836  								}
  1837  							}
  1838  
  1839  							goto l129
  1840  						l130:
  1841  							position, tokenIndex = position130, tokenIndex130
  1842  						}
  1843  						add(rulePostfixExpr, position19)
  1844  					}
  1845  					goto l17
  1846  				l18:
  1847  					position, tokenIndex = position17, tokenIndex17
  1848  					{
  1849  						position143 := position
  1850  						if buffer[position] != rune('!') {
  1851  							goto l15
  1852  						}
  1853  						position++
  1854  						{
  1855  							position144, tokenIndex144 := position, tokenIndex
  1856  							if buffer[position] != rune('=') {
  1857  								goto l144
  1858  							}
  1859  							position++
  1860  							goto l15
  1861  						l144:
  1862  							position, tokenIndex = position144, tokenIndex144
  1863  						}
  1864  						if !_rules[rule_]() {
  1865  							goto l15
  1866  						}
  1867  						add(ruleBANG, position143)
  1868  					}
  1869  					if !_rules[ruleRelationalExpr]() {
  1870  						goto l15
  1871  					}
  1872  					{
  1873  						add(ruleAction16, position)
  1874  					}
  1875  				}
  1876  			l17:
  1877  				add(ruleUnaryExpr, position16)
  1878  			}
  1879  			return true
  1880  		l15:
  1881  			position, tokenIndex = position15, tokenIndex15
  1882  			return false
  1883  		},
  1884  		/* 7 RelationalExpr <- <(UnaryExpr ((GE UnaryExpr Action17) / (GT UnaryExpr Action18) / (LE UnaryExpr Action19) / (LT UnaryExpr Action20))*)> */
  1885  		func() bool {
  1886  			position146, tokenIndex146 := position, tokenIndex
  1887  			{
  1888  				position147 := position
  1889  				if !_rules[ruleUnaryExpr]() {
  1890  					goto l146
  1891  				}
  1892  			l148:
  1893  				{
  1894  					position149, tokenIndex149 := position, tokenIndex
  1895  					{
  1896  						position150, tokenIndex150 := position, tokenIndex
  1897  						{
  1898  							position152 := position
  1899  							if buffer[position] != rune('>') {
  1900  								goto l151
  1901  							}
  1902  							position++
  1903  							if buffer[position] != rune('=') {
  1904  								goto l151
  1905  							}
  1906  							position++
  1907  							if !_rules[rule_]() {
  1908  								goto l151
  1909  							}
  1910  							add(ruleGE, position152)
  1911  						}
  1912  						if !_rules[ruleUnaryExpr]() {
  1913  							goto l151
  1914  						}
  1915  						{
  1916  							add(ruleAction17, position)
  1917  						}
  1918  						goto l150
  1919  					l151:
  1920  						position, tokenIndex = position150, tokenIndex150
  1921  						{
  1922  							position155 := position
  1923  							if buffer[position] != rune('>') {
  1924  								goto l154
  1925  							}
  1926  							position++
  1927  							{
  1928  								position156, tokenIndex156 := position, tokenIndex
  1929  								if buffer[position] != rune('=') {
  1930  									goto l156
  1931  								}
  1932  								position++
  1933  								goto l154
  1934  							l156:
  1935  								position, tokenIndex = position156, tokenIndex156
  1936  							}
  1937  							if !_rules[rule_]() {
  1938  								goto l154
  1939  							}
  1940  							add(ruleGT, position155)
  1941  						}
  1942  						if !_rules[ruleUnaryExpr]() {
  1943  							goto l154
  1944  						}
  1945  						{
  1946  							add(ruleAction18, position)
  1947  						}
  1948  						goto l150
  1949  					l154:
  1950  						position, tokenIndex = position150, tokenIndex150
  1951  						{
  1952  							position159 := position
  1953  							if buffer[position] != rune('<') {
  1954  								goto l158
  1955  							}
  1956  							position++
  1957  							if buffer[position] != rune('=') {
  1958  								goto l158
  1959  							}
  1960  							position++
  1961  							if !_rules[rule_]() {
  1962  								goto l158
  1963  							}
  1964  							add(ruleLE, position159)
  1965  						}
  1966  						if !_rules[ruleUnaryExpr]() {
  1967  							goto l158
  1968  						}
  1969  						{
  1970  							add(ruleAction19, position)
  1971  						}
  1972  						goto l150
  1973  					l158:
  1974  						position, tokenIndex = position150, tokenIndex150
  1975  						{
  1976  							position161 := position
  1977  							if buffer[position] != rune('<') {
  1978  								goto l149
  1979  							}
  1980  							position++
  1981  							{
  1982  								position162, tokenIndex162 := position, tokenIndex
  1983  								if buffer[position] != rune('=') {
  1984  									goto l162
  1985  								}
  1986  								position++
  1987  								goto l149
  1988  							l162:
  1989  								position, tokenIndex = position162, tokenIndex162
  1990  							}
  1991  							if !_rules[rule_]() {
  1992  								goto l149
  1993  							}
  1994  							add(ruleLT, position161)
  1995  						}
  1996  						if !_rules[ruleUnaryExpr]() {
  1997  							goto l149
  1998  						}
  1999  						{
  2000  							add(ruleAction20, position)
  2001  						}
  2002  					}
  2003  				l150:
  2004  					goto l148
  2005  				l149:
  2006  					position, tokenIndex = position149, tokenIndex149
  2007  				}
  2008  				add(ruleRelationalExpr, position147)
  2009  			}
  2010  			return true
  2011  		l146:
  2012  			position, tokenIndex = position146, tokenIndex146
  2013  			return false
  2014  		},
  2015  		/* 8 EqualityExpr <- <(RelationalExpr ((EQEQ RelationalExpr Action21) / ((&('c') (CONTAINS RelationalExpr Action24)) | (&('=') (EQ RelationalExpr Action23)) | (&('!') (NE RelationalExpr Action22))))*)> */
  2016  		func() bool {
  2017  			position164, tokenIndex164 := position, tokenIndex
  2018  			{
  2019  				position165 := position
  2020  				if !_rules[ruleRelationalExpr]() {
  2021  					goto l164
  2022  				}
  2023  			l166:
  2024  				{
  2025  					position167, tokenIndex167 := position, tokenIndex
  2026  					{
  2027  						position168, tokenIndex168 := position, tokenIndex
  2028  						{
  2029  							position170 := position
  2030  							if buffer[position] != rune('=') {
  2031  								goto l169
  2032  							}
  2033  							position++
  2034  							if buffer[position] != rune('=') {
  2035  								goto l169
  2036  							}
  2037  							position++
  2038  							if !_rules[rule_]() {
  2039  								goto l169
  2040  							}
  2041  							add(ruleEQEQ, position170)
  2042  						}
  2043  						if !_rules[ruleRelationalExpr]() {
  2044  							goto l169
  2045  						}
  2046  						{
  2047  							add(ruleAction21, position)
  2048  						}
  2049  						goto l168
  2050  					l169:
  2051  						position, tokenIndex = position168, tokenIndex168
  2052  						{
  2053  							switch buffer[position] {
  2054  							case 'c':
  2055  								{
  2056  									position173 := position
  2057  									if buffer[position] != rune('c') {
  2058  										goto l167
  2059  									}
  2060  									position++
  2061  									if buffer[position] != rune('o') {
  2062  										goto l167
  2063  									}
  2064  									position++
  2065  									if buffer[position] != rune('n') {
  2066  										goto l167
  2067  									}
  2068  									position++
  2069  									if buffer[position] != rune('t') {
  2070  										goto l167
  2071  									}
  2072  									position++
  2073  									if buffer[position] != rune('a') {
  2074  										goto l167
  2075  									}
  2076  									position++
  2077  									if buffer[position] != rune('i') {
  2078  										goto l167
  2079  									}
  2080  									position++
  2081  									if buffer[position] != rune('n') {
  2082  										goto l167
  2083  									}
  2084  									position++
  2085  									if buffer[position] != rune('s') {
  2086  										goto l167
  2087  									}
  2088  									position++
  2089  									{
  2090  										position174, tokenIndex174 := position, tokenIndex
  2091  										if !_rules[ruleIdChar]() {
  2092  											goto l174
  2093  										}
  2094  										goto l167
  2095  									l174:
  2096  										position, tokenIndex = position174, tokenIndex174
  2097  									}
  2098  									if !_rules[rule_]() {
  2099  										goto l167
  2100  									}
  2101  									add(ruleCONTAINS, position173)
  2102  								}
  2103  								if !_rules[ruleRelationalExpr]() {
  2104  									goto l167
  2105  								}
  2106  								{
  2107  									add(ruleAction24, position)
  2108  								}
  2109  								break
  2110  							case '=':
  2111  								{
  2112  									position176 := position
  2113  									if buffer[position] != rune('=') {
  2114  										goto l167
  2115  									}
  2116  									position++
  2117  									if !_rules[rule_]() {
  2118  										goto l167
  2119  									}
  2120  									add(ruleEQ, position176)
  2121  								}
  2122  								if !_rules[ruleRelationalExpr]() {
  2123  									goto l167
  2124  								}
  2125  								{
  2126  									add(ruleAction23, position)
  2127  								}
  2128  								break
  2129  							default:
  2130  								{
  2131  									position178 := position
  2132  									if buffer[position] != rune('!') {
  2133  										goto l167
  2134  									}
  2135  									position++
  2136  									if buffer[position] != rune('=') {
  2137  										goto l167
  2138  									}
  2139  									position++
  2140  									if !_rules[rule_]() {
  2141  										goto l167
  2142  									}
  2143  									add(ruleNE, position178)
  2144  								}
  2145  								if !_rules[ruleRelationalExpr]() {
  2146  									goto l167
  2147  								}
  2148  								{
  2149  									add(ruleAction22, position)
  2150  								}
  2151  								break
  2152  							}
  2153  						}
  2154  
  2155  					}
  2156  				l168:
  2157  					goto l166
  2158  				l167:
  2159  					position, tokenIndex = position167, tokenIndex167
  2160  				}
  2161  				add(ruleEqualityExpr, position165)
  2162  			}
  2163  			return true
  2164  		l164:
  2165  			position, tokenIndex = position164, tokenIndex164
  2166  			return false
  2167  		},
  2168  		/* 9 LogicalAndExpr <- <(EqualityExpr ((AND EqualityExpr Action25) / (ANDAND EqualityExpr Action26) / (_ EqualityExpr Action27))*)> */
  2169  		func() bool {
  2170  			position180, tokenIndex180 := position, tokenIndex
  2171  			{
  2172  				position181 := position
  2173  				if !_rules[ruleEqualityExpr]() {
  2174  					goto l180
  2175  				}
  2176  			l182:
  2177  				{
  2178  					position183, tokenIndex183 := position, tokenIndex
  2179  					{
  2180  						position184, tokenIndex184 := position, tokenIndex
  2181  						{
  2182  							position186 := position
  2183  							if buffer[position] != rune('a') {
  2184  								goto l185
  2185  							}
  2186  							position++
  2187  							if buffer[position] != rune('n') {
  2188  								goto l185
  2189  							}
  2190  							position++
  2191  							if buffer[position] != rune('d') {
  2192  								goto l185
  2193  							}
  2194  							position++
  2195  							{
  2196  								position187, tokenIndex187 := position, tokenIndex
  2197  								if !_rules[ruleIdChar]() {
  2198  									goto l187
  2199  								}
  2200  								goto l185
  2201  							l187:
  2202  								position, tokenIndex = position187, tokenIndex187
  2203  							}
  2204  							if !_rules[rule_]() {
  2205  								goto l185
  2206  							}
  2207  							add(ruleAND, position186)
  2208  						}
  2209  						if !_rules[ruleEqualityExpr]() {
  2210  							goto l185
  2211  						}
  2212  						{
  2213  							add(ruleAction25, position)
  2214  						}
  2215  						goto l184
  2216  					l185:
  2217  						position, tokenIndex = position184, tokenIndex184
  2218  						{
  2219  							position190 := position
  2220  							if buffer[position] != rune('&') {
  2221  								goto l189
  2222  							}
  2223  							position++
  2224  							if buffer[position] != rune('&') {
  2225  								goto l189
  2226  							}
  2227  							position++
  2228  							if !_rules[rule_]() {
  2229  								goto l189
  2230  							}
  2231  							add(ruleANDAND, position190)
  2232  						}
  2233  						if !_rules[ruleEqualityExpr]() {
  2234  							goto l189
  2235  						}
  2236  						{
  2237  							add(ruleAction26, position)
  2238  						}
  2239  						goto l184
  2240  					l189:
  2241  						position, tokenIndex = position184, tokenIndex184
  2242  						if !_rules[rule_]() {
  2243  							goto l183
  2244  						}
  2245  						if !_rules[ruleEqualityExpr]() {
  2246  							goto l183
  2247  						}
  2248  						{
  2249  							add(ruleAction27, position)
  2250  						}
  2251  					}
  2252  				l184:
  2253  					goto l182
  2254  				l183:
  2255  					position, tokenIndex = position183, tokenIndex183
  2256  				}
  2257  				add(ruleLogicalAndExpr, position181)
  2258  			}
  2259  			return true
  2260  		l180:
  2261  			position, tokenIndex = position180, tokenIndex180
  2262  			return false
  2263  		},
  2264  		/* 10 LogicalOrExpr <- <(LogicalAndExpr ((OR LogicalAndExpr Action28) / (OROR LogicalAndExpr Action29))*)> */
  2265  		func() bool {
  2266  			position193, tokenIndex193 := position, tokenIndex
  2267  			{
  2268  				position194 := position
  2269  				if !_rules[ruleLogicalAndExpr]() {
  2270  					goto l193
  2271  				}
  2272  			l195:
  2273  				{
  2274  					position196, tokenIndex196 := position, tokenIndex
  2275  					{
  2276  						position197, tokenIndex197 := position, tokenIndex
  2277  						{
  2278  							position199 := position
  2279  							if buffer[position] != rune('o') {
  2280  								goto l198
  2281  							}
  2282  							position++
  2283  							if buffer[position] != rune('r') {
  2284  								goto l198
  2285  							}
  2286  							position++
  2287  							{
  2288  								position200, tokenIndex200 := position, tokenIndex
  2289  								if !_rules[ruleIdChar]() {
  2290  									goto l200
  2291  								}
  2292  								goto l198
  2293  							l200:
  2294  								position, tokenIndex = position200, tokenIndex200
  2295  							}
  2296  							if !_rules[rule_]() {
  2297  								goto l198
  2298  							}
  2299  							add(ruleOR, position199)
  2300  						}
  2301  						if !_rules[ruleLogicalAndExpr]() {
  2302  							goto l198
  2303  						}
  2304  						{
  2305  							add(ruleAction28, position)
  2306  						}
  2307  						goto l197
  2308  					l198:
  2309  						position, tokenIndex = position197, tokenIndex197
  2310  						{
  2311  							position202 := position
  2312  							if buffer[position] != rune('|') {
  2313  								goto l196
  2314  							}
  2315  							position++
  2316  							if buffer[position] != rune('|') {
  2317  								goto l196
  2318  							}
  2319  							position++
  2320  							if !_rules[rule_]() {
  2321  								goto l196
  2322  							}
  2323  							add(ruleOROR, position202)
  2324  						}
  2325  						if !_rules[ruleLogicalAndExpr]() {
  2326  							goto l196
  2327  						}
  2328  						{
  2329  							add(ruleAction29, position)
  2330  						}
  2331  					}
  2332  				l197:
  2333  					goto l195
  2334  				l196:
  2335  					position, tokenIndex = position196, tokenIndex196
  2336  				}
  2337  				add(ruleLogicalOrExpr, position194)
  2338  			}
  2339  			return true
  2340  		l193:
  2341  			position, tokenIndex = position193, tokenIndex193
  2342  			return false
  2343  		},
  2344  		/* 11 LowNotExpr <- <(LogicalOrExpr / (NOT LogicalOrExpr Action30))> */
  2345  		nil,
  2346  		/* 12 Expr <- <LowNotExpr> */
  2347  		func() bool {
  2348  			position205, tokenIndex205 := position, tokenIndex
  2349  			{
  2350  				position206 := position
  2351  				{
  2352  					position207 := position
  2353  					{
  2354  						position208, tokenIndex208 := position, tokenIndex
  2355  						if !_rules[ruleLogicalOrExpr]() {
  2356  							goto l209
  2357  						}
  2358  						goto l208
  2359  					l209:
  2360  						position, tokenIndex = position208, tokenIndex208
  2361  						if !_rules[ruleNOT]() {
  2362  							goto l205
  2363  						}
  2364  						if !_rules[ruleLogicalOrExpr]() {
  2365  							goto l205
  2366  						}
  2367  						{
  2368  							add(ruleAction30, position)
  2369  						}
  2370  					}
  2371  				l208:
  2372  					add(ruleLowNotExpr, position207)
  2373  				}
  2374  				add(ruleExpr, position206)
  2375  			}
  2376  			return true
  2377  		l205:
  2378  			position, tokenIndex = position205, tokenIndex205
  2379  			return false
  2380  		},
  2381  		/* 13 String <- <('"' <StringChar*> '"' _)> */
  2382  		nil,
  2383  		/* 14 StringChar <- <(Escape / (!((&('\\') '\\') | (&('\n') '\n') | (&('"') '"')) .))> */
  2384  		nil,
  2385  		/* 15 UnquotedString <- <(!Keyword <(UnquotedStringStartChar UnquotedStringChar*)> _)> */
  2386  		nil,
  2387  		/* 16 UnquotedStringStartChar <- <((&('/' | '_') ('/' / '_')) | (&('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]))> */
  2388  		nil,
  2389  		/* 17 UnquotedStringChar <- <((&('/' | '_') ('/' / '_')) | (&('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]))> */
  2390  		nil,
  2391  		/* 18 Escape <- <(SimpleEscape / OctalEscape / HexEscape / UniversalCharacter)> */
  2392  		nil,
  2393  		/* 19 SimpleEscape <- <('\\' ((&('v') 'v') | (&('t') 't') | (&('r') 'r') | (&('n') 'n') | (&('f') 'f') | (&('b') 'b') | (&('a') 'a') | (&('\\') '\\') | (&('?') '?') | (&('"') '"') | (&('\'') '\'')))> */
  2394  		nil,
  2395  		/* 20 OctalEscape <- <('\\' [0-7] [0-7]? [0-7]?)> */
  2396  		nil,
  2397  		/* 21 HexEscape <- <('\\' 'x' HexDigit+)> */
  2398  		nil,
  2399  		/* 22 UniversalCharacter <- <(('\\' 'u' HexQuad) / ('\\' 'U' HexQuad HexQuad))> */
  2400  		nil,
  2401  		/* 23 HexQuad <- <(HexDigit HexDigit HexDigit HexDigit)> */
  2402  		func() bool {
  2403  			position221, tokenIndex221 := position, tokenIndex
  2404  			{
  2405  				position222 := position
  2406  				if !_rules[ruleHexDigit]() {
  2407  					goto l221
  2408  				}
  2409  				if !_rules[ruleHexDigit]() {
  2410  					goto l221
  2411  				}
  2412  				if !_rules[ruleHexDigit]() {
  2413  					goto l221
  2414  				}
  2415  				if !_rules[ruleHexDigit]() {
  2416  					goto l221
  2417  				}
  2418  				add(ruleHexQuad, position222)
  2419  			}
  2420  			return true
  2421  		l221:
  2422  			position, tokenIndex = position221, tokenIndex221
  2423  			return false
  2424  		},
  2425  		/* 24 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]))> */
  2426  		func() bool {
  2427  			position223, tokenIndex223 := position, tokenIndex
  2428  			{
  2429  				position224 := position
  2430  				{
  2431  					switch buffer[position] {
  2432  					case 'A', 'B', 'C', 'D', 'E', 'F':
  2433  						if c := buffer[position]; c < rune('A') || c > rune('F') {
  2434  							goto l223
  2435  						}
  2436  						position++
  2437  						break
  2438  					case 'a', 'b', 'c', 'd', 'e', 'f':
  2439  						if c := buffer[position]; c < rune('a') || c > rune('f') {
  2440  							goto l223
  2441  						}
  2442  						position++
  2443  						break
  2444  					default:
  2445  						if c := buffer[position]; c < rune('0') || c > rune('9') {
  2446  							goto l223
  2447  						}
  2448  						position++
  2449  						break
  2450  					}
  2451  				}
  2452  
  2453  				add(ruleHexDigit, position224)
  2454  			}
  2455  			return true
  2456  		l223:
  2457  			position, tokenIndex = position223, tokenIndex223
  2458  			return false
  2459  		},
  2460  		/* 25 Numbers <- <(Number Action31)> */
  2461  		func() bool {
  2462  			position226, tokenIndex226 := position, tokenIndex
  2463  			{
  2464  				position227 := position
  2465  				if !_rules[ruleNumber]() {
  2466  					goto l226
  2467  				}
  2468  				{
  2469  					add(ruleAction31, position)
  2470  				}
  2471  				add(ruleNumbers, position227)
  2472  			}
  2473  			return true
  2474  		l226:
  2475  			position, tokenIndex = position226, tokenIndex226
  2476  			return false
  2477  		},
  2478  		/* 26 Number <- <(<Float> / <Integer>)> */
  2479  		func() bool {
  2480  			{
  2481  				position230 := position
  2482  				{
  2483  					position231, tokenIndex231 := position, tokenIndex
  2484  					{
  2485  						position233 := position
  2486  						{
  2487  							position234 := position
  2488  							{
  2489  								position235, tokenIndex235 := position, tokenIndex
  2490  								{
  2491  									position237 := position
  2492  									{
  2493  										position238, tokenIndex238 := position, tokenIndex
  2494  									l240:
  2495  										{
  2496  											position241, tokenIndex241 := position, tokenIndex
  2497  											if c := buffer[position]; c < rune('0') || c > rune('9') {
  2498  												goto l241
  2499  											}
  2500  											position++
  2501  											goto l240
  2502  										l241:
  2503  											position, tokenIndex = position241, tokenIndex241
  2504  										}
  2505  										if buffer[position] != rune('.') {
  2506  											goto l239
  2507  										}
  2508  										position++
  2509  										if c := buffer[position]; c < rune('0') || c > rune('9') {
  2510  											goto l239
  2511  										}
  2512  										position++
  2513  									l242:
  2514  										{
  2515  											position243, tokenIndex243 := position, tokenIndex
  2516  											if c := buffer[position]; c < rune('0') || c > rune('9') {
  2517  												goto l243
  2518  											}
  2519  											position++
  2520  											goto l242
  2521  										l243:
  2522  											position, tokenIndex = position243, tokenIndex243
  2523  										}
  2524  										goto l238
  2525  									l239:
  2526  										position, tokenIndex = position238, tokenIndex238
  2527  										if c := buffer[position]; c < rune('0') || c > rune('9') {
  2528  											goto l236
  2529  										}
  2530  										position++
  2531  									l244:
  2532  										{
  2533  											position245, tokenIndex245 := position, tokenIndex
  2534  											if c := buffer[position]; c < rune('0') || c > rune('9') {
  2535  												goto l245
  2536  											}
  2537  											position++
  2538  											goto l244
  2539  										l245:
  2540  											position, tokenIndex = position245, tokenIndex245
  2541  										}
  2542  										if buffer[position] != rune('.') {
  2543  											goto l236
  2544  										}
  2545  										position++
  2546  									}
  2547  								l238:
  2548  									add(ruleFraction, position237)
  2549  								}
  2550  								{
  2551  									position246, tokenIndex246 := position, tokenIndex
  2552  									if !_rules[ruleExponent]() {
  2553  										goto l246
  2554  									}
  2555  									goto l247
  2556  								l246:
  2557  									position, tokenIndex = position246, tokenIndex246
  2558  								}
  2559  							l247:
  2560  								goto l235
  2561  							l236:
  2562  								position, tokenIndex = position235, tokenIndex235
  2563  								if c := buffer[position]; c < rune('0') || c > rune('9') {
  2564  									goto l232
  2565  								}
  2566  								position++
  2567  							l248:
  2568  								{
  2569  									position249, tokenIndex249 := position, tokenIndex
  2570  									if c := buffer[position]; c < rune('0') || c > rune('9') {
  2571  										goto l249
  2572  									}
  2573  									position++
  2574  									goto l248
  2575  								l249:
  2576  									position, tokenIndex = position249, tokenIndex249
  2577  								}
  2578  								if !_rules[ruleExponent]() {
  2579  									goto l232
  2580  								}
  2581  							}
  2582  						l235:
  2583  							add(ruleFloat, position234)
  2584  						}
  2585  						add(rulePegText, position233)
  2586  					}
  2587  					goto l231
  2588  				l232:
  2589  					position, tokenIndex = position231, tokenIndex231
  2590  					{
  2591  						position250 := position
  2592  						{
  2593  							position251 := position
  2594  						l252:
  2595  							{
  2596  								position253, tokenIndex253 := position, tokenIndex
  2597  								if c := buffer[position]; c < rune('0') || c > rune('9') {
  2598  									goto l253
  2599  								}
  2600  								position++
  2601  								goto l252
  2602  							l253:
  2603  								position, tokenIndex = position253, tokenIndex253
  2604  							}
  2605  							add(ruleInteger, position251)
  2606  						}
  2607  						add(rulePegText, position250)
  2608  					}
  2609  				}
  2610  			l231:
  2611  				add(ruleNumber, position230)
  2612  			}
  2613  			return true
  2614  		},
  2615  		/* 27 Integer <- <[0-9]*> */
  2616  		nil,
  2617  		/* 28 Float <- <((Fraction Exponent?) / ([0-9]+ Exponent))> */
  2618  		nil,
  2619  		/* 29 Fraction <- <(([0-9]* '.' [0-9]+) / ([0-9]+ '.'))> */
  2620  		nil,
  2621  		/* 30 Exponent <- <(('e' / 'E') ('+' / '-')? [0-9]+)> */
  2622  		func() bool {
  2623  			position257, tokenIndex257 := position, tokenIndex
  2624  			{
  2625  				position258 := position
  2626  				{
  2627  					position259, tokenIndex259 := position, tokenIndex
  2628  					if buffer[position] != rune('e') {
  2629  						goto l260
  2630  					}
  2631  					position++
  2632  					goto l259
  2633  				l260:
  2634  					position, tokenIndex = position259, tokenIndex259
  2635  					if buffer[position] != rune('E') {
  2636  						goto l257
  2637  					}
  2638  					position++
  2639  				}
  2640  			l259:
  2641  				{
  2642  					position261, tokenIndex261 := position, tokenIndex
  2643  					{
  2644  						position263, tokenIndex263 := position, tokenIndex
  2645  						if buffer[position] != rune('+') {
  2646  							goto l264
  2647  						}
  2648  						position++
  2649  						goto l263
  2650  					l264:
  2651  						position, tokenIndex = position263, tokenIndex263
  2652  						if buffer[position] != rune('-') {
  2653  							goto l261
  2654  						}
  2655  						position++
  2656  					}
  2657  				l263:
  2658  					goto l262
  2659  				l261:
  2660  					position, tokenIndex = position261, tokenIndex261
  2661  				}
  2662  			l262:
  2663  				if c := buffer[position]; c < rune('0') || c > rune('9') {
  2664  					goto l257
  2665  				}
  2666  				position++
  2667  			l265:
  2668  				{
  2669  					position266, tokenIndex266 := position, tokenIndex
  2670  					if c := buffer[position]; c < rune('0') || c > rune('9') {
  2671  						goto l266
  2672  					}
  2673  					position++
  2674  					goto l265
  2675  				l266:
  2676  					position, tokenIndex = position266, tokenIndex266
  2677  				}
  2678  				add(ruleExponent, position258)
  2679  			}
  2680  			return true
  2681  		l257:
  2682  			position, tokenIndex = position257, tokenIndex257
  2683  			return false
  2684  		},
  2685  		/* 31 Stage <- <((&('p') PRODUCTION) | (&('s') STAGING) | (&('d') DEVELOPMENT))> */
  2686  		nil,
  2687  		/* 32 DEVELOPMENT <- <(<('d' 'e' 'v' 'e' 'l' 'o' 'p' 'm' 'e' 'n' 't')> !IdChar _)> */
  2688  		nil,
  2689  		/* 33 STAGING <- <(<('s' 't' 'a' 'g' 'i' 'n' 'g')> !IdChar _)> */
  2690  		nil,
  2691  		/* 34 PRODUCTION <- <(<('p' 'r' 'o' 'd' 'u' 'c' 't' 'i' 'o' 'n')> !IdChar _)> */
  2692  		nil,
  2693  		/* 35 Unit <- <(Bytes / Duration)> */
  2694  		nil,
  2695  		/* 36 Duration <- <(S / MS)> */
  2696  		nil,
  2697  		/* 37 S <- <(<'s'> !IdChar _)> */
  2698  		nil,
  2699  		/* 38 MS <- <(<('m' 's')> !IdChar _)> */
  2700  		nil,
  2701  		/* 39 Bytes <- <((&('g') GB) | (&('m') MB) | (&('k') KB) | (&('b') B))> */
  2702  		nil,
  2703  		/* 40 B <- <(<'b'> !IdChar _)> */
  2704  		nil,
  2705  		/* 41 KB <- <(<('k' 'b')> !IdChar _)> */
  2706  		nil,
  2707  		/* 42 MB <- <(<('m' 'b')> !IdChar _)> */
  2708  		nil,
  2709  		/* 43 GB <- <(<('g' 'b')> !IdChar _)> */
  2710  		nil,
  2711  		/* 44 Id <- <(!Keyword <(IdCharNoDigit IdChar*)> _)> */
  2712  		func() bool {
  2713  			position280, tokenIndex280 := position, tokenIndex
  2714  			{
  2715  				position281 := position
  2716  				{
  2717  					position282, tokenIndex282 := position, tokenIndex
  2718  					if !_rules[ruleKeyword]() {
  2719  						goto l282
  2720  					}
  2721  					goto l280
  2722  				l282:
  2723  					position, tokenIndex = position282, tokenIndex282
  2724  				}
  2725  				{
  2726  					position283 := position
  2727  					{
  2728  						position284 := position
  2729  						{
  2730  							switch buffer[position] {
  2731  							case '_':
  2732  								if buffer[position] != rune('_') {
  2733  									goto l280
  2734  								}
  2735  								position++
  2736  								break
  2737  							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':
  2738  								if c := buffer[position]; c < rune('A') || c > rune('Z') {
  2739  									goto l280
  2740  								}
  2741  								position++
  2742  								break
  2743  							default:
  2744  								if c := buffer[position]; c < rune('a') || c > rune('z') {
  2745  									goto l280
  2746  								}
  2747  								position++
  2748  								break
  2749  							}
  2750  						}
  2751  
  2752  						add(ruleIdCharNoDigit, position284)
  2753  					}
  2754  				l286:
  2755  					{
  2756  						position287, tokenIndex287 := position, tokenIndex
  2757  						if !_rules[ruleIdChar]() {
  2758  							goto l287
  2759  						}
  2760  						goto l286
  2761  					l287:
  2762  						position, tokenIndex = position287, tokenIndex287
  2763  					}
  2764  					add(rulePegText, position283)
  2765  				}
  2766  				if !_rules[rule_]() {
  2767  					goto l280
  2768  				}
  2769  				add(ruleId, position281)
  2770  			}
  2771  			return true
  2772  		l280:
  2773  			position, tokenIndex = position280, tokenIndex280
  2774  			return false
  2775  		},
  2776  		/* 45 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]))> */
  2777  		func() bool {
  2778  			position288, tokenIndex288 := position, tokenIndex
  2779  			{
  2780  				position289 := position
  2781  				{
  2782  					switch buffer[position] {
  2783  					case '_':
  2784  						if buffer[position] != rune('_') {
  2785  							goto l288
  2786  						}
  2787  						position++
  2788  						break
  2789  					case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
  2790  						if c := buffer[position]; c < rune('0') || c > rune('9') {
  2791  							goto l288
  2792  						}
  2793  						position++
  2794  						break
  2795  					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':
  2796  						if c := buffer[position]; c < rune('A') || c > rune('Z') {
  2797  							goto l288
  2798  						}
  2799  						position++
  2800  						break
  2801  					default:
  2802  						if c := buffer[position]; c < rune('a') || c > rune('z') {
  2803  							goto l288
  2804  						}
  2805  						position++
  2806  						break
  2807  					}
  2808  				}
  2809  
  2810  				add(ruleIdChar, position289)
  2811  			}
  2812  			return true
  2813  		l288:
  2814  			position, tokenIndex = position288, tokenIndex288
  2815  			return false
  2816  		},
  2817  		/* 46 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]))> */
  2818  		nil,
  2819  		/* 47 Severity <- <((&('f') FATAL) | (&('e') ERROR) | (&('w') WARN) | (&('i') INFO) | (&('d') DEBUG))> */
  2820  		nil,
  2821  		/* 48 IN <- <('i' 'n' !IdChar _)> */
  2822  		func() bool {
  2823  			position293, tokenIndex293 := position, tokenIndex
  2824  			{
  2825  				position294 := position
  2826  				if buffer[position] != rune('i') {
  2827  					goto l293
  2828  				}
  2829  				position++
  2830  				if buffer[position] != rune('n') {
  2831  					goto l293
  2832  				}
  2833  				position++
  2834  				{
  2835  					position295, tokenIndex295 := position, tokenIndex
  2836  					if !_rules[ruleIdChar]() {
  2837  						goto l295
  2838  					}
  2839  					goto l293
  2840  				l295:
  2841  					position, tokenIndex = position295, tokenIndex295
  2842  				}
  2843  				if !_rules[rule_]() {
  2844  					goto l293
  2845  				}
  2846  				add(ruleIN, position294)
  2847  			}
  2848  			return true
  2849  		l293:
  2850  			position, tokenIndex = position293, tokenIndex293
  2851  			return false
  2852  		},
  2853  		/* 49 OR <- <('o' 'r' !IdChar _)> */
  2854  		nil,
  2855  		/* 50 AND <- <('a' 'n' 'd' !IdChar _)> */
  2856  		nil,
  2857  		/* 51 NOT <- <('n' 'o' 't' !IdChar _)> */
  2858  		func() bool {
  2859  			position298, tokenIndex298 := position, tokenIndex
  2860  			{
  2861  				position299 := position
  2862  				if buffer[position] != rune('n') {
  2863  					goto l298
  2864  				}
  2865  				position++
  2866  				if buffer[position] != rune('o') {
  2867  					goto l298
  2868  				}
  2869  				position++
  2870  				if buffer[position] != rune('t') {
  2871  					goto l298
  2872  				}
  2873  				position++
  2874  				{
  2875  					position300, tokenIndex300 := position, tokenIndex
  2876  					if !_rules[ruleIdChar]() {
  2877  						goto l300
  2878  					}
  2879  					goto l298
  2880  				l300:
  2881  					position, tokenIndex = position300, tokenIndex300
  2882  				}
  2883  				if !_rules[rule_]() {
  2884  					goto l298
  2885  				}
  2886  				add(ruleNOT, position299)
  2887  			}
  2888  			return true
  2889  		l298:
  2890  			position, tokenIndex = position298, tokenIndex298
  2891  			return false
  2892  		},
  2893  		/* 52 CONTAINS <- <('c' 'o' 'n' 't' 'a' 'i' 'n' 's' !IdChar _)> */
  2894  		nil,
  2895  		/* 53 DEBUG <- <(<('d' 'e' 'b' 'u' 'g')> !IdChar _)> */
  2896  		nil,
  2897  		/* 54 INFO <- <(<('i' 'n' 'f' 'o')> !IdChar _)> */
  2898  		nil,
  2899  		/* 55 WARN <- <(<('w' 'a' 'r' 'n')> !IdChar _)> */
  2900  		nil,
  2901  		/* 56 ERROR <- <(<('e' 'r' 'r' 'o' 'r')> !IdChar _)> */
  2902  		nil,
  2903  		/* 57 FATAL <- <(<('f' 'a' 't' 'a' 'l')> !IdChar _)> */
  2904  		nil,
  2905  		/* 58 Keyword <- <((('s' 't' 'a' 'g' 'i' 'n' 'g') / ('d' 'e' 'v' 'e' 'l' 'o' 'p' 'm' 'e' 'n' 't') / ('i' 'n' 'f' 'o') / ('m' 'b') / ((&('s') 's') | (&('m') ('m' 's')) | (&('b') 'b') | (&('k') ('k' 'b')) | (&('g') ('g' 'b')) | (&('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')) | (&('p') ('p' 'r' 'o' 'd' 'u' 'c' 't' 'i' 'o' 'n')))) !IdChar)> */
  2906  		func() bool {
  2907  			position307, tokenIndex307 := position, tokenIndex
  2908  			{
  2909  				position308 := position
  2910  				{
  2911  					position309, tokenIndex309 := position, tokenIndex
  2912  					if buffer[position] != rune('s') {
  2913  						goto l310
  2914  					}
  2915  					position++
  2916  					if buffer[position] != rune('t') {
  2917  						goto l310
  2918  					}
  2919  					position++
  2920  					if buffer[position] != rune('a') {
  2921  						goto l310
  2922  					}
  2923  					position++
  2924  					if buffer[position] != rune('g') {
  2925  						goto l310
  2926  					}
  2927  					position++
  2928  					if buffer[position] != rune('i') {
  2929  						goto l310
  2930  					}
  2931  					position++
  2932  					if buffer[position] != rune('n') {
  2933  						goto l310
  2934  					}
  2935  					position++
  2936  					if buffer[position] != rune('g') {
  2937  						goto l310
  2938  					}
  2939  					position++
  2940  					goto l309
  2941  				l310:
  2942  					position, tokenIndex = position309, tokenIndex309
  2943  					if buffer[position] != rune('d') {
  2944  						goto l311
  2945  					}
  2946  					position++
  2947  					if buffer[position] != rune('e') {
  2948  						goto l311
  2949  					}
  2950  					position++
  2951  					if buffer[position] != rune('v') {
  2952  						goto l311
  2953  					}
  2954  					position++
  2955  					if buffer[position] != rune('e') {
  2956  						goto l311
  2957  					}
  2958  					position++
  2959  					if buffer[position] != rune('l') {
  2960  						goto l311
  2961  					}
  2962  					position++
  2963  					if buffer[position] != rune('o') {
  2964  						goto l311
  2965  					}
  2966  					position++
  2967  					if buffer[position] != rune('p') {
  2968  						goto l311
  2969  					}
  2970  					position++
  2971  					if buffer[position] != rune('m') {
  2972  						goto l311
  2973  					}
  2974  					position++
  2975  					if buffer[position] != rune('e') {
  2976  						goto l311
  2977  					}
  2978  					position++
  2979  					if buffer[position] != rune('n') {
  2980  						goto l311
  2981  					}
  2982  					position++
  2983  					if buffer[position] != rune('t') {
  2984  						goto l311
  2985  					}
  2986  					position++
  2987  					goto l309
  2988  				l311:
  2989  					position, tokenIndex = position309, tokenIndex309
  2990  					if buffer[position] != rune('i') {
  2991  						goto l312
  2992  					}
  2993  					position++
  2994  					if buffer[position] != rune('n') {
  2995  						goto l312
  2996  					}
  2997  					position++
  2998  					if buffer[position] != rune('f') {
  2999  						goto l312
  3000  					}
  3001  					position++
  3002  					if buffer[position] != rune('o') {
  3003  						goto l312
  3004  					}
  3005  					position++
  3006  					goto l309
  3007  				l312:
  3008  					position, tokenIndex = position309, tokenIndex309
  3009  					if buffer[position] != rune('m') {
  3010  						goto l313
  3011  					}
  3012  					position++
  3013  					if buffer[position] != rune('b') {
  3014  						goto l313
  3015  					}
  3016  					position++
  3017  					goto l309
  3018  				l313:
  3019  					position, tokenIndex = position309, tokenIndex309
  3020  					{
  3021  						switch buffer[position] {
  3022  						case 's':
  3023  							if buffer[position] != rune('s') {
  3024  								goto l307
  3025  							}
  3026  							position++
  3027  							break
  3028  						case 'm':
  3029  							if buffer[position] != rune('m') {
  3030  								goto l307
  3031  							}
  3032  							position++
  3033  							if buffer[position] != rune('s') {
  3034  								goto l307
  3035  							}
  3036  							position++
  3037  							break
  3038  						case 'b':
  3039  							if buffer[position] != rune('b') {
  3040  								goto l307
  3041  							}
  3042  							position++
  3043  							break
  3044  						case 'k':
  3045  							if buffer[position] != rune('k') {
  3046  								goto l307
  3047  							}
  3048  							position++
  3049  							if buffer[position] != rune('b') {
  3050  								goto l307
  3051  							}
  3052  							position++
  3053  							break
  3054  						case 'g':
  3055  							if buffer[position] != rune('g') {
  3056  								goto l307
  3057  							}
  3058  							position++
  3059  							if buffer[position] != rune('b') {
  3060  								goto l307
  3061  							}
  3062  							position++
  3063  							break
  3064  						case 'i':
  3065  							if buffer[position] != rune('i') {
  3066  								goto l307
  3067  							}
  3068  							position++
  3069  							if buffer[position] != rune('n') {
  3070  								goto l307
  3071  							}
  3072  							position++
  3073  							break
  3074  						case 'f':
  3075  							if buffer[position] != rune('f') {
  3076  								goto l307
  3077  							}
  3078  							position++
  3079  							if buffer[position] != rune('a') {
  3080  								goto l307
  3081  							}
  3082  							position++
  3083  							if buffer[position] != rune('t') {
  3084  								goto l307
  3085  							}
  3086  							position++
  3087  							if buffer[position] != rune('a') {
  3088  								goto l307
  3089  							}
  3090  							position++
  3091  							if buffer[position] != rune('l') {
  3092  								goto l307
  3093  							}
  3094  							position++
  3095  							break
  3096  						case 'e':
  3097  							if buffer[position] != rune('e') {
  3098  								goto l307
  3099  							}
  3100  							position++
  3101  							if buffer[position] != rune('r') {
  3102  								goto l307
  3103  							}
  3104  							position++
  3105  							if buffer[position] != rune('r') {
  3106  								goto l307
  3107  							}
  3108  							position++
  3109  							if buffer[position] != rune('o') {
  3110  								goto l307
  3111  							}
  3112  							position++
  3113  							if buffer[position] != rune('r') {
  3114  								goto l307
  3115  							}
  3116  							position++
  3117  							break
  3118  						case 'w':
  3119  							if buffer[position] != rune('w') {
  3120  								goto l307
  3121  							}
  3122  							position++
  3123  							if buffer[position] != rune('a') {
  3124  								goto l307
  3125  							}
  3126  							position++
  3127  							if buffer[position] != rune('r') {
  3128  								goto l307
  3129  							}
  3130  							position++
  3131  							if buffer[position] != rune('n') {
  3132  								goto l307
  3133  							}
  3134  							position++
  3135  							break
  3136  						case 'd':
  3137  							if buffer[position] != rune('d') {
  3138  								goto l307
  3139  							}
  3140  							position++
  3141  							if buffer[position] != rune('e') {
  3142  								goto l307
  3143  							}
  3144  							position++
  3145  							if buffer[position] != rune('b') {
  3146  								goto l307
  3147  							}
  3148  							position++
  3149  							if buffer[position] != rune('u') {
  3150  								goto l307
  3151  							}
  3152  							position++
  3153  							if buffer[position] != rune('g') {
  3154  								goto l307
  3155  							}
  3156  							position++
  3157  							break
  3158  						case 'c':
  3159  							if buffer[position] != rune('c') {
  3160  								goto l307
  3161  							}
  3162  							position++
  3163  							if buffer[position] != rune('o') {
  3164  								goto l307
  3165  							}
  3166  							position++
  3167  							if buffer[position] != rune('n') {
  3168  								goto l307
  3169  							}
  3170  							position++
  3171  							if buffer[position] != rune('t') {
  3172  								goto l307
  3173  							}
  3174  							position++
  3175  							if buffer[position] != rune('a') {
  3176  								goto l307
  3177  							}
  3178  							position++
  3179  							if buffer[position] != rune('i') {
  3180  								goto l307
  3181  							}
  3182  							position++
  3183  							if buffer[position] != rune('n') {
  3184  								goto l307
  3185  							}
  3186  							position++
  3187  							if buffer[position] != rune('s') {
  3188  								goto l307
  3189  							}
  3190  							position++
  3191  							break
  3192  						case 'n':
  3193  							if buffer[position] != rune('n') {
  3194  								goto l307
  3195  							}
  3196  							position++
  3197  							if buffer[position] != rune('o') {
  3198  								goto l307
  3199  							}
  3200  							position++
  3201  							if buffer[position] != rune('t') {
  3202  								goto l307
  3203  							}
  3204  							position++
  3205  							break
  3206  						case 'a':
  3207  							if buffer[position] != rune('a') {
  3208  								goto l307
  3209  							}
  3210  							position++
  3211  							if buffer[position] != rune('n') {
  3212  								goto l307
  3213  							}
  3214  							position++
  3215  							if buffer[position] != rune('d') {
  3216  								goto l307
  3217  							}
  3218  							position++
  3219  							break
  3220  						case 'o':
  3221  							if buffer[position] != rune('o') {
  3222  								goto l307
  3223  							}
  3224  							position++
  3225  							if buffer[position] != rune('r') {
  3226  								goto l307
  3227  							}
  3228  							position++
  3229  							break
  3230  						default:
  3231  							if buffer[position] != rune('p') {
  3232  								goto l307
  3233  							}
  3234  							position++
  3235  							if buffer[position] != rune('r') {
  3236  								goto l307
  3237  							}
  3238  							position++
  3239  							if buffer[position] != rune('o') {
  3240  								goto l307
  3241  							}
  3242  							position++
  3243  							if buffer[position] != rune('d') {
  3244  								goto l307
  3245  							}
  3246  							position++
  3247  							if buffer[position] != rune('u') {
  3248  								goto l307
  3249  							}
  3250  							position++
  3251  							if buffer[position] != rune('c') {
  3252  								goto l307
  3253  							}
  3254  							position++
  3255  							if buffer[position] != rune('t') {
  3256  								goto l307
  3257  							}
  3258  							position++
  3259  							if buffer[position] != rune('i') {
  3260  								goto l307
  3261  							}
  3262  							position++
  3263  							if buffer[position] != rune('o') {
  3264  								goto l307
  3265  							}
  3266  							position++
  3267  							if buffer[position] != rune('n') {
  3268  								goto l307
  3269  							}
  3270  							position++
  3271  							break
  3272  						}
  3273  					}
  3274  
  3275  				}
  3276  			l309:
  3277  				{
  3278  					position315, tokenIndex315 := position, tokenIndex
  3279  					if !_rules[ruleIdChar]() {
  3280  						goto l315
  3281  					}
  3282  					goto l307
  3283  				l315:
  3284  					position, tokenIndex = position315, tokenIndex315
  3285  				}
  3286  				add(ruleKeyword, position308)
  3287  			}
  3288  			return true
  3289  		l307:
  3290  			position, tokenIndex = position307, tokenIndex307
  3291  			return false
  3292  		},
  3293  		/* 59 EQ <- <('=' _)> */
  3294  		nil,
  3295  		/* 60 LBRK <- <('[' _)> */
  3296  		nil,
  3297  		/* 61 RBRK <- <(']' _)> */
  3298  		nil,
  3299  		/* 62 LPAR <- <('(' _)> */
  3300  		func() bool {
  3301  			position319, tokenIndex319 := position, tokenIndex
  3302  			{
  3303  				position320 := position
  3304  				if buffer[position] != rune('(') {
  3305  					goto l319
  3306  				}
  3307  				position++
  3308  				if !_rules[rule_]() {
  3309  					goto l319
  3310  				}
  3311  				add(ruleLPAR, position320)
  3312  			}
  3313  			return true
  3314  		l319:
  3315  			position, tokenIndex = position319, tokenIndex319
  3316  			return false
  3317  		},
  3318  		/* 63 RPAR <- <(')' _)> */
  3319  		func() bool {
  3320  			position321, tokenIndex321 := position, tokenIndex
  3321  			{
  3322  				position322 := position
  3323  				if buffer[position] != rune(')') {
  3324  					goto l321
  3325  				}
  3326  				position++
  3327  				if !_rules[rule_]() {
  3328  					goto l321
  3329  				}
  3330  				add(ruleRPAR, position322)
  3331  			}
  3332  			return true
  3333  		l321:
  3334  			position, tokenIndex = position321, tokenIndex321
  3335  			return false
  3336  		},
  3337  		/* 64 DOT <- <('.' _)> */
  3338  		nil,
  3339  		/* 65 BANG <- <('!' !'=' _)> */
  3340  		nil,
  3341  		/* 66 LT <- <('<' !'=' _)> */
  3342  		nil,
  3343  		/* 67 GT <- <('>' !'=' _)> */
  3344  		nil,
  3345  		/* 68 LE <- <('<' '=' _)> */
  3346  		nil,
  3347  		/* 69 EQEQ <- <('=' '=' _)> */
  3348  		nil,
  3349  		/* 70 GE <- <('>' '=' _)> */
  3350  		nil,
  3351  		/* 71 NE <- <('!' '=' _)> */
  3352  		nil,
  3353  		/* 72 ANDAND <- <('&' '&' _)> */
  3354  		nil,
  3355  		/* 73 OROR <- <('|' '|' _)> */
  3356  		nil,
  3357  		/* 74 COMMA <- <(',' _)> */
  3358  		nil,
  3359  		/* 75 _ <- <Whitespace*> */
  3360  		func() bool {
  3361  			{
  3362  				position335 := position
  3363  			l336:
  3364  				{
  3365  					position337, tokenIndex337 := position, tokenIndex
  3366  					{
  3367  						position338 := position
  3368  						{
  3369  							switch buffer[position] {
  3370  							case '\t':
  3371  								if buffer[position] != rune('\t') {
  3372  									goto l337
  3373  								}
  3374  								position++
  3375  								break
  3376  							case ' ':
  3377  								if buffer[position] != rune(' ') {
  3378  									goto l337
  3379  								}
  3380  								position++
  3381  								break
  3382  							default:
  3383  								{
  3384  									position340 := position
  3385  									{
  3386  										position341, tokenIndex341 := position, tokenIndex
  3387  										if buffer[position] != rune('\r') {
  3388  											goto l342
  3389  										}
  3390  										position++
  3391  										if buffer[position] != rune('\n') {
  3392  											goto l342
  3393  										}
  3394  										position++
  3395  										goto l341
  3396  									l342:
  3397  										position, tokenIndex = position341, tokenIndex341
  3398  										if buffer[position] != rune('\n') {
  3399  											goto l343
  3400  										}
  3401  										position++
  3402  										goto l341
  3403  									l343:
  3404  										position, tokenIndex = position341, tokenIndex341
  3405  										if buffer[position] != rune('\r') {
  3406  											goto l337
  3407  										}
  3408  										position++
  3409  									}
  3410  								l341:
  3411  									add(ruleEOL, position340)
  3412  								}
  3413  								break
  3414  							}
  3415  						}
  3416  
  3417  						add(ruleWhitespace, position338)
  3418  					}
  3419  					goto l336
  3420  				l337:
  3421  					position, tokenIndex = position337, tokenIndex337
  3422  				}
  3423  				add(rule_, position335)
  3424  			}
  3425  			return true
  3426  		},
  3427  		/* 76 Whitespace <- <((&('\t') '\t') | (&(' ') ' ') | (&('\n' | '\r') EOL))> */
  3428  		nil,
  3429  		/* 77 EOL <- <(('\r' '\n') / '\n' / '\r')> */
  3430  		nil,
  3431  		/* 78 EOF <- <!.> */
  3432  		nil,
  3433  		/* 80 Action0 <- <{ p.AddNumber(text) }> */
  3434  		nil,
  3435  		/* 81 Action1 <- <{ p.AddNumber("")   }> */
  3436  		nil,
  3437  		/* 82 Action2 <- <{ p.AddLevel(text)  }> */
  3438  		nil,
  3439  		/* 83 Action3 <- <{ p.AddStage(text)  }> */
  3440  		nil,
  3441  		/* 84 Action4 <- <{ p.AddField(text)  }> */
  3442  		nil,
  3443  		/* 85 Action5 <- <{ p.AddString(text) }> */
  3444  		nil,
  3445  		/* 86 Action6 <- <{ p.AddString(text) }> */
  3446  		nil,
  3447  		/* 87 Action7 <- <{ p.AddExpr()       }> */
  3448  		nil,
  3449  		/* 88 Action8 <- <{ p.AddTupleValue() }> */
  3450  		nil,
  3451  		/* 89 Action9 <- <{ p.AddTupleValue() }> */
  3452  		nil,
  3453  		/* 90 Action10 <- <{ p.AddTuple() }> */
  3454  		nil,
  3455  		/* 91 Action11 <- <{ p.AddBinary(ast.IN) }> */
  3456  		nil,
  3457  		/* 92 Action12 <- <{ p.AddTuple() }> */
  3458  		nil,
  3459  		/* 93 Action13 <- <{ p.AddBinary(ast.IN); p.AddUnary(ast.LNOT) }> */
  3460  		nil,
  3461  		/* 94 Action14 <- <{ p.AddMember(text)    }> */
  3462  		nil,
  3463  		/* 95 Action15 <- <{ p.AddSubscript(text) }> */
  3464  		nil,
  3465  		/* 96 Action16 <- <{ p.AddUnary(ast.NOT) }> */
  3466  		nil,
  3467  		/* 97 Action17 <- <{ p.AddBinary(ast.GE) }> */
  3468  		nil,
  3469  		/* 98 Action18 <- <{ p.AddBinary(ast.GT) }> */
  3470  		nil,
  3471  		/* 99 Action19 <- <{ p.AddBinary(ast.LE) }> */
  3472  		nil,
  3473  		/* 100 Action20 <- <{ p.AddBinary(ast.LT) }> */
  3474  		nil,
  3475  		/* 101 Action21 <- <{ p.AddBinary(ast.EQ)   }> */
  3476  		nil,
  3477  		/* 102 Action22 <- <{ p.AddBinary(ast.NE)   }> */
  3478  		nil,
  3479  		/* 103 Action23 <- <{ p.AddBinary(ast.EQ)   }> */
  3480  		nil,
  3481  		/* 104 Action24 <- <{ p.AddBinaryContains() }> */
  3482  		nil,
  3483  		/* 105 Action25 <- <{ p.AddBinary(ast.AND) }> */
  3484  		nil,
  3485  		/* 106 Action26 <- <{ p.AddBinary(ast.AND) }> */
  3486  		nil,
  3487  		/* 107 Action27 <- <{ p.AddBinary(ast.AND) }> */
  3488  		nil,
  3489  		/* 108 Action28 <- <{ p.AddBinary(ast.OR) }> */
  3490  		nil,
  3491  		/* 109 Action29 <- <{ p.AddBinary(ast.OR) }> */
  3492  		nil,
  3493  		/* 110 Action30 <- <{ p.AddUnary(ast.LNOT) }> */
  3494  		nil,
  3495  		nil,
  3496  		/* 112 Action31 <- <{ p.SetNumber(text) }> */
  3497  		nil,
  3498  	}
  3499  	p.rules = _rules
  3500  }