prometheus/rules/lexer.l.go
Julius Volz 72d7b325a1 Implement offset operator.
This allows changing the time offset for individual instant and range
vectors in a query.

For example, this returns the value of `foo` 5 minutes in the past
relative to the current query evaluation time:

    foo offset 5m

Note that the `offset` modifier always needs to follow the selector
immediately. I.e. the following would be correct:

    sum(foo offset 5m) // GOOD.

While the following would be *incorrect*:

    sum(foo) offset 5m // INVALID.

The same works for range vectors. This returns the 5-minutes-rate that
`foo` had a week ago:

    rate(foo[5m] offset 1w)

This change touches the following components:

* Lexer/parser: additions to correctly parse the new `offset`/`OFFSET`
  keyword.
* AST: vector and matrix nodes now have an additional `offset` field.
  This is used during their evaluation to adjust query and result times
  appropriately.
* Query analyzer: now works on separate sets of ranges and instants per
  offset. Isolating different offsets from each other completely in this
  way keeps the preloading code relatively simple.

No storage engine changes were needed by this change.

The rules tests have been changed to not probe the internal
implementation details of the query analyzer anymore (how many instants
and ranges have been preloaded). This would also become too cumbersome
to test with the new model, and measuring the result of the query should
be sufficient.

This fixes https://github.com/prometheus/prometheus/issues/529
This fixed https://github.com/prometheus/promdash/issues/201
2015-02-18 02:41:27 +01:00

2271 lines
44 KiB
Go

/* Copyright 2013 The Prometheus Authors
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License. */
package rules
import (
"fmt"
"strconv"
"strings"
clientmodel "github.com/prometheus/client_golang/model"
)
// Lex is called by the parser generated by "go tool yacc" to obtain each
// token. The method is opened before the matching rules block and closed at
// the end of the file.
func (lexer *RulesLexer) Lex(lval *yySymType) int {
// Internal lexer states.
const (
S_INITIAL = iota
S_COMMENTS
)
// We simulate multiple start symbols for closely-related grammars via dummy tokens. See
// http://www.gnu.org/software/bison/manual/html_node/Multiple-start_002dsymbols.html
// Reason: we want to be able to parse lists of named rules as well as single expressions.
if lexer.startToken != 0 {
startToken := lexer.startToken
lexer.startToken = 0
return startToken
}
c := lexer.current
currentState := 0
if lexer.empty {
c, lexer.empty = lexer.getChar(), false
}
yystate0:
lexer.buf = lexer.buf[:0] // The code before the first rule executed before every scan cycle (rule #0 / state 0 action)
switch yyt := currentState; yyt {
default:
panic(fmt.Errorf(`invalid start condition %d`, yyt))
case 0: // start condition: INITIAL
goto yystart1
case 1: // start condition: S_COMMENTS
goto yystart162
}
goto yystate0 // silence unused label error
goto yystate1 // silence unused label error
yystate1:
c = lexer.getChar()
yystart1:
switch {
default:
goto yyabort
case c == '!':
goto yystate3
case c == '"':
goto yystate5
case c == '%' || c == '*':
goto yystate8
case c == '(' || c == ')' || c == ',' || c == '[' || c == ']' || c == '{' || c == '}':
goto yystate12
case c == '+':
goto yystate13
case c == '-':
goto yystate14
case c == '/':
goto yystate17
case c == ':':
goto yystate23
case c == '<' || c == '>':
goto yystate24
case c == '=':
goto yystate25
case c == 'A':
goto yystate26
case c == 'B':
goto yystate36
case c == 'C':
goto yystate38
case c == 'D':
goto yystate42
case c == 'E' || c == 'G' || c == 'H' || c == 'J' || c == 'L' || c == 'N' || c == 'Q' || c == 'R' || c >= 'T' && c <= 'V' || c >= 'X' && c <= 'Z' || c == '_' || c == 'e' || c == 'g' || c == 'h' || c == 'j' || c == 'l' || c == 'n' || c == 'q' || c == 'r' || c >= 't' && c <= 'v' || c >= 'x' && c <= 'z':
goto yystate27
case c == 'F':
goto yystate53
case c == 'I':
goto yystate56
case c == 'K':
goto yystate58
case c == 'M':
goto yystate71
case c == 'O':
goto yystate74
case c == 'P':
goto yystate80
case c == 'S':
goto yystate89
case c == 'W':
goto yystate96
case c == '\'':
goto yystate9
case c == '\t' || c == '\n' || c == '\r' || c == ' ':
goto yystate2
case c == 'a':
goto yystate100
case c == 'b':
goto yystate107
case c == 'c':
goto yystate108
case c == 'd':
goto yystate112
case c == 'f':
goto yystate122
case c == 'i':
goto yystate124
case c == 'k':
goto yystate125
case c == 'm':
goto yystate137
case c == 'o':
goto yystate140
case c == 'p':
goto yystate145
case c == 's':
goto yystate153
case c == 'w':
goto yystate159
case c >= '0' && c <= '9':
goto yystate21
}
yystate2:
c = lexer.getChar()
goto yyrule28
yystate3:
c = lexer.getChar()
switch {
default:
goto yyabort
case c == '=' || c == '~':
goto yystate4
}
yystate4:
c = lexer.getChar()
goto yyrule18
yystate5:
c = lexer.getChar()
switch {
default:
goto yyabort
case c == '"':
goto yystate6
case c == '\\':
goto yystate7
case c >= '\x01' && c <= '!' || c >= '#' && c <= '[' || c >= ']' && c <= 'ÿ':
goto yystate5
}
yystate6:
c = lexer.getChar()
goto yyrule25
yystate7:
c = lexer.getChar()
switch {
default:
goto yyabort
case c >= '\x01' && c <= '\t' || c >= '\v' && c <= 'ÿ':
goto yystate5
}
yystate8:
c = lexer.getChar()
goto yyrule20
yystate9:
c = lexer.getChar()
switch {
default:
goto yyabort
case c == '\'':
goto yystate10
case c == '\\':
goto yystate11
case c >= '\x01' && c <= '&' || c >= '(' && c <= '[' || c >= ']' && c <= 'ÿ':
goto yystate9
}
yystate10:
c = lexer.getChar()
goto yyrule26
yystate11:
c = lexer.getChar()
switch {
default:
goto yyabort
case c >= '\x01' && c <= '\t' || c >= '\v' && c <= 'ÿ':
goto yystate9
}
yystate12:
c = lexer.getChar()
goto yyrule27
yystate13:
c = lexer.getChar()
goto yyrule19
yystate14:
c = lexer.getChar()
switch {
default:
goto yyrule19
case c >= '0' && c <= '9':
goto yystate15
}
yystate15:
c = lexer.getChar()
switch {
default:
goto yyrule24
case c == '.':
goto yystate16
case c >= '0' && c <= '9':
goto yystate15
}
yystate16:
c = lexer.getChar()
switch {
default:
goto yyrule24
case c >= '0' && c <= '9':
goto yystate16
}
yystate17:
c = lexer.getChar()
switch {
default:
goto yyrule20
case c == '*':
goto yystate18
case c == '/':
goto yystate19
}
yystate18:
c = lexer.getChar()
goto yyrule1
yystate19:
c = lexer.getChar()
switch {
default:
goto yyabort
case c == '\n':
goto yystate20
case c >= '\x01' && c <= '\t' || c == '\v' || c == '\f' || c >= '\x0e' && c <= 'ÿ':
goto yystate19
}
yystate20:
c = lexer.getChar()
goto yyrule4
yystate21:
c = lexer.getChar()
switch {
default:
goto yyrule24
case c == '.':
goto yystate16
case c == 'd' || c == 'h' || c == 'm' || c == 's' || c == 'w' || c == 'y':
goto yystate22
case c >= '0' && c <= '9':
goto yystate21
}
yystate22:
c = lexer.getChar()
goto yyrule21
yystate23:
c = lexer.getChar()
switch {
default:
goto yyrule23
case c >= '0' && c <= ':' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate23
}
yystate24:
c = lexer.getChar()
switch {
default:
goto yyrule17
case c == '=':
goto yystate4
}
yystate25:
c = lexer.getChar()
switch {
default:
goto yyrule27
case c == '=' || c == '~':
goto yystate4
}
yystate26:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'L':
goto yystate28
case c == 'N':
goto yystate32
case c == 'V':
goto yystate34
case c >= '0' && c <= '9' || c >= 'A' && c <= 'K' || c == 'M' || c >= 'O' && c <= 'U' || c >= 'W' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate27:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate28:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'E':
goto yystate29
case c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate29:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'R':
goto yystate30
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate30:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'T':
goto yystate31
case c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate31:
c = lexer.getChar()
switch {
default:
goto yyrule5
case c == ':':
goto yystate23
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate32:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'D':
goto yystate33
case c >= '0' && c <= '9' || c >= 'A' && c <= 'C' || c >= 'E' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate33:
c = lexer.getChar()
switch {
default:
goto yyrule17
case c == ':':
goto yystate23
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate34:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'G':
goto yystate35
case c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate35:
c = lexer.getChar()
switch {
default:
goto yyrule15
case c == ':':
goto yystate23
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate36:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'Y':
goto yystate37
case c >= '0' && c <= '9' || c >= 'A' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate37:
c = lexer.getChar()
switch {
default:
goto yyrule12
case c == ':':
goto yystate23
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate38:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'O':
goto yystate39
case c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate39:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'U':
goto yystate40
case c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate40:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'N':
goto yystate41
case c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate41:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'T':
goto yystate35
case c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate42:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'E':
goto yystate43
case c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate43:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'S':
goto yystate44
case c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate44:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'C':
goto yystate45
case c >= '0' && c <= '9' || c == 'A' || c == 'B' || c >= 'D' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate45:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'R':
goto yystate46
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate46:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'I':
goto yystate47
case c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate47:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'P':
goto yystate48
case c >= '0' && c <= '9' || c >= 'A' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate48:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'T':
goto yystate49
case c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate49:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'I':
goto yystate50
case c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate50:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'O':
goto yystate51
case c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate51:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'N':
goto yystate52
case c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate52:
c = lexer.getChar()
switch {
default:
goto yyrule10
case c == ':':
goto yystate23
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate53:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'O':
goto yystate54
case c >= '0' && c <= '9' || c >= 'A' && c <= 'N' || c >= 'P' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate54:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'R':
goto yystate55
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate55:
c = lexer.getChar()
switch {
default:
goto yyrule7
case c == ':':
goto yystate23
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate56:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'F':
goto yystate57
case c >= '0' && c <= '9' || c >= 'A' && c <= 'E' || c >= 'G' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate57:
c = lexer.getChar()
switch {
default:
goto yyrule6
case c == ':':
goto yystate23
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate58:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'E':
goto yystate59
case c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate59:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'E':
goto yystate60
case c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate60:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'P':
goto yystate61
case c >= '0' && c <= '9' || c >= 'A' && c <= 'O' || c >= 'Q' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate61:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'I':
goto yystate62
case c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate62:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'N':
goto yystate63
case c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate63:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'G':
goto yystate64
case c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'H' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate64:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == '_':
goto yystate65
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate65:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'E':
goto yystate66
case c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate66:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'X':
goto yystate67
case c >= '0' && c <= '9' || c >= 'A' && c <= 'W' || c == 'Y' || c == 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate67:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'T':
goto yystate68
case c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate68:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'R':
goto yystate69
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate69:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'A':
goto yystate70
case c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate70:
c = lexer.getChar()
switch {
default:
goto yyrule13
case c == ':':
goto yystate23
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate71:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'A':
goto yystate72
case c == 'I':
goto yystate73
case c >= '0' && c <= '9' || c >= 'B' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate72:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'X':
goto yystate35
case c >= '0' && c <= '9' || c >= 'A' && c <= 'W' || c == 'Y' || c == 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate73:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'N':
goto yystate35
case c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate74:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'F':
goto yystate75
case c == 'R':
goto yystate33
case c >= '0' && c <= '9' || c >= 'A' && c <= 'E' || c >= 'G' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate75:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'F':
goto yystate76
case c >= '0' && c <= '9' || c >= 'A' && c <= 'E' || c >= 'G' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate76:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'S':
goto yystate77
case c >= '0' && c <= '9' || c >= 'A' && c <= 'R' || c >= 'T' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate77:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'E':
goto yystate78
case c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate78:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'T':
goto yystate79
case c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate79:
c = lexer.getChar()
switch {
default:
goto yyrule14
case c == ':':
goto yystate23
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate80:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'E':
goto yystate81
case c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate81:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'R':
goto yystate82
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate82:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'M':
goto yystate83
case c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate83:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'A':
goto yystate84
case c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate84:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'N':
goto yystate85
case c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate85:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'E':
goto yystate86
case c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate86:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'N':
goto yystate87
case c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate87:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'T':
goto yystate88
case c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate88:
c = lexer.getChar()
switch {
default:
goto yyrule11
case c == ':':
goto yystate23
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate89:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'U':
goto yystate90
case c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate90:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'M':
goto yystate91
case c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate91:
c = lexer.getChar()
switch {
default:
goto yyrule15
case c == ':':
goto yystate23
case c == 'M':
goto yystate92
case c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate92:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'A':
goto yystate93
case c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate93:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'R':
goto yystate94
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate94:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'Y':
goto yystate95
case c >= '0' && c <= '9' || c >= 'A' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate95:
c = lexer.getChar()
switch {
default:
goto yyrule9
case c == ':':
goto yystate23
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate96:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'I':
goto yystate97
case c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate97:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'T':
goto yystate98
case c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate98:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'H':
goto yystate99
case c >= '0' && c <= '9' || c >= 'A' && c <= 'G' || c >= 'I' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate99:
c = lexer.getChar()
switch {
default:
goto yyrule8
case c == ':':
goto yystate23
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate100:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'l':
goto yystate101
case c == 'n':
goto yystate104
case c == 'v':
goto yystate105
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'k' || c == 'm' || c >= 'o' && c <= 'u' || c >= 'w' && c <= 'z':
goto yystate27
}
yystate101:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'e':
goto yystate102
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z':
goto yystate27
}
yystate102:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'r':
goto yystate103
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z':
goto yystate27
}
yystate103:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 't':
goto yystate31
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z':
goto yystate27
}
yystate104:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'd':
goto yystate33
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'c' || c >= 'e' && c <= 'z':
goto yystate27
}
yystate105:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'g':
goto yystate106
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z':
goto yystate27
}
yystate106:
c = lexer.getChar()
switch {
default:
goto yyrule16
case c == ':':
goto yystate23
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate107:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'y':
goto yystate37
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'x' || c == 'z':
goto yystate27
}
yystate108:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'o':
goto yystate109
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z':
goto yystate27
}
yystate109:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'u':
goto yystate110
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z':
goto yystate27
}
yystate110:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'n':
goto yystate111
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z':
goto yystate27
}
yystate111:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 't':
goto yystate106
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z':
goto yystate27
}
yystate112:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'e':
goto yystate113
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z':
goto yystate27
}
yystate113:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 's':
goto yystate114
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z':
goto yystate27
}
yystate114:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'c':
goto yystate115
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z':
goto yystate27
}
yystate115:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'r':
goto yystate116
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z':
goto yystate27
}
yystate116:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'i':
goto yystate117
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z':
goto yystate27
}
yystate117:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'p':
goto yystate118
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'o' || c >= 'q' && c <= 'z':
goto yystate27
}
yystate118:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 't':
goto yystate119
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z':
goto yystate27
}
yystate119:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'i':
goto yystate120
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z':
goto yystate27
}
yystate120:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'o':
goto yystate121
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z':
goto yystate27
}
yystate121:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'n':
goto yystate52
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z':
goto yystate27
}
yystate122:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'o':
goto yystate123
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z':
goto yystate27
}
yystate123:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'r':
goto yystate55
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z':
goto yystate27
}
yystate124:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'f':
goto yystate57
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'e' || c >= 'g' && c <= 'z':
goto yystate27
}
yystate125:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'e':
goto yystate126
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z':
goto yystate27
}
yystate126:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'e':
goto yystate127
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z':
goto yystate27
}
yystate127:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'p':
goto yystate128
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'o' || c >= 'q' && c <= 'z':
goto yystate27
}
yystate128:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'i':
goto yystate129
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z':
goto yystate27
}
yystate129:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'n':
goto yystate130
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z':
goto yystate27
}
yystate130:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'g':
goto yystate131
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z':
goto yystate27
}
yystate131:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == '_':
goto yystate132
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z':
goto yystate27
}
yystate132:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'e':
goto yystate133
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z':
goto yystate27
}
yystate133:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'x':
goto yystate134
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'w' || c == 'y' || c == 'z':
goto yystate27
}
yystate134:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 't':
goto yystate135
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z':
goto yystate27
}
yystate135:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'r':
goto yystate136
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z':
goto yystate27
}
yystate136:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'a':
goto yystate70
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z':
goto yystate27
}
yystate137:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'a':
goto yystate138
case c == 'i':
goto yystate139
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'h' || c >= 'j' && c <= 'z':
goto yystate27
}
yystate138:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'x':
goto yystate106
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'w' || c == 'y' || c == 'z':
goto yystate27
}
yystate139:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'n':
goto yystate106
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z':
goto yystate27
}
yystate140:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'f':
goto yystate141
case c == 'r':
goto yystate33
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'e' || c >= 'g' && c <= 'q' || c >= 's' && c <= 'z':
goto yystate27
}
yystate141:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'f':
goto yystate142
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'e' || c >= 'g' && c <= 'z':
goto yystate27
}
yystate142:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 's':
goto yystate143
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z':
goto yystate27
}
yystate143:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'e':
goto yystate144
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z':
goto yystate27
}
yystate144:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 't':
goto yystate79
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z':
goto yystate27
}
yystate145:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'e':
goto yystate146
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z':
goto yystate27
}
yystate146:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'r':
goto yystate147
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z':
goto yystate27
}
yystate147:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'm':
goto yystate148
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z':
goto yystate27
}
yystate148:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'a':
goto yystate149
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z':
goto yystate27
}
yystate149:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'n':
goto yystate150
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z':
goto yystate27
}
yystate150:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'e':
goto yystate151
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z':
goto yystate27
}
yystate151:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'n':
goto yystate152
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z':
goto yystate27
}
yystate152:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 't':
goto yystate88
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z':
goto yystate27
}
yystate153:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'u':
goto yystate154
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z':
goto yystate27
}
yystate154:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'm':
goto yystate155
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z':
goto yystate27
}
yystate155:
c = lexer.getChar()
switch {
default:
goto yyrule16
case c == ':':
goto yystate23
case c == 'm':
goto yystate156
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z':
goto yystate27
}
yystate156:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'a':
goto yystate157
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z':
goto yystate27
}
yystate157:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'r':
goto yystate158
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z':
goto yystate27
}
yystate158:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'y':
goto yystate95
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'x' || c == 'z':
goto yystate27
}
yystate159:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'i':
goto yystate160
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z':
goto yystate27
}
yystate160:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 't':
goto yystate161
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z':
goto yystate27
}
yystate161:
c = lexer.getChar()
switch {
default:
goto yyrule22
case c == ':':
goto yystate23
case c == 'h':
goto yystate99
case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'g' || c >= 'i' && c <= 'z':
goto yystate27
}
goto yystate162 // silence unused label error
yystate162:
c = lexer.getChar()
yystart162:
switch {
default:
goto yyabort
case c == '*':
goto yystate164
case c >= '\x01' && c <= ')' || c >= '+' && c <= 'ÿ':
goto yystate163
}
yystate163:
c = lexer.getChar()
goto yyrule3
yystate164:
c = lexer.getChar()
switch {
default:
goto yyrule3
case c == '/':
goto yystate165
}
yystate165:
c = lexer.getChar()
goto yyrule2
yyrule1: // "/*"
{
currentState = S_COMMENTS
goto yystate0
}
yyrule2: // "*/"
{
currentState = S_INITIAL
goto yystate0
}
yyrule3: // .|\n
{
/* ignore chars within multi-line comments */
goto yystate0
}
yyrule4: // \/\/[^\r\n]*\n
{
/* gobble up one-line comments */
goto yystate0
}
yyrule5: // ALERT|alert
{
return ALERT
}
yyrule6: // IF|if
{
return IF
}
yyrule7: // FOR|for
{
return FOR
}
yyrule8: // WITH|with
{
return WITH
}
yyrule9: // SUMMARY|summary
{
return SUMMARY
}
yyrule10: // DESCRIPTION|description
{
return DESCRIPTION
}
yyrule11: // PERMANENT|permanent
{
return PERMANENT
}
yyrule12: // BY|by
{
return GROUP_OP
}
yyrule13: // KEEPING_EXTRA|keeping_extra
{
return KEEPING_EXTRA
}
yyrule14: // OFFSET|offset
{
return OFFSET
}
yyrule15: // AVG|SUM|MAX|MIN|COUNT
{
lval.str = lexer.token()
return AGGR_OP
goto yystate0
}
yyrule16: // avg|sum|max|min|count
{
lval.str = strings.ToUpper(lexer.token())
return AGGR_OP
goto yystate0
}
yyrule17: // \<|>|AND|OR|and|or
{
lval.str = strings.ToUpper(lexer.token())
return CMP_OP
goto yystate0
}
yyrule18: // ==|!=|>=|<=|=~|!~
{
lval.str = lexer.token()
return CMP_OP
goto yystate0
}
yyrule19: // [+\-]
{
lval.str = lexer.token()
return ADDITIVE_OP
goto yystate0
}
yyrule20: // [*/%]
{
lval.str = lexer.token()
return MULT_OP
goto yystate0
}
yyrule21: // {D}+{U}
{
lval.str = lexer.token()
return DURATION
goto yystate0
}
yyrule22: // {L}({L}|{D})*
{
lval.str = lexer.token()
return IDENTIFIER
goto yystate0
}
yyrule23: // {M}({M}|{D})*
{
lval.str = lexer.token()
return METRICNAME
goto yystate0
}
yyrule24: // \-?{D}+(\.{D}*)?
{
num, err := strconv.ParseFloat(lexer.token(), 64)
if err != nil && err.(*strconv.NumError).Err == strconv.ErrSyntax {
panic("Invalid float")
}
lval.num = clientmodel.SampleValue(num)
return NUMBER
}
yyrule25: // \"(\\.|[^\\"])*\"
{
lval.str = lexer.token()[1 : len(lexer.token())-1]
return STRING
goto yystate0
}
yyrule26: // \'(\\.|[^\\'])*\'
{
lval.str = lexer.token()[1 : len(lexer.token())-1]
return STRING
goto yystate0
}
yyrule27: // [{}\[\]()=,]
{
return int(lexer.buf[0])
}
yyrule28: // [\t\n\r ]
{
/* gobble up any whitespace */
goto yystate0
}
panic("unreachable")
goto yyabort // silence unused label error
yyabort: // no lexem recognized
lexer.empty = true
return int(c)
}