github.com/informationsea/shellflow@v0.1.3/flowscript/flowscript.go (about) 1 package flowscript 2 3 func ParseScript(text string) (Evaluable, error) { 4 tokenizer := NewTokenizerFromText(text) 5 tokenizer.Scan() 6 return ParseAsExp(tokenizer) 7 } 8 9 func EvaluateScript(text string, env Environment) (Value, error) { 10 eval, err := ParseScript(text) 11 if err != nil { 12 return nil, err 13 } 14 return eval.Evaluate(env) 15 } 16 17 func SearchDependentVariables(evaluable Evaluable) StringSet { 18 variables := NewStringSet() 19 20 if ae, ok := evaluable.(*AssignExpression); ok { 21 evaluable = ae.exp 22 } 23 24 if ae, ok := evaluable.(*Variable); ok { 25 variables.Add(ae.Name) 26 } else { 27 for _, v := range evaluable.SubEvaluable() { 28 variables.AddAll(SearchDependentVariables(v)) 29 } 30 } 31 32 return variables 33 } 34 35 func SearchCreatedVariables(evaluable Evaluable) StringSet { 36 variables := NewStringSet() 37 38 if ae, ok := evaluable.(*AssignExpression); ok { 39 if ve, ok := ae.variable.(*Variable); ok { 40 variables.Add(ve.Name) 41 } 42 } else { 43 for _, v := range evaluable.SubEvaluable() { 44 variables.AddAll(SearchCreatedVariables(v)) 45 } 46 } 47 48 return variables 49 }