示例#1
0
文件: main.go 项目: zchtodd/game
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"))
			}
		}
	}
}