başlangıç, push pop + - . vb.

This commit is contained in:
2024-07-18 13:50:14 +03:00
commit a0fb419b1b
8 changed files with 327 additions and 0 deletions

47
util.lisp Normal file
View File

@@ -0,0 +1,47 @@
(in-package :cl-forth)
(eval-when (:compile-toplevel :load-toplevel :execute)
(defmacro eval-always (&body body)
`(eval-when (:compile-toplevel :load-toplevel :execute)
,@body)))
(eval-always
(defmacro with-gensyms (syms &body body)
`(let ,(mapcar (lambda (sym) `(,sym (gensym ,(string sym)))) syms)
,@body)))
(defmacro init-hash (&body body)
(with-gensyms (table)
`(let ((,table (make-hash-table)))
,@(iter (for (k v) in body)
(collect `(setf (gethash ',k ,table) ,v)))
,table)))
(defun mklist (form)
(if (listp form) form (list form)))
;; (defmacro run (args)
;; (let ((sym (gensym)))
;; `(let ((,sym ,args))
;; (format t "~{~a~^ ~}~%" ,sym)
;; (uiop:run-program ,sym))))
(defun run (args)
(format t "~{~a~^ ~}~%" args)
(uiop:run-program args :output *standard-output*))
;; ,(file-namestring
;; (make-pathname :name (pathname-name path)
;; :type "o"))
(defparameter *test-program*
'((push 34)
(push 35)
(plus)
(dump)
(push 500)
(push 80)
(minus)
(dump)))