first minimally working version of forge interpreter

This commit is contained in:
Helmut Merz 2024-04-20 11:36:04 +02:00
parent 21843546fa
commit b573e49d2c
2 changed files with 12 additions and 16 deletions

View file

@ -4,36 +4,33 @@
(defpackage :scopes/forge
(:use :common-lisp)
(:export #:hello #:new-forge-env #:data-stack #:exec
(:export #:new-forge-env #:data-stack #:exec
#:add))
(in-package :scopes/forge)
(defun new-forge-env ()
nil)
(vector nil))
(defun exec (fe &rest code)
code
fe)
(defun exec (fe code)
(dolist (x code)
(if (numberp x)
(pushd fe x)
(funcall x fe))))
(defun data-stack (fe)
fe)
(elt fe 0))
; forge primitives
(defun add (fe)
(pushd (+ (popd fe) (popd fe)) fe ))
; dummy exampled, to be removed
(defun hello ()
(format t "Hello Common Lisp - 2024-04-19"))
(pushd fe (+ (popd fe) (popd fe))))
; internal definitions
(defun popd (fe)
(pop fe))
(pop (elt fe 0)))
(defun pushd (fe v)
(push v fe))
(push v (elt fe 0)))

View file

@ -11,11 +11,10 @@
(in-package :scopes/test-forge)
(defun run ()
(scf:hello)
(let ((fe (scf:new-forge-env))
(tst (sct:test-suite)))
(scf:exec fe '(4 2 scf:add))
(sct:assert-eql tst (car (scf:data-stack fe)) 6)
(format t "~%tst ~a" tst)
;;(format t "~%fe ~a" fe)
(sct:result tst)
))