class and kind types removed
This commit is contained in:
parent
9ac88bf446
commit
4d94a7ad59
@ -8,8 +8,8 @@ package expr
|
||||
func newBoolTerm(tk *Token) *term {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classConst,
|
||||
kind: kindBool,
|
||||
// class: classConst,
|
||||
// kind: kindBool,
|
||||
parent: nil,
|
||||
children: nil,
|
||||
position: posLeaf,
|
||||
@ -22,8 +22,6 @@ func newBoolTerm(tk *Token) *term {
|
||||
func newIntegerTerm(tk *Token) *term {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classConst,
|
||||
kind: kindInteger,
|
||||
parent: nil,
|
||||
children: nil,
|
||||
position: posLeaf,
|
||||
@ -36,8 +34,8 @@ func newIntegerTerm(tk *Token) *term {
|
||||
func newFloatTerm(tk *Token) *term {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classConst,
|
||||
kind: kindFloat,
|
||||
// class: classConst,
|
||||
// kind: kindFloat,
|
||||
parent: nil,
|
||||
children: nil,
|
||||
position: posLeaf,
|
||||
@ -50,8 +48,8 @@ func newFloatTerm(tk *Token) *term {
|
||||
func newStringTerm(tk *Token) *term {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classConst,
|
||||
kind: kindString,
|
||||
// class: classConst,
|
||||
// kind: kindString,
|
||||
parent: nil,
|
||||
children: nil,
|
||||
position: posLeaf,
|
||||
|
@ -10,8 +10,6 @@ import "fmt"
|
||||
func newExprTerm(tk *Token) *term {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classVar,
|
||||
kind: kindUnknown,
|
||||
parent: nil,
|
||||
children: nil,
|
||||
position: posLeaf,
|
||||
|
@ -12,8 +12,8 @@ import (
|
||||
func newFuncCallTerm(tk *Token, args []*term) *term {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classVar,
|
||||
kind: kindUnknown,
|
||||
// class: classVar,
|
||||
// kind: kindUnknown,
|
||||
parent: nil,
|
||||
children: args,
|
||||
position: posLeaf,
|
||||
@ -71,8 +71,6 @@ func exportFunc(ctx ExprContext, name string, info ExprFunc) {
|
||||
func newFuncDefTerm(tk *Token, args []*term) *term {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classVar,
|
||||
kind: kindUnknown,
|
||||
parent: nil,
|
||||
children: args, // arg[0]=formal-param-list, arg[1]=*ast
|
||||
position: posLeaf,
|
||||
|
@ -8,8 +8,6 @@ package expr
|
||||
func newListTerm(args []*term) *term {
|
||||
return &term{
|
||||
tk: *NewToken(0, 0, SymList, "[]"),
|
||||
class: classVar,
|
||||
kind: kindUnknown,
|
||||
parent: nil,
|
||||
children: args,
|
||||
position: posLeaf,
|
||||
|
@ -17,8 +17,6 @@ func newSelectorCaseTerm(row, col int, filterList *term, caseExpr Expr) *term {
|
||||
tk := NewValueToken(row, col, SymSelectorCase, "", &selectorCase{filterList: filterList, caseExpr: caseExpr})
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classVar,
|
||||
kind: kindUnknown,
|
||||
parent: nil,
|
||||
children: nil,
|
||||
position: posLeaf,
|
||||
|
@ -10,8 +10,8 @@ import "fmt"
|
||||
func newVarTerm(tk *Token) *term {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classVar,
|
||||
kind: kindUnknown,
|
||||
// class: classVar,
|
||||
// kind: kindUnknown,
|
||||
parent: nil,
|
||||
children: nil,
|
||||
position: posLeaf,
|
||||
|
@ -9,8 +9,6 @@ package expr
|
||||
func newAssignTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindUnknown,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priAssign,
|
||||
|
@ -11,8 +11,6 @@ import "fmt"
|
||||
func newNotTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindBool,
|
||||
children: make([]*term, 0, 1),
|
||||
position: posPrefix,
|
||||
priority: priNot,
|
||||
@ -40,8 +38,8 @@ func evalNot(ctx ExprContext, self *term) (v any, err error) {
|
||||
func newAndTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindBool,
|
||||
// class: classOperator,
|
||||
// kind: kindBool,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priAnd,
|
||||
@ -109,8 +107,8 @@ func evalAndWithShortcut(ctx ExprContext, self *term) (v any, err error) {
|
||||
func newOrTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindBool,
|
||||
// class: classOperator,
|
||||
// kind: kindBool,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priOr,
|
||||
|
@ -9,8 +9,6 @@ package expr
|
||||
func newButTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindUnknown,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priBut,
|
||||
|
@ -9,8 +9,8 @@ package expr
|
||||
func newNullCoalesceTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindUnknown,
|
||||
// class: classOperator,
|
||||
// kind: kindUnknown,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priCoalesce,
|
||||
@ -48,8 +48,6 @@ func evalNullCoalesce(ctx ExprContext, self *term) (v any, err error) {
|
||||
func newCoalesceAssignTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindUnknown,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priCoalesce,
|
||||
|
@ -9,8 +9,6 @@ package expr
|
||||
func newExportAllTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindUnknown,
|
||||
children: nil,
|
||||
position: posLeaf,
|
||||
priority: priValue,
|
||||
|
@ -11,8 +11,6 @@ import "fmt"
|
||||
func newFactTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindInteger,
|
||||
children: make([]*term, 0, 1),
|
||||
position: posPostfix,
|
||||
priority: priFact,
|
||||
|
@ -14,8 +14,8 @@ import (
|
||||
func newMultiplyTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindUnknown,
|
||||
// class: classOperator,
|
||||
// kind: kindUnknown,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priProduct,
|
||||
@ -53,8 +53,8 @@ func evalMultiply(ctx ExprContext, self *term) (v any, err error) {
|
||||
func newDivideTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindUnknown,
|
||||
// class: classOperator,
|
||||
// kind: kindUnknown,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priProduct,
|
||||
@ -96,8 +96,6 @@ func evalDivide(ctx ExprContext, self *term) (v any, err error) {
|
||||
func newDivideAsFloatTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindUnknown,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priProduct,
|
||||
@ -130,8 +128,8 @@ func evalDivideAsFloat(ctx ExprContext, self *term) (v any, err error) {
|
||||
func newReminderTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindUnknown,
|
||||
// class: classOperator,
|
||||
// kind: kindUnknown,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priProduct,
|
||||
|
@ -9,8 +9,8 @@ package expr
|
||||
func newEqualTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindBool,
|
||||
// class: classOperator,
|
||||
// kind: kindBool,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priRelational,
|
||||
@ -48,8 +48,8 @@ func evalEqual(ctx ExprContext, self *term) (v any, err error) {
|
||||
func newNotEqualTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindBool,
|
||||
// class: classOperator,
|
||||
// kind: kindBool,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priRelational,
|
||||
@ -95,8 +95,8 @@ func evalNotEqual(ctx ExprContext, self *term) (v any, err error) {
|
||||
func newLessTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindBool,
|
||||
// class: classOperator,
|
||||
// kind: kindBool,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priRelational,
|
||||
@ -134,8 +134,6 @@ func evalLess(ctx ExprContext, self *term) (v any, err error) {
|
||||
func newLessEqualTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindUnknown,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priRelational,
|
||||
@ -173,8 +171,8 @@ func evalLessEqual(ctx ExprContext, self *term) (v any, err error) {
|
||||
func newGreaterTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindBool,
|
||||
// class: classOperator,
|
||||
// kind: kindBool,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priRelational,
|
||||
@ -195,8 +193,8 @@ func evalGreater(ctx ExprContext, self *term) (v any, err error) {
|
||||
func newGreaterEqualTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindBool,
|
||||
// class: classOperator,
|
||||
// kind: kindBool,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priRelational,
|
||||
|
@ -9,8 +9,6 @@ package expr
|
||||
func newSelectorTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindUnknown,
|
||||
children: make([]*term, 0, 3),
|
||||
position: posMultifix,
|
||||
priority: priSelector,
|
||||
|
@ -9,8 +9,8 @@ package expr
|
||||
func newPlusSignTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindUnknown,
|
||||
// class: classOperator,
|
||||
// kind: kindUnknown,
|
||||
children: make([]*term, 0, 1),
|
||||
position: posPrefix,
|
||||
priority: priSign,
|
||||
@ -21,8 +21,6 @@ func newPlusSignTerm(tk *Token) (inst *term) {
|
||||
func newMinusSignTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindUnknown,
|
||||
children: make([]*term, 0, 1),
|
||||
position: posPrefix,
|
||||
priority: priSign,
|
||||
|
@ -14,8 +14,6 @@ import (
|
||||
func newPlusTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindUnknown,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priSum,
|
||||
@ -68,8 +66,8 @@ func evalPlus(ctx ExprContext, self *term) (v any, err error) {
|
||||
func newMinusTerm(tk *Token) (inst *term) {
|
||||
return &term{
|
||||
tk: *tk,
|
||||
class: classOperator,
|
||||
kind: kindUnknown,
|
||||
// class: classOperator,
|
||||
// kind: kindUnknown,
|
||||
children: make([]*term, 0, 2),
|
||||
position: posInfix,
|
||||
priority: priSum,
|
||||
|
37
term.go
37
term.go
@ -8,27 +8,6 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
type termKind uint16
|
||||
|
||||
const (
|
||||
kindUnknown termKind = iota
|
||||
kindBool
|
||||
kindInteger
|
||||
kindFloat
|
||||
kindString
|
||||
kindIdentifier
|
||||
)
|
||||
|
||||
type termClass uint16
|
||||
|
||||
const (
|
||||
classNull termClass = iota
|
||||
classConst
|
||||
classVar
|
||||
classFunc
|
||||
classOperator
|
||||
)
|
||||
|
||||
type termPriority uint32
|
||||
|
||||
const (
|
||||
@ -60,23 +39,11 @@ const (
|
||||
|
||||
type evalFuncType func(ctx ExprContext, self *term) (v any, err error)
|
||||
|
||||
// type iterm interface {
|
||||
// getClass() termClass
|
||||
// getKind() termKind
|
||||
// compute(ctx exprContext) (v any, err error)
|
||||
// // isOperator() bool
|
||||
// // isOperand() bool
|
||||
// source() string
|
||||
// setParent(parentNode term)
|
||||
// }
|
||||
|
||||
type term struct {
|
||||
tk Token
|
||||
class termClass
|
||||
kind termKind
|
||||
parent *term
|
||||
children []*term
|
||||
position termPosition // operator position: infix, prefix, suffix
|
||||
position termPosition // operator position: leaf, infix, prefix, postfix, multifix
|
||||
priority termPriority // operator priority: higher value means higher priority
|
||||
evalFunc evalFuncType
|
||||
}
|
||||
@ -169,7 +136,7 @@ func (self *term) value() any {
|
||||
|
||||
func (self *term) compute(ctx ExprContext) (v any, err error) {
|
||||
if self.evalFunc == nil {
|
||||
err = self.tk.Errorf("undefined eval-func for %v term type", self.kind)
|
||||
err = self.tk.Errorf("undefined eval-func for %q term", self.source())
|
||||
} else {
|
||||
v, err = self.evalFunc(ctx, self)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user