cl-scopes/forge/forge.lisp

37 lines
747 B
Common Lisp

;;; cl-scopes/forge - may the forge be with you!
;;;; A Forth-like interpreter implemented in Common Lisp.
(defpackage :scopes/forge
(:use :common-lisp)
(:export #:new-forge-env #:data-stack #:exec))
(in-package :scopes/forge)
(defclass forge-env ()
((data-stack :initform 0
:reader data-stack
:accessor data-stack!)))
(defun new-forge-env ()
(make-instance 'forge-env))
(defmethod exec ((fe forge-env) code)
(dolist (x code)
(if (symbolp x)
(funcall (find-symbol (symbol-name x) :scopes/forge) fe)
(pushd fe x))))
; forge primitives
(defun add (fe)
(pushd fe (+ (popd fe) (popd fe))))
; internal definitions
(defun popd (fe)
(pop (data-stack! fe)))
(defun pushd (fe v)
(push v (data-stack! fe)))