diff options
-rw-r--r-- | simulation.lisp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/simulation.lisp b/simulation.lisp index e10d721..2699dc9 100644 --- a/simulation.lisp +++ b/simulation.lisp @@ -22,6 +22,8 @@ (case (car op) (:push-int (push* (cadr op))) (:+ (push* (+ (pop*) (pop*)))) + (:- (let ((top (pop*))) + (push* (- (pop*) top)))) (:dump (format t "~a~%" (pop*))) (:= (push* (if (= (pop*) (pop*)) 1 0))) (:eş (let ((top (pop*))) @@ -36,6 +38,7 @@ (push* (if (< (pop*) top) 1 0)))) (:iken (when (= 0 (pop*)) (setf i (cadr op)))) + (:döngü nil) (:bel (push* 0)) (:oku (push* (aref *bel* (pop*)))) (:yaz (let ((top (pop*))) @@ -75,7 +78,9 @@ (top2 (pop*))) (push* top2) (push* top1) - (push* top2))))))) + (push* top2))) + (otherwise (format t "Unknown keyword: ~a~%" (car op)) + (finish)))))) (defun str->prog (str) (parse-tokens (lex-string str))) |