several changes:
1. moved scan/symbol.go to new package sym and adapted all files that reference Symbol type and its values. 2. new type interval defined by begin, end and step values. 3. replaced operator-range.go with operator-interval.go. 4. replaced range operator begin:end with begin..end..step. 5. new implementation of sub-collection extraction based on new interval literal.
This commit is contained in:
+24
-22
@@ -8,12 +8,14 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"slices"
|
||||
|
||||
"git.portale-stac.it/go-pkg/expr/sym"
|
||||
)
|
||||
|
||||
type Token struct {
|
||||
row int
|
||||
col int
|
||||
Sym Symbol
|
||||
Sym sym.Symbol
|
||||
source string
|
||||
Value any
|
||||
}
|
||||
@@ -36,19 +38,19 @@ func (tk *Token) String() string {
|
||||
return tk.source
|
||||
}
|
||||
|
||||
func NewToken(row, col int, sym Symbol, source string) *Token {
|
||||
return &Token{row: row, col: col, Sym: sym, source: source}
|
||||
func NewToken(row, col int, symbol sym.Symbol, source string) *Token {
|
||||
return &Token{row: row, col: col, Sym: symbol, source: source}
|
||||
}
|
||||
|
||||
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 NewValueToken(row, col int, symbol sym.Symbol, source string, value any) *Token {
|
||||
return &Token{row: row, col: col, Sym: symbol, source: source, Value: value}
|
||||
}
|
||||
|
||||
func NewErrorToken(row, col int, err error) *Token {
|
||||
if err == io.EOF {
|
||||
return NewToken(row, col, SymEos, "<EOF>")
|
||||
return NewToken(row, col, sym.SymEos, "<EOF>")
|
||||
}
|
||||
return NewValueToken(row, col, SymError, fmt.Sprintf("[%d:%d]", row, col), err)
|
||||
return NewValueToken(row, col, sym.SymError, fmt.Sprintf("[%d:%d]", row, col), err)
|
||||
}
|
||||
|
||||
func (tk *Token) Source() string {
|
||||
@@ -68,31 +70,31 @@ func (tk *Token) Clone() (c *Token) {
|
||||
}
|
||||
|
||||
func (tk *Token) IsEos() bool {
|
||||
return tk.Sym == SymEos
|
||||
return tk.Sym == sym.SymEos
|
||||
}
|
||||
|
||||
func (tk *Token) IsError() bool {
|
||||
return tk.Sym == SymError
|
||||
return tk.Sym == sym.SymError
|
||||
}
|
||||
|
||||
func (tk *Token) IsTerm(termSymbols []Symbol) bool {
|
||||
return tk.IsEos() || tk.IsError() || tk.IsOneOf(termSymbols)
|
||||
func (tk *Token) IsTerm(symbols []sym.Symbol) bool {
|
||||
return tk.IsEos() || tk.IsError() || tk.IsOneOf(symbols)
|
||||
}
|
||||
|
||||
func (tk *Token) IsOneOf(termSymbols []Symbol) bool {
|
||||
return termSymbols != nil && slices.Index(termSymbols, tk.Sym) >= 0
|
||||
func (tk *Token) IsOneOf(symbols []sym.Symbol) bool {
|
||||
return symbols != nil && slices.Index(symbols, tk.Sym) >= 0
|
||||
}
|
||||
|
||||
func (tk *Token) IsOneOfA(termSymbols ...Symbol) bool {
|
||||
return slices.Index(termSymbols, tk.Sym) >= 0
|
||||
func (tk *Token) IsOneOfA(symbols ...sym.Symbol) bool {
|
||||
return slices.Index(symbols, tk.Sym) >= 0
|
||||
}
|
||||
|
||||
func (tk *Token) IsSymbol(sym Symbol) bool {
|
||||
return tk.Sym == sym
|
||||
func (tk *Token) IsSymbol(symbol sym.Symbol) bool {
|
||||
return tk.Sym == symbol
|
||||
}
|
||||
|
||||
func (tk *Token) SetSymbol(sym Symbol) {
|
||||
tk.Sym = sym
|
||||
func (tk *Token) SetSymbol(symbol sym.Symbol) {
|
||||
tk.Sym = symbol
|
||||
}
|
||||
|
||||
func (tk *Token) Errorf(template string, args ...any) (err error) {
|
||||
@@ -101,7 +103,7 @@ func (tk *Token) Errorf(template string, args ...any) (err error) {
|
||||
}
|
||||
|
||||
func (tk *Token) Error() (err error) {
|
||||
if tk.Sym == SymError {
|
||||
if tk.Sym == sym.SymError {
|
||||
if msg, ok := tk.Value.(error); ok {
|
||||
err = fmt.Errorf("[%d:%d] %v", tk.row, tk.col, msg)
|
||||
}
|
||||
@@ -110,7 +112,7 @@ func (tk *Token) Error() (err error) {
|
||||
}
|
||||
|
||||
func (tk *Token) ErrorText() (err string) {
|
||||
if tk.Sym == SymError {
|
||||
if tk.Sym == sym.SymError {
|
||||
if msg, ok := tk.Value.(error); ok {
|
||||
err = msg.Error()
|
||||
}
|
||||
@@ -137,6 +139,6 @@ func (tk *Token) ErrorExpectedGotStringWithPrefix(prefix, symbol, got string) (e
|
||||
return
|
||||
}
|
||||
|
||||
func (tk *Token) ErrorExpectedOneOfGot(expected ...Symbol) (err error) {
|
||||
func (tk *Token) ErrorExpectedOneOfGot(expected ...sym.Symbol) (err error) {
|
||||
return tk.ErrorExpectedGotStringWithPrefix("expected one of ", SymListToString(expected, true), SymToString(tk.Sym))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user