parse

package
v0.0.0-...-e25bc3e Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 13, 2021 License: MIT Imports: 8 Imported by: 12

Documentation

Overview

Package parse builds parse trees for expressions as defined by expr. Clients should use that package to construct expressions rather than this one, which provides shared internal data structures not intended for general use.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Walk

func Walk(n Node, f func(Node))

Walk invokes f on n and sub-nodes of n.

Types

type BinaryNode

type BinaryNode struct {
	NodeType
	Pos
	Args     [2]Node
	Operator item
	OpStr    string
}

BinaryNode holds two arguments and an operator.

func (*BinaryNode) Check

func (b *BinaryNode) Check(t *Tree) error

func (*BinaryNode) Return

func (b *BinaryNode) Return() models.FuncType

func (*BinaryNode) String

func (b *BinaryNode) String() string

func (*BinaryNode) StringAST

func (b *BinaryNode) StringAST() string

func (*BinaryNode) Tags

func (b *BinaryNode) Tags() (Tags, error)

type ExprNode

type ExprNode struct {
	NodeType
	Pos
	Text string
	Tree *Tree
}

func (*ExprNode) Check

func (s *ExprNode) Check(*Tree) error

func (*ExprNode) Return

func (s *ExprNode) Return() models.FuncType

func (*ExprNode) String

func (s *ExprNode) String() string

func (*ExprNode) StringAST

func (s *ExprNode) StringAST() string

func (*ExprNode) Tags

func (s *ExprNode) Tags() (Tags, error)

type Func

type Func struct {
	Args          []models.FuncType
	Return        models.FuncType
	Tags          func([]Node) (Tags, error)
	F             interface{}
	VArgs         bool
	VArgsPos      int
	VArgsOmit     bool
	MapFunc       bool // Func is only valid in map expressions
	PrefixEnabled bool
	PrefixKey     bool
	VariantReturn bool
	Check         func(*Tree, *FuncNode) error
}

type FuncNode

type FuncNode struct {
	NodeType
	Pos
	Name   string
	F      *Func
	Args   []Node
	Prefix string
}

FuncNode holds a function invocation.

func (*FuncNode) Check

func (f *FuncNode) Check(t *Tree) error

func (*FuncNode) Return

func (f *FuncNode) Return() models.FuncType

func (*FuncNode) String

func (f *FuncNode) String() string

func (*FuncNode) StringAST

func (f *FuncNode) StringAST() string

func (*FuncNode) Tags

func (f *FuncNode) Tags() (Tags, error)

type Node

type Node interface {
	Type() NodeType
	String() string
	StringAST() string
	Position() Pos     // byte position of start of node in full original input string
	Check(*Tree) error // performs type checking for itself and sub-nodes
	Return() models.FuncType
	Tags() (Tags, error)
	// contains filtered or unexported methods
}

A Node is an element in the parse tree. The interface is trivial. The interface contains an unexported method so that only types local to this package can satisfy it.

type NodeType

type NodeType int

NodeType identifies the type of a parse tree node.

const (
	NodeFunc   NodeType = iota // A function call.
	NodeBinary                 // Binary operator: math, logical, compare
	NodeUnary                  // Unary operator: !, -
	NodeString                 // A string constant.
	NodeNumber                 // A numerical constant.
	NodeExpr                   // A sub expression
	NodePrefix                 // A host prefix [""]
)

func (NodeType) Type

func (t NodeType) Type() NodeType

Type returns itself and provides an easy default implementation for embedding in a Node. Embedded in all non-trivial Nodes.

type NumberNode

type NumberNode struct {
	NodeType
	Pos
	IsUint  bool    // Number has an unsigned integral value.
	IsFloat bool    // Number has a floating-point value.
	Uint64  uint64  // The unsigned integer value.
	Float64 float64 // The floating-point value.
	Text    string  // The original textual representation from the input.
}

NumberNode holds a number: signed or unsigned integer or float. The value is parsed and stored under all the types that can represent the value. This simulates in a small amount of code the behavior of Go's ideal constants.

func (*NumberNode) Check

func (n *NumberNode) Check(*Tree) error

func (*NumberNode) Return

func (n *NumberNode) Return() models.FuncType

func (*NumberNode) String

func (n *NumberNode) String() string

func (*NumberNode) StringAST

func (n *NumberNode) StringAST() string

func (*NumberNode) Tags

func (n *NumberNode) Tags() (Tags, error)

type Pos

type Pos int

Pos represents a byte position in the original input text from which this template was parsed.

func (Pos) Position

func (p Pos) Position() Pos

type PrefixNode

type PrefixNode struct {
	NodeType
	Pos
	Arg  Node
	Text string
}

Prefix holds a string constant.

func (*PrefixNode) Check

func (p *PrefixNode) Check(t *Tree) error

func (*PrefixNode) Return

func (p *PrefixNode) Return() models.FuncType

func (*PrefixNode) String

func (p *PrefixNode) String() string

func (*PrefixNode) StringAST

func (p *PrefixNode) StringAST() string

func (*PrefixNode) Tags

func (p *PrefixNode) Tags() (Tags, error)

type StringNode

type StringNode struct {
	NodeType
	Pos
	Quoted string // The original text of the string, with quotes.
	Text   string // The string, after quote processing.
}

StringNode holds a string constant. The value has been "unquoted".

func (*StringNode) Check

func (s *StringNode) Check(*Tree) error

func (*StringNode) Return

func (s *StringNode) Return() models.FuncType

func (*StringNode) String

func (s *StringNode) String() string

func (*StringNode) StringAST

func (s *StringNode) StringAST() string

func (*StringNode) Tags

func (s *StringNode) Tags() (Tags, error)

type Tags

type Tags map[string]struct{}

func (Tags) Equal

func (t Tags) Equal(o Tags) bool

func (Tags) Intersection

func (t Tags) Intersection(o Tags) Tags

Intersection returns Tags common to both tagsets.

func (Tags) String

func (t Tags) String() string

func (Tags) Subset

func (t Tags) Subset(o Tags) bool

Subset returns true if o is a subset of t.

type Tree

type Tree struct {
	Text string // text parsed to create the expression.
	Root Node   // top-level root of the tree, returns a number.
	// contains filtered or unexported fields
}

Tree is the representation of a single parsed expression.

func New

func New(funcs ...map[string]Func) *Tree

New allocates a new parse tree with the given name.

func Parse

func Parse(text string, funcs ...map[string]Func) (t *Tree, err error)

Parse returns a Tree, created by parsing the expression described in the argument string. If an error is encountered, parsing stops and an empty Tree is returned with the error.

func ParseSub

func ParseSub(text string, funcs ...map[string]Func) (t *Tree, err error)

func (*Tree) A

func (t *Tree) A() Node

func (*Tree) C

func (t *Tree) C() Node

func (*Tree) E

func (t *Tree) E() Node

func (*Tree) F

func (t *Tree) F() Node

func (*Tree) Func

func (t *Tree) Func() (f *FuncNode)

func (*Tree) GetFunction

func (t *Tree) GetFunction(name string) (v Func, ok bool)

func (*Tree) M

func (t *Tree) M() Node

func (*Tree) O

func (t *Tree) O() Node

expr:

func (*Tree) P

func (t *Tree) P() Node

func (*Tree) Parse

func (t *Tree) Parse(text string, funcs ...map[string]Func) (err error)

Parse parses the expression definition string to construct a representation of the expression for execution.

func (*Tree) SetFunction

func (t *Tree) SetFunction(name string, F interface{}) error

func (*Tree) String

func (t *Tree) String() string

type UnaryNode

type UnaryNode struct {
	NodeType
	Pos
	Arg      Node
	Operator item
	OpStr    string
}

UnaryNode holds one argument and an operator.

func (*UnaryNode) Check

func (u *UnaryNode) Check(t *Tree) error

func (*UnaryNode) Return

func (u *UnaryNode) Return() models.FuncType

func (*UnaryNode) String

func (u *UnaryNode) String() string

func (*UnaryNode) StringAST

func (u *UnaryNode) StringAST() string

func (*UnaryNode) Tags

func (u *UnaryNode) Tags() (Tags, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL