func main() { lexer := lex.Lexer{} parser := parse.Parser{} interpreter := interpret.New() interpreter.Logdebug = true for _, m := range lang.Matchers { lexer.AddMatcher(m) } interpreter.AddFunction("len", funcs.Functions["len"]) interpreter.AddFunction("print", funcs.Functions["print"]) interpreter.AddFunction("random", funcs.Functions["random"]) interpreter.AddFunction("append", funcs.Functions["append"]) interpreter.AddFunction("vector", funcs.Functions["vector"]) interpreter.AddFunction("fire", funcs.Functions["fire"]) prog1 := `i = 0; while (i < len(self.weapons)) { append(self.projectiles, fire(self.weapons[i])); i = i + 1; };` tokens, err := lexer.Lex(prog1) if err != nil { fmt.Println(err) } else { parser.Logdebug = true root, err := parser.Parse(tokens) if err != nil { fmt.Println(err) } else { parse.Tree(root) weapon := &types.WeaponSystem{Ammo: 10, RechargeTimeTotal: 5, RechargeTime: 0, Ready: false} weapon_wrapper := interpret.Convert(weapon) interpreter.SetArray("self.projectiles", []interpret.Object{}) interpreter.SetArray("self.weapons", []interpret.Object{weapon_wrapper}) interpreter.SetFloat64("total_elapsed", 36.0101130) interpreter.SetFloat64("elapsed", 33) err = interpreter.Block(root) fmt.Println(err) if err != nil { fmt.Println(err) } else { arr, _ := interpreter.GetArray("self.projectiles") fmt.Println(arr[0]) //fmt.Println(interpreter.GetFloat64("x")) //fmt.Println(interpreter.GetFloat64("y")) //fmt.Println(interpreter.GetFloat64("z")) } } } }