mirror of
https://github.com/hanzoai/expr.git
synced 2026-09-24 16:58:58 +00:00
* convert source to a struct and fix minor issue displaying error * lexer: add byte and char pos * improve parser to use string instead of []rune * add lexer benchmarks * make lexer work as an iterator * make parser use the new iterator API in lexer * allow reusing the parser * cleanup code * add parser benchmarks
44 lines
655 B
Go
44 lines
655 B
Go
package lexer
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/expr-lang/expr/file"
|
|
)
|
|
|
|
type Kind string
|
|
|
|
const (
|
|
Identifier Kind = "Identifier"
|
|
Number Kind = "Number"
|
|
String Kind = "String"
|
|
Operator Kind = "Operator"
|
|
Bracket Kind = "Bracket"
|
|
EOF Kind = "EOF"
|
|
)
|
|
|
|
type Token struct {
|
|
file.Location
|
|
Kind Kind
|
|
Value string
|
|
}
|
|
|
|
func (t Token) String() string {
|
|
if t.Value == "" {
|
|
return string(t.Kind)
|
|
}
|
|
return fmt.Sprintf("%s(%#v)", t.Kind, t.Value)
|
|
}
|
|
|
|
func (t Token) Is(kind Kind, values ...string) bool {
|
|
if kind != t.Kind {
|
|
return false
|
|
}
|
|
for _, v := range values {
|
|
if v == t.Value {
|
|
return true
|
|
}
|
|
}
|
|
return len(values) == 0
|
|
}
|