github.com/apex/up@v1.7.1/internal/logs/parser/grammar.peg.go (about)

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