first minimally working version of forge interpreter
This commit is contained in:
parent
21843546fa
commit
b573e49d2c
2 changed files with 12 additions and 16 deletions
|
@ -4,36 +4,33 @@
|
||||||
|
|
||||||
(defpackage :scopes/forge
|
(defpackage :scopes/forge
|
||||||
(:use :common-lisp)
|
(:use :common-lisp)
|
||||||
(:export #:hello #:new-forge-env #:data-stack #:exec
|
(:export #:new-forge-env #:data-stack #:exec
|
||||||
#:add))
|
#:add))
|
||||||
|
|
||||||
(in-package :scopes/forge)
|
(in-package :scopes/forge)
|
||||||
|
|
||||||
(defun new-forge-env ()
|
(defun new-forge-env ()
|
||||||
nil)
|
(vector nil))
|
||||||
|
|
||||||
(defun exec (fe &rest code)
|
(defun exec (fe code)
|
||||||
code
|
(dolist (x code)
|
||||||
fe)
|
(if (numberp x)
|
||||||
|
(pushd fe x)
|
||||||
|
(funcall x fe))))
|
||||||
|
|
||||||
(defun data-stack (fe)
|
(defun data-stack (fe)
|
||||||
fe)
|
(elt fe 0))
|
||||||
|
|
||||||
; forge primitives
|
; forge primitives
|
||||||
|
|
||||||
(defun add (fe)
|
(defun add (fe)
|
||||||
(pushd (+ (popd fe) (popd fe)) fe ))
|
(pushd fe (+ (popd fe) (popd fe))))
|
||||||
|
|
||||||
; dummy exampled, to be removed
|
|
||||||
|
|
||||||
(defun hello ()
|
|
||||||
(format t "Hello Common Lisp - 2024-04-19"))
|
|
||||||
|
|
||||||
; internal definitions
|
; internal definitions
|
||||||
|
|
||||||
(defun popd (fe)
|
(defun popd (fe)
|
||||||
(pop fe))
|
(pop (elt fe 0)))
|
||||||
|
|
||||||
(defun pushd (fe v)
|
(defun pushd (fe v)
|
||||||
(push v fe))
|
(push v (elt fe 0)))
|
||||||
|
|
||||||
|
|
|
@ -11,11 +11,10 @@
|
||||||
(in-package :scopes/test-forge)
|
(in-package :scopes/test-forge)
|
||||||
|
|
||||||
(defun run ()
|
(defun run ()
|
||||||
(scf:hello)
|
|
||||||
(let ((fe (scf:new-forge-env))
|
(let ((fe (scf:new-forge-env))
|
||||||
(tst (sct:test-suite)))
|
(tst (sct:test-suite)))
|
||||||
(scf:exec fe '(4 2 scf:add))
|
(scf:exec fe '(4 2 scf:add))
|
||||||
(sct:assert-eql tst (car (scf:data-stack fe)) 6)
|
(sct:assert-eql tst (car (scf:data-stack fe)) 6)
|
||||||
(format t "~%tst ~a" tst)
|
;;(format t "~%fe ~a" fe)
|
||||||
(sct:result tst)
|
(sct:result tst)
|
||||||
))
|
))
|
||||||
|
|
Loading…
Add table
Reference in a new issue