moved scanner sources to package 'scan'
This commit is contained in:
+25
-24
@@ -9,21 +9,22 @@ import (
|
||||
"slices"
|
||||
|
||||
"git.portale-stac.it/go-pkg/expr/kern"
|
||||
"git.portale-stac.it/go-pkg/expr/scan"
|
||||
)
|
||||
|
||||
//-------- plus term
|
||||
|
||||
func newPlusTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priSum,
|
||||
evalFunc: evalPlus,
|
||||
func newPlusTerm(tk *scan.Token) (inst *scan.Term) {
|
||||
return &scan.Term{
|
||||
Tk: *tk,
|
||||
Children: make([]*scan.Term, 0, 2),
|
||||
Position: scan.PosInfix,
|
||||
Priority: scan.PriSum,
|
||||
EvalFunc: evalPlus,
|
||||
}
|
||||
}
|
||||
|
||||
func sumValues(plusTerm *term, leftValue, rightValue any) (v any, err error) {
|
||||
func sumValues(plusTerm *scan.Term, leftValue, rightValue any) (v any, err error) {
|
||||
if (kern.IsString(leftValue) && kern.IsNumberString(rightValue)) || (kern.IsString(rightValue) && kern.IsNumberString(leftValue)) {
|
||||
v = fmt.Sprintf("%v%v", leftValue, rightValue)
|
||||
} else if kern.IsNumber(leftValue) && kern.IsNumber(rightValue) {
|
||||
@@ -58,15 +59,15 @@ func sumValues(plusTerm *term, leftValue, rightValue any) (v any, err error) {
|
||||
} else if kern.IsFraction(leftValue) && kern.IsFraction(rightValue) {
|
||||
v, err = kern.SumAnyFract(leftValue, rightValue)
|
||||
} else {
|
||||
err = plusTerm.errIncompatibleTypes(leftValue, rightValue)
|
||||
err = plusTerm.ErrIncompatibleTypes(leftValue, rightValue)
|
||||
}
|
||||
return v, err
|
||||
}
|
||||
|
||||
func evalPlus(ctx kern.ExprContext, plusTerm *term) (v any, err error) {
|
||||
func evalPlus(ctx kern.ExprContext, plusTerm *scan.Term) (v any, err error) {
|
||||
var leftValue, rightValue any
|
||||
|
||||
if leftValue, rightValue, err = plusTerm.evalInfix(ctx); err != nil {
|
||||
if leftValue, rightValue, err = plusTerm.EvalInfix(ctx); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -75,17 +76,17 @@ func evalPlus(ctx kern.ExprContext, plusTerm *term) (v any, err error) {
|
||||
|
||||
//-------- minus term
|
||||
|
||||
func newMinusTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priSum,
|
||||
evalFunc: evalMinus,
|
||||
func newMinusTerm(tk *scan.Token) (inst *scan.Term) {
|
||||
return &scan.Term{
|
||||
Tk: *tk,
|
||||
Children: make([]*scan.Term, 0, 2),
|
||||
Position: scan.PosInfix,
|
||||
Priority: scan.PriSum,
|
||||
EvalFunc: evalMinus,
|
||||
}
|
||||
}
|
||||
|
||||
func diffValues(minusTerm *term, leftValue, rightValue any) (v any, err error) {
|
||||
func diffValues(minusTerm *scan.Term, leftValue, rightValue any) (v any, err error) {
|
||||
if kern.IsNumOrFract(leftValue) && kern.IsNumOrFract(rightValue) {
|
||||
if kern.IsFloat(leftValue) || kern.IsFloat(rightValue) {
|
||||
v = kern.NumAsFloat(leftValue) - kern.NumAsFloat(rightValue)
|
||||
@@ -107,15 +108,15 @@ func diffValues(minusTerm *term, leftValue, rightValue any) (v any, err error) {
|
||||
}
|
||||
v = &diffList
|
||||
} else {
|
||||
err = minusTerm.errIncompatibleTypes(leftValue, rightValue)
|
||||
err = minusTerm.ErrIncompatibleTypes(leftValue, rightValue)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func evalMinus(ctx kern.ExprContext, minusTerm *term) (v any, err error) {
|
||||
func evalMinus(ctx kern.ExprContext, minusTerm *scan.Term) (v any, err error) {
|
||||
var leftValue, rightValue any
|
||||
|
||||
if leftValue, rightValue, err = minusTerm.evalInfix(ctx); err != nil {
|
||||
if leftValue, rightValue, err = minusTerm.EvalInfix(ctx); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -124,6 +125,6 @@ func evalMinus(ctx kern.ExprContext, minusTerm *term) (v any, err error) {
|
||||
|
||||
// init
|
||||
func init() {
|
||||
registerTermConstructor(SymPlus, newPlusTerm)
|
||||
registerTermConstructor(SymMinus, newMinusTerm)
|
||||
scan.RegisterTermConstructor(scan.SymPlus, newPlusTerm)
|
||||
scan.RegisterTermConstructor(scan.SymMinus, newMinusTerm)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user