Expressions now support function definition
This commit is contained in:
@@ -11,6 +11,8 @@ import (
|
||||
)
|
||||
|
||||
type Token struct {
|
||||
row int
|
||||
col int
|
||||
Sym Symbol
|
||||
source string
|
||||
Value any
|
||||
@@ -30,19 +32,19 @@ func (tk *Token) String() string {
|
||||
return fmt.Sprintf("%s", tk.source)
|
||||
}
|
||||
|
||||
func NewToken(sym Symbol, source string) *Token {
|
||||
return &Token{Sym: sym, source: source}
|
||||
func NewToken(row, col int, sym Symbol, source string) *Token {
|
||||
return &Token{row: row, col: col, Sym: sym, source: source}
|
||||
}
|
||||
|
||||
func NewValueToken(sym Symbol, source string, value any) *Token {
|
||||
return &Token{Sym: sym, source: source, Value: value}
|
||||
func NewValueToken(row, col int, sym Symbol, source string, value any) *Token {
|
||||
return &Token{row: row, col: col, Sym: sym, source: source, Value: value}
|
||||
}
|
||||
|
||||
func NewErrorToken(row, col int, err error) *Token {
|
||||
if err == io.EOF {
|
||||
return NewToken(SymEos, "")
|
||||
return NewToken(row, col, SymEos, "")
|
||||
}
|
||||
return NewValueToken(SymError, fmt.Sprintf("[%d:%d]", row, col), err)
|
||||
return NewValueToken(row, col, SymError, fmt.Sprintf("[%d:%d]", row, col), err)
|
||||
}
|
||||
|
||||
func (tk *Token) IsEos() bool {
|
||||
@@ -56,3 +58,8 @@ func (tk *Token) IsError() bool {
|
||||
func (tk *Token) IsTerm(termSymbols []Symbol) bool {
|
||||
return tk.IsEos() || tk.IsError() || (termSymbols != nil && slices.Index(termSymbols, tk.Sym) >= 0)
|
||||
}
|
||||
|
||||
func (self *Token) Errorf(template string, args ...any) (err error) {
|
||||
err = fmt.Errorf(fmt.Sprintf("[%d:%d] ", self.row, self.col)+template, args...)
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user