ast

package
v0.5.1 Latest Latest
Warning

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

Go to latest
Published: May 14, 2021 License: MIT Imports: 5 Imported by: 2

Documentation

Index

Constants

View Source
const (
	SigExternalExit = iota + 1
	SigOutOfMemory
)
View Source
const GoStackframeEstimate = 8 * 1024
View Source
const LeafPrecedence int = 100

Variables

This section is empty.

Functions

func BoolOf added in v0.5.0

func BoolOf(v Val) bool

func CheckSize added in v0.5.0

func CheckSize(m map[Var]Val) (total int64)

func FreeVars added in v0.5.0

func FreeVars(e Expr) map[string]struct{}

func FuncParamsPrepend added in v0.2.0

func FuncParamsPrepend(p, ps Attrib) ([]string, error)

func HasSideEffects added in v0.5.0

func HasSideEffects(e Expr) bool

func UsedVars added in v0.5.0

func UsedVars(b Block) map[string]struct{}

Types

type Arg

type Arg int

func (Arg) Eval

func (a Arg) Eval(c *Context) Val

func (Arg) Precedence added in v0.5.1

func (a Arg) Precedence() int

func (Arg) String

func (a Arg) String() string

type Assn

type Assn struct {
	V Var
	E Expr
}

func (Assn) Eval

func (a Assn) Eval(c *Context) Val

func (Assn) Precedence added in v0.5.1

func (a Assn) Precedence() int

func (Assn) String

func (a Assn) String() string

type Attrib

type Attrib interface{}

type BinOp added in v0.5.1

type BinOp struct {
	Lhs Expr
	Rhs Expr
	Op  Op
}

func (BinOp) Eval added in v0.5.1

func (b BinOp) Eval(c *Context) Val

func (BinOp) Precedence added in v0.5.1

func (b BinOp) Precedence() int

func (BinOp) String added in v0.5.1

func (b BinOp) String() string

type Block added in v0.2.0

type Block []Expr

func (Block) Eval added in v0.2.0

func (b Block) Eval(c *Context) Val

func (Block) Precedence added in v0.5.1

func (b Block) Precedence() int

func (Block) String added in v0.2.0

func (b Block) String() string

type Call

type Call struct {
	Fn   Expr
	Args CallArgs
}

func (Call) Eval

func (ca Call) Eval(c *Context) Val

func (Call) Precedence added in v0.5.1

func (ca Call) Precedence() int

func (Call) String

func (ca Call) String() string

type CallArgs added in v0.2.0

type CallArgs []Expr

CallArgs is not an Expr, since it can never appear on its own

func CallArgsPrepend added in v0.2.0

func CallArgsPrepend(e, a Attrib) (CallArgs, error)

func NewCallArgs added in v0.2.0

func NewCallArgs() (CallArgs, error)

type Context

type Context struct {
	Args            []string
	VariableMap     map[Var]Val
	FunctionMap     map[string]func([]string) string
	UserFunctionMap map[string]FuncDecl
	MaxStackSize    int64
	// contains filtered or unexported fields
}

func NewContext

func NewContext(args []string, funcs map[string]func([]string) string, parseFn func([]byte) (Expr, error)) *Context

func (*Context) FuncNames added in v0.5.1

func (c *Context) FuncNames() Set

func (*Context) GetExitChannel added in v0.3.0

func (c *Context) GetExitChannel() chan int

func (*Context) SetMaxStackSize added in v0.3.2

func (c *Context) SetMaxStackSize(sz int64)

type Expr

type Expr interface {
	Eval(*Context) Val
	String() string
	Precedence() int
}

func BlockPrepend added in v0.2.0

func BlockPrepend(e, b Attrib) (Expr, error)

func NewAnd

func NewAnd(a, b Attrib) (Expr, error)

func NewArg

func NewArg(i Attrib) (Expr, error)

func NewAssn

func NewAssn(v, e Attrib) (Expr, error)

func NewBlock added in v0.2.0

func NewBlock() (Expr, error)

func NewCall

func NewCall(f, as Attrib) (Expr, error)

func NewConcat

func NewConcat(a, b Attrib) (Expr, error)

func NewEquals

func NewEquals(a, b Attrib) (Expr, error)

func NewIfElse

func NewIfElse(c, t, e Attrib) (Expr, error)

func NewIndex

func NewIndex(s, i Attrib) (Expr, error)

func NewIndexInt

func NewIndexInt(s, i Attrib) (Expr, error)

func NewLambda added in v0.5.0

func NewLambda(ps, b Attrib) (Expr, error)

func NewNotEquals

func NewNotEquals(a, b Attrib) (Expr, error)

func NewOr

func NewOr(a, b Attrib) (Expr, error)

func NewProgram added in v0.2.0

func NewProgram(f, b Attrib) (Expr, error)

func NewVal

func NewVal(a Attrib) (Expr, error)

func NewVar

func NewVar(a Attrib) (Expr, error)

func NewWhile

func NewWhile(c, b Attrib) (Expr, error)

type FuncDecl added in v0.2.0

type FuncDecl struct {
	Params     []string
	Code       Block
	Identifier string
}

FuncDecl is not an Expr, since it can never appear on its own

func FuncDeclsAppend added in v0.2.0

func FuncDeclsAppend(f, fs Attrib) ([]FuncDecl, error)

func NewFuncDecl added in v0.2.0

func NewFuncDecl(i, p, b Attrib) (FuncDecl, error)

func (FuncDecl) Call added in v0.2.0

func (f FuncDecl) Call(c *Context, args []Val) Val

func (FuncDecl) String added in v0.2.0

func (f FuncDecl) String() string

type IfElse

type IfElse struct {
	Cond Expr
	Then Expr
	Else Expr
}

func (IfElse) Eval

func (e IfElse) Eval(c *Context) Val

func (IfElse) Precedence added in v0.5.1

func (e IfElse) Precedence() int

func (IfElse) String

func (e IfElse) String() string

type Index

type Index struct {
	Source Expr
	I      Expr
}

func (Index) Eval

func (i Index) Eval(c *Context) Val

func (Index) Precedence added in v0.5.1

func (i Index) Precedence() int

func (Index) String

func (i Index) String() string

type Lambda added in v0.5.0

type Lambda struct {
	Params []string
	Code   Block
}

func (Lambda) Call added in v0.5.0

func (l Lambda) Call(c *Context, args []Val) Val

func (Lambda) Eval added in v0.5.0

func (l Lambda) Eval(c *Context) Val

func (Lambda) Precedence added in v0.5.1

func (l Lambda) Precedence() int

func (Lambda) String added in v0.5.0

func (l Lambda) String() string

type Op added in v0.5.1

type Op int
const (
	OrOp Op = (iota + 1) * 10
	AndOp
	NotEqualsOp
	EqualsOp
	ConcatOp
)

Op are operators used for BinOp, encoded as their precedence

func (Op) String added in v0.5.1

func (o Op) String() string

type Program added in v0.2.0

type Program struct {
	Funcs []FuncDecl
	Code  Block
}

func EmptyProgram added in v0.4.0

func EmptyProgram() Program

Useful for building ASTs manually

func (Program) Eval added in v0.2.0

func (p Program) Eval(c *Context) Val

func (Program) Precedence added in v0.5.1

func (p Program) Precedence() int

func (Program) String added in v0.2.0

func (p Program) String() string

type Set added in v0.5.1

type Set map[string]struct{}

func DefinedVars added in v0.5.1

func DefinedVars(e Expr) Set

func EmptySet added in v0.5.1

func EmptySet() Set

func SetFrom added in v0.5.1

func SetFrom(els ...string) Set

func UsedBeforeDefVars added in v0.5.1

func UsedBeforeDefVars(e Expr, funcNames Set) Set

func (Set) Add added in v0.5.1

func (s Set) Add(els ...string)

func (Set) Contains added in v0.5.1

func (s Set) Contains(v string) bool

func (Set) Copy added in v0.5.1

func (s Set) Copy() Set

func (Set) Equals added in v0.5.1

func (s Set) Equals(s2 Set) bool

func (Set) Except added in v0.5.1

func (s Set) Except(s2 Set) Set

func (Set) ExceptCopy added in v0.5.1

func (s Set) ExceptCopy(s2 Set) Set

func (Set) Intersect added in v0.5.1

func (s Set) Intersect(s2 Set) Set

func (Set) IntersectCopy added in v0.5.1

func (s Set) IntersectCopy(s2 Set) Set

func (Set) String added in v0.5.1

func (s Set) String() string

func (Set) Union added in v0.5.1

func (s Set) Union(s2 Set) Set

func (Set) UnionCopy added in v0.5.1

func (s Set) UnionCopy(s2 Set) Set

type Val

type Val string

func (Val) Eval

func (v Val) Eval(c *Context) Val

func (Val) Precedence added in v0.5.1

func (v Val) Precedence() int

func (Val) String

func (v Val) String() string

type Var

type Var string

func (Var) Eval

func (v Var) Eval(c *Context) Val

TODO: Make Vars and FuncDecls/Calls be linked: if you call a Var that isn't a function, interpret it as one Multiple possibilities: allow reusing same context, maybe instead of fun(a, b, c) args you just use $0, $1, $3 etc

func (Var) Precedence added in v0.5.1

func (v Var) Precedence() int

func (Var) String

func (v Var) String() string

type While

type While struct {
	Cond Expr
	Body Expr
}

func (While) Eval

func (e While) Eval(c *Context) Val

func (While) Precedence added in v0.5.1

func (e While) Precedence() int

func (While) String

func (e While) String() string

Jump to

Keyboard shortcuts

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