github.com/expr-lang/expr@v1.16.9/parser/lexer/token.go (about) 1 package lexer 2 3 import ( 4 "fmt" 5 6 "github.com/expr-lang/expr/file" 7 ) 8 9 type Kind string 10 11 const ( 12 Identifier Kind = "Identifier" 13 Number Kind = "Number" 14 String Kind = "String" 15 Operator Kind = "Operator" 16 Bracket Kind = "Bracket" 17 EOF Kind = "EOF" 18 ) 19 20 type Token struct { 21 file.Location 22 Kind Kind 23 Value string 24 } 25 26 func (t Token) String() string { 27 if t.Value == "" { 28 return string(t.Kind) 29 } 30 return fmt.Sprintf("%s(%#v)", t.Kind, t.Value) 31 } 32 33 func (t Token) Is(kind Kind, values ...string) bool { 34 if len(values) == 0 { 35 return kind == t.Kind 36 } 37 38 for _, v := range values { 39 if v == t.Value { 40 goto found 41 } 42 } 43 return false 44 45 found: 46 return kind == t.Kind 47 }