/* Copyright 2013 Prometheus Team * 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 yystart153 } 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 yystate75 case c == 'S': goto yystate84 case c == 'W': goto yystate91 case c == '\'': goto yystate9 case c == '\t' || c == '\n' || c == '\r' || c == ' ': goto yystate2 case c == 'a': goto yystate95 case c == 'b': goto yystate102 case c == 'c': goto yystate103 case c == 'd': goto yystate107 case c == 'f': goto yystate117 case c == 'i': goto yystate119 case c == 'k': goto yystate120 case c == 'm': goto yystate132 case c == 'o': goto yystate135 case c == 'p': goto yystate136 case c == 's': goto yystate144 case c == 'w': goto yystate150 case c >= '0' && c <= '9': goto yystate21 } yystate2: c = lexer.getChar() goto yyrule27 yystate3: c = lexer.getChar() switch { default: goto yyabort case c == '=' || c == '~': goto yystate4 } yystate4: c = lexer.getChar() goto yyrule17 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 yyrule24 yystate7: c = lexer.getChar() switch { default: goto yyabort case c >= '\x01' && c <= '\t' || c >= '\v' && c <= 'ÿ': goto yystate5 } yystate8: c = lexer.getChar() goto yyrule19 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 yyrule25 yystate11: c = lexer.getChar() switch { default: goto yyabort case c >= '\x01' && c <= '\t' || c >= '\v' && c <= 'ÿ': goto yystate9 } yystate12: c = lexer.getChar() goto yyrule26 yystate13: c = lexer.getChar() goto yyrule18 yystate14: c = lexer.getChar() switch { default: goto yyrule18 case c >= '0' && c <= '9': goto yystate15 } yystate15: c = lexer.getChar() switch { default: goto yyrule23 case c == '.': goto yystate16 case c >= '0' && c <= '9': goto yystate15 } yystate16: c = lexer.getChar() switch { default: goto yyrule23 case c >= '0' && c <= '9': goto yystate16 } yystate17: c = lexer.getChar() switch { default: goto yyrule19 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 yyrule23 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 yyrule20 yystate23: c = lexer.getChar() switch { default: goto yyrule22 case c >= '0' && c <= ':' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate23 } yystate24: c = lexer.getChar() switch { default: goto yyrule16 case c == '=': goto yystate4 } yystate25: c = lexer.getChar() switch { default: goto yyrule26 case c == '=' || c == '~': goto yystate4 } yystate26: c = lexer.getChar() switch { default: goto yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule16 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 yyrule21 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 yyrule14 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 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 yyrule21 case c == ':': goto yystate23 case c == 'R': goto yystate33 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate75: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'E': goto yystate76 case c >= '0' && c <= '9' || c >= 'A' && c <= 'D' || c >= 'F' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate76: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'R': goto yystate77 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate77: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'M': goto yystate78 case c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate78: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'A': goto yystate79 case c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate79: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'N': goto yystate80 case c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate80: c = lexer.getChar() switch { default: goto yyrule21 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 yyrule21 case c == ':': goto yystate23 case c == 'N': goto yystate82 case c >= '0' && c <= '9' || c >= 'A' && c <= 'M' || c >= 'O' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate82: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'T': goto yystate83 case c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate83: 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 } yystate84: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'U': goto yystate85 case c >= '0' && c <= '9' || c >= 'A' && c <= 'T' || c >= 'V' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate85: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'M': goto yystate86 case c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate86: c = lexer.getChar() switch { default: goto yyrule14 case c == ':': goto yystate23 case c == 'M': goto yystate87 case c >= '0' && c <= '9' || c >= 'A' && c <= 'L' || c >= 'N' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate87: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'A': goto yystate88 case c >= '0' && c <= '9' || c >= 'B' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate88: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'R': goto yystate89 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Q' || c >= 'S' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate89: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'Y': goto yystate90 case c >= '0' && c <= '9' || c >= 'A' && c <= 'X' || c == 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate90: 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 } yystate91: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'I': goto yystate92 case c >= '0' && c <= '9' || c >= 'A' && c <= 'H' || c >= 'J' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate92: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'T': goto yystate93 case c >= '0' && c <= '9' || c >= 'A' && c <= 'S' || c >= 'U' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate93: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'H': goto yystate94 case c >= '0' && c <= '9' || c >= 'A' && c <= 'G' || c >= 'I' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'z': goto yystate27 } yystate94: 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 } yystate95: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'l': goto yystate96 case c == 'n': goto yystate99 case c == 'v': goto yystate100 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 } yystate96: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'e': goto yystate97 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': goto yystate27 } yystate97: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'r': goto yystate98 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': goto yystate27 } yystate98: c = lexer.getChar() switch { default: goto yyrule21 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 } yystate99: c = lexer.getChar() switch { default: goto yyrule21 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 } yystate100: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'g': goto yystate101 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': goto yystate27 } yystate101: 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 } yystate102: c = lexer.getChar() switch { default: goto yyrule21 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 } yystate103: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'o': goto yystate104 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': goto yystate27 } yystate104: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'u': goto yystate105 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': goto yystate27 } yystate105: c = lexer.getChar() switch { default: goto yyrule21 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 } yystate106: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 't': goto yystate101 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': goto yystate27 } yystate107: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'e': goto yystate108 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': goto yystate27 } yystate108: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 's': goto yystate109 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'r' || c >= 't' && c <= 'z': goto yystate27 } yystate109: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'c': goto yystate110 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c == 'a' || c == 'b' || c >= 'd' && c <= 'z': goto yystate27 } yystate110: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'r': goto yystate111 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': goto yystate27 } yystate111: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'i': goto yystate112 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': goto yystate27 } yystate112: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'p': goto yystate113 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'o' || c >= 'q' && c <= 'z': goto yystate27 } yystate113: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 't': goto yystate114 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': goto yystate27 } yystate114: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'i': goto yystate115 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': goto yystate27 } yystate115: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'o': goto yystate116 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': goto yystate27 } yystate116: c = lexer.getChar() switch { default: goto yyrule21 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 } yystate117: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'o': goto yystate118 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'n' || c >= 'p' && c <= 'z': goto yystate27 } yystate118: c = lexer.getChar() switch { default: goto yyrule21 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 } yystate119: c = lexer.getChar() switch { default: goto yyrule21 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 } yystate120: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'e': goto yystate121 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': goto yystate27 } yystate121: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'e': goto yystate122 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': goto yystate27 } yystate122: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'p': goto yystate123 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'o' || c >= 'q' && c <= 'z': goto yystate27 } yystate123: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'i': goto yystate124 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': goto yystate27 } yystate124: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'n': goto yystate125 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': goto yystate27 } yystate125: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'g': goto yystate126 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'f' || c >= 'h' && c <= 'z': goto yystate27 } yystate126: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == '_': goto yystate127 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z': goto yystate27 } yystate127: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'e': goto yystate128 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': goto yystate27 } yystate128: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'x': goto yystate129 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'w' || c == 'y' || c == 'z': goto yystate27 } yystate129: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 't': goto yystate130 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': goto yystate27 } yystate130: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'r': goto yystate131 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': goto yystate27 } yystate131: c = lexer.getChar() switch { default: goto yyrule21 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 } yystate132: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'a': goto yystate133 case c == 'i': goto yystate134 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'h' || c >= 'j' && c <= 'z': goto yystate27 } yystate133: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'x': goto yystate101 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 yyrule21 case c == ':': goto yystate23 case c == 'n': goto yystate101 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': goto yystate27 } yystate135: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'r': goto yystate33 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 yyrule21 case c == ':': goto yystate23 case c == 'e': goto yystate137 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': goto yystate27 } yystate137: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'r': goto yystate138 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': goto yystate27 } yystate138: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'm': goto yystate139 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': goto yystate27 } yystate139: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'a': goto yystate140 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': goto yystate27 } yystate140: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'n': goto yystate141 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': goto yystate27 } yystate141: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'e': goto yystate142 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'd' || c >= 'f' && c <= 'z': goto yystate27 } yystate142: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'n': goto yystate143 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'm' || c >= 'o' && c <= 'z': goto yystate27 } yystate143: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 't': goto yystate83 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': goto yystate27 } yystate144: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'u': goto yystate145 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 't' || c >= 'v' && c <= 'z': goto yystate27 } yystate145: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'm': goto yystate146 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': goto yystate27 } yystate146: c = lexer.getChar() switch { default: goto yyrule15 case c == ':': goto yystate23 case c == 'm': goto yystate147 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'l' || c >= 'n' && c <= 'z': goto yystate27 } yystate147: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'a': goto yystate148 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'b' && c <= 'z': goto yystate27 } yystate148: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'r': goto yystate149 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'q' || c >= 's' && c <= 'z': goto yystate27 } yystate149: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'y': goto yystate90 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'x' || c == 'z': goto yystate27 } yystate150: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'i': goto yystate151 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'h' || c >= 'j' && c <= 'z': goto yystate27 } yystate151: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 't': goto yystate152 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 's' || c >= 'u' && c <= 'z': goto yystate27 } yystate152: c = lexer.getChar() switch { default: goto yyrule21 case c == ':': goto yystate23 case c == 'h': goto yystate94 case c >= '0' && c <= '9' || c >= 'A' && c <= 'Z' || c == '_' || c >= 'a' && c <= 'g' || c >= 'i' && c <= 'z': goto yystate27 } goto yystate153 // silence unused label error yystate153: c = lexer.getChar() yystart153: switch { default: goto yyabort case c == '*': goto yystate155 case c >= '\x01' && c <= ')' || c >= '+' && c <= 'ÿ': goto yystate154 } yystate154: c = lexer.getChar() goto yyrule3 yystate155: c = lexer.getChar() switch { default: goto yyrule3 case c == '/': goto yystate156 } yystate156: 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: // AVG|SUM|MAX|MIN|COUNT { lval.str = lexer.token(); return AGGR_OP goto yystate0 } yyrule15: // avg|sum|max|min|count { lval.str = strings.ToUpper(lexer.token()); return AGGR_OP goto yystate0 } yyrule16: // \<|>|AND|OR|and|or { lval.str = strings.ToUpper(lexer.token()); return CMP_OP goto yystate0 } yyrule17: // ==|!=|>=|<=|=~|!~ { lval.str = lexer.token(); return CMP_OP goto yystate0 } yyrule18: // [+\-] { lval.str = lexer.token(); return ADDITIVE_OP goto yystate0 } yyrule19: // [*/%] { lval.str = lexer.token(); return MULT_OP goto yystate0 } yyrule20: // {D}+{U} { lval.str = lexer.token(); return DURATION goto yystate0 } yyrule21: // {L}({L}|{D})* { lval.str = lexer.token(); return IDENTIFIER goto yystate0 } yyrule22: // {M}({M}|{D})* { lval.str = lexer.token(); return METRICNAME goto yystate0 } yyrule23: // \-?{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 } yyrule24: // \"(\\.|[^\\"])*\" { lval.str = lexer.token()[1:len(lexer.token()) - 1]; return STRING goto yystate0 } yyrule25: // \'(\\.|[^\\'])*\' { lval.str = lexer.token()[1:len(lexer.token()) - 1]; return STRING goto yystate0 } yyrule26: // [{}\[\]()=,] { return int(lexer.buf[0]) } yyrule27: // [\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) }