promql/lex.go
func lexKeywordOrIdentifier(l *lexer) stateFn {
Loop:
	for {
		switch r := l.next(); {
		case isAlphaNumeric(r) || r == ':':
			// absorb.
		default:
			l.backup()
			word := l.input[l.start:l.pos]
			if kw, ok := key[strings.ToLower(word)]; ok {
				l.emit(kw)
			} else if !strings.Contains(word, ":") {
				l.emit(ItemIdentifier)
			} else {
				l.emit(ItemMetricIdentifier)
			}
			break Loop
		}
	}
	if l.seriesDesc && l.peek() != '{' {
		return lexValueSequence
	}
	return lexStatements
}
func lexKeywordOrIdentifier(l *lexer) stateFn {
Loop:
	for {
		switch r := l.next(); {
		case isAlphaNumeric(r) || r == ':':
			// absorb.
		default:
			l.backup()
			word := l.input[l.start:l.pos]
			if kw, ok := key[strings.ToLower(word)]; ok {
				l.emit(kw)
			} else if !strings.Contains(word, ":") {
				l.emit(ItemIdentifier)
			} else {
				l.emit(ItemMetricIdentifier)
			}
			break Loop
		}
	}
	if l.seriesDesc && l.peek() != '{' {
		return lexValueSequence
	}
	return lexStatements
}
func lexKeywordOrIdentifier ( l * lexer ) stateFn { Loop : for { switch r := l . next ( ) ; { case isAlphaNumeric ( r ) || r == ':' : // absorb. default : l . backup ( ) word := l . input [ l . start : l . pos ] if kw , ok := key [ strings . ToLower ( word ) ] ; ok { l . emit ( kw ) } else if ! strings . Contains ( word , " " ) { l . emit ( ItemIdentifier ) } else { l . emit ( ItemMetricIdentifier ) } break Loop } } if l . seriesDesc && l . peek ( ) != '{' { return lexValueSequence } return lexStatements }
// lexKeywordOrIdentifier scans an alphanumeric identifier which may contain
// a colon rune. If the identifier is a keyword the respective keyword item
// is scanned.
lexKeywordOrIdentifier scans an alphanumeric identifier which may contain a colon rune . If the identifier is a keyword the respective keyword item is scanned .