diff --git a/resources/move2.ks b/resources/move2.ks new file mode 100644 index 0000000..6ad2193 --- /dev/null +++ b/resources/move2.ks @@ -0,0 +1,6 @@ +move "right" +move "test" +move "left" +move "up" +move "down" +move "back" diff --git a/resources/turn.ks b/resources/turn.ks new file mode 100644 index 0000000..a31750f --- /dev/null +++ b/resources/turn.ks @@ -0,0 +1,6 @@ +turn "left" +turn "right" +turn "forward" +turn "left" +turn "left" +turn "right" \ No newline at end of file diff --git a/src/keystone/core.clj b/src/keystone/core.clj index 7a74900..c27009c 100644 --- a/src/keystone/core.clj +++ b/src/keystone/core.clj @@ -11,9 +11,10 @@ block ::= {stat} ::= ( define | op | loop | functioncall | label | if | for name '=' exp ',' exp [',' exp] do block end | for namelist in explist do block end | function funcname funcbody | local function name funcbody | local namelist ['=' explist] ) <'\n'*> ::= #\"\\s*\" - op ::= ( print | move ) exp + op ::= ( print | move | turn ) exp print ::= 'print' move ::= 'move' + turn ::= 'turn' define ::= name '=' exp loop ::= 'loop' exp <'\n'*> block <'\n'*> if ::= 'if' exp <'\n'*> block <'\n'*> @@ -169,7 +170,7 @@ (for [_ (range condition)] (-eval args env)) (-eval rest env)) - (if (contains? #{:print :move} op) + (if (contains? #{:print :move :turn} op) (concat [{:op op :args (-eval-exps args @env)}] (-eval rest env)) (concat [code] (-eval rest env))))))) diff --git a/test/keystone/eval_test.clj b/test/keystone/eval_test.clj index e9dbf40..bec226d 100644 --- a/test/keystone/eval_test.clj +++ b/test/keystone/eval_test.clj @@ -5,9 +5,17 @@ (testing "hello" (is (= (run (slurp "./resources/hello.ks")) [{:op :print :args '("hello")}]))) +(testing "move2" + (is (= (run (slurp "./resources/move2.ks")) + [{:op :move :args '("right")} {:op :move :args '("test")} {:op :move :args '("left")} {:op :move :args '("up")} {:op :move :args '("down")} {:op :move :args '("back")}]))) + (testing "move" (is (= (run (slurp "./resources/move.ks")) - [{:op :move :args '("right")} {:op :move :args '("right")} {:op :move :args '("left")} {:op :move :args '("up")} {:op :move :args '("down")}]))) + [{:op :move :args '("right")} {:op :move :args '("right")} {:op :move :args '("left")} {:op :move :args '("up")} {:op :move :args '("down")}]))) + +(testing "turn" + (is (= (run (slurp "./resources/turn.ks")) + [{:op :turn :args '("left")} {:op :turn :args '("right")} {:op :turn :args '("forward")} {:op :turn :args '("left")} {:op :turn :args '("left")} {:op :turn :args '("right")}]))) (testing "variable" (is (= (run (slurp "./resources/variable.ks"))