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  }