moved scanner sources to package 'scan'
This commit is contained in:
+63
-62
@@ -8,17 +8,18 @@ import (
|
||||
"reflect"
|
||||
|
||||
"git.portale-stac.it/go-pkg/expr/kern"
|
||||
"git.portale-stac.it/go-pkg/expr/scan"
|
||||
)
|
||||
|
||||
//-------- equal term
|
||||
|
||||
func newEqualTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priRelational,
|
||||
evalFunc: evalEqual,
|
||||
func newEqualTerm(tk *scan.Token) (inst *scan.Term) {
|
||||
return &scan.Term{
|
||||
Tk: *tk,
|
||||
Children: make([]*scan.Term, 0, 2),
|
||||
Position: scan.PosInfix,
|
||||
Priority: scan.PriRelational,
|
||||
EvalFunc: evalEqual,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,10 +50,10 @@ func equals(a, b any, deepCmp kern.DeepFuncTemplate) (eq bool, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func evalEqual(ctx kern.ExprContext, opTerm *term) (v any, err error) {
|
||||
func evalEqual(ctx kern.ExprContext, opTerm *scan.Term) (v any, err error) {
|
||||
var leftValue, rightValue any
|
||||
|
||||
if leftValue, rightValue, err = opTerm.evalInfix(ctx); err != nil {
|
||||
if leftValue, rightValue, err = opTerm.EvalInfix(ctx); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -62,17 +63,17 @@ func evalEqual(ctx kern.ExprContext, opTerm *term) (v any, err error) {
|
||||
|
||||
//-------- not equal term
|
||||
|
||||
func newNotEqualTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priRelational,
|
||||
evalFunc: evalNotEqual,
|
||||
func newNotEqualTerm(tk *scan.Token) (inst *scan.Term) {
|
||||
return &scan.Term{
|
||||
Tk: *tk,
|
||||
Children: make([]*scan.Term, 0, 2),
|
||||
Position: scan.PosInfix,
|
||||
Priority: scan.PriRelational,
|
||||
EvalFunc: evalNotEqual,
|
||||
}
|
||||
}
|
||||
|
||||
func evalNotEqual(ctx kern.ExprContext, opTerm *term) (v any, err error) {
|
||||
func evalNotEqual(ctx kern.ExprContext, opTerm *scan.Term) (v any, err error) {
|
||||
if v, err = evalEqual(ctx, opTerm); err == nil {
|
||||
b, _ := kern.ToBool(v)
|
||||
v = !b
|
||||
@@ -82,17 +83,17 @@ func evalNotEqual(ctx kern.ExprContext, opTerm *term) (v any, err error) {
|
||||
|
||||
//-------- less term
|
||||
|
||||
func newLessTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priRelational,
|
||||
evalFunc: evalLess,
|
||||
func newLessTerm(tk *scan.Token) (inst *scan.Term) {
|
||||
return &scan.Term{
|
||||
Tk: *tk,
|
||||
Children: make([]*scan.Term, 0, 2),
|
||||
Position: scan.PosInfix,
|
||||
Priority: scan.PriRelational,
|
||||
EvalFunc: evalLess,
|
||||
}
|
||||
}
|
||||
|
||||
func lessThan(self *term, a, b any) (isLess bool, err error) {
|
||||
func lessThan(self *scan.Term, a, b any) (isLess bool, err error) {
|
||||
if kern.IsNumOrFract(a) && kern.IsNumOrFract(b) {
|
||||
if kern.IsNumber(a) && kern.IsNumber(b) {
|
||||
if kern.IsInteger(a) && kern.IsInteger(b) {
|
||||
@@ -118,15 +119,15 @@ func lessThan(self *term, a, b any) (isLess bool, err error) {
|
||||
bList, _ := b.(*kern.ListType)
|
||||
isLess = len(*aList) < len(*bList) && bList.Contains(aList)
|
||||
} else {
|
||||
err = self.errIncompatibleTypes(a, b)
|
||||
err = self.ErrIncompatibleTypes(a, b)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func evalLess(ctx kern.ExprContext, opTerm *term) (v any, err error) {
|
||||
func evalLess(ctx kern.ExprContext, opTerm *scan.Term) (v any, err error) {
|
||||
var leftValue, rightValue any
|
||||
|
||||
if leftValue, rightValue, err = opTerm.evalInfix(ctx); err != nil {
|
||||
if leftValue, rightValue, err = opTerm.EvalInfix(ctx); err != nil {
|
||||
return
|
||||
}
|
||||
v, err = lessThan(opTerm, leftValue, rightValue)
|
||||
@@ -135,17 +136,17 @@ func evalLess(ctx kern.ExprContext, opTerm *term) (v any, err error) {
|
||||
|
||||
//-------- less or equal term
|
||||
|
||||
func newLessEqualTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priRelational,
|
||||
evalFunc: evalLessEqual,
|
||||
func newLessEqualTerm(tk *scan.Token) (inst *scan.Term) {
|
||||
return &scan.Term{
|
||||
Tk: *tk,
|
||||
Children: make([]*scan.Term, 0, 2),
|
||||
Position: scan.PosInfix,
|
||||
Priority: scan.PriRelational,
|
||||
EvalFunc: evalLessEqual,
|
||||
}
|
||||
}
|
||||
|
||||
func lessThanOrEqual(self *term, a, b any) (isLessEq bool, err error) {
|
||||
func lessThanOrEqual(self *scan.Term, a, b any) (isLessEq bool, err error) {
|
||||
if isLessEq, err = lessThan(self, a, b); err == nil {
|
||||
if !isLessEq {
|
||||
if kern.IsList(a) && kern.IsList(b) {
|
||||
@@ -158,10 +159,10 @@ func lessThanOrEqual(self *term, a, b any) (isLessEq bool, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func evalLessEqual(ctx kern.ExprContext, opTerm *term) (v any, err error) {
|
||||
func evalLessEqual(ctx kern.ExprContext, opTerm *scan.Term) (v any, err error) {
|
||||
var leftValue, rightValue any
|
||||
|
||||
if leftValue, rightValue, err = opTerm.evalInfix(ctx); err != nil {
|
||||
if leftValue, rightValue, err = opTerm.EvalInfix(ctx); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -172,20 +173,20 @@ func evalLessEqual(ctx kern.ExprContext, opTerm *term) (v any, err error) {
|
||||
|
||||
//-------- greater term
|
||||
|
||||
func newGreaterTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priRelational,
|
||||
evalFunc: evalGreater,
|
||||
func newGreaterTerm(tk *scan.Token) (inst *scan.Term) {
|
||||
return &scan.Term{
|
||||
Tk: *tk,
|
||||
Children: make([]*scan.Term, 0, 2),
|
||||
Position: scan.PosInfix,
|
||||
Priority: scan.PriRelational,
|
||||
EvalFunc: evalGreater,
|
||||
}
|
||||
}
|
||||
|
||||
func evalGreater(ctx kern.ExprContext, opTerm *term) (v any, err error) {
|
||||
func evalGreater(ctx kern.ExprContext, opTerm *scan.Term) (v any, err error) {
|
||||
var leftValue, rightValue any
|
||||
|
||||
if leftValue, rightValue, err = opTerm.evalInfix(ctx); err != nil {
|
||||
if leftValue, rightValue, err = opTerm.EvalInfix(ctx); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -195,20 +196,20 @@ func evalGreater(ctx kern.ExprContext, opTerm *term) (v any, err error) {
|
||||
|
||||
//-------- greater or equal term
|
||||
|
||||
func newGreaterEqualTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priRelational,
|
||||
evalFunc: evalGreaterEqual,
|
||||
func newGreaterEqualTerm(tk *scan.Token) (inst *scan.Term) {
|
||||
return &scan.Term{
|
||||
Tk: *tk,
|
||||
Children: make([]*scan.Term, 0, 2),
|
||||
Position: scan.PosInfix,
|
||||
Priority: scan.PriRelational,
|
||||
EvalFunc: evalGreaterEqual,
|
||||
}
|
||||
}
|
||||
|
||||
func evalGreaterEqual(ctx kern.ExprContext, opTerm *term) (v any, err error) {
|
||||
func evalGreaterEqual(ctx kern.ExprContext, opTerm *scan.Term) (v any, err error) {
|
||||
var leftValue, rightValue any
|
||||
|
||||
if leftValue, rightValue, err = opTerm.evalInfix(ctx); err != nil {
|
||||
if leftValue, rightValue, err = opTerm.EvalInfix(ctx); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -218,10 +219,10 @@ func evalGreaterEqual(ctx kern.ExprContext, opTerm *term) (v any, err error) {
|
||||
|
||||
// init
|
||||
func init() {
|
||||
registerTermConstructor(SymDoubleEqual, newEqualTerm)
|
||||
registerTermConstructor(SymNotEqual, newNotEqualTerm)
|
||||
registerTermConstructor(SymLess, newLessTerm)
|
||||
registerTermConstructor(SymLessOrEqual, newLessEqualTerm)
|
||||
registerTermConstructor(SymGreater, newGreaterTerm)
|
||||
registerTermConstructor(SymGreaterOrEqual, newGreaterEqualTerm)
|
||||
scan.RegisterTermConstructor(scan.SymDoubleEqual, newEqualTerm)
|
||||
scan.RegisterTermConstructor(scan.SymNotEqual, newNotEqualTerm)
|
||||
scan.RegisterTermConstructor(scan.SymLess, newLessTerm)
|
||||
scan.RegisterTermConstructor(scan.SymLessOrEqual, newLessEqualTerm)
|
||||
scan.RegisterTermConstructor(scan.SymGreater, newGreaterTerm)
|
||||
scan.RegisterTermConstructor(scan.SymGreaterOrEqual, newGreaterEqualTerm)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user