git.fiddlerwoaroof.com
Raw Blame History
(defpackage :lispostscript
  (:use :cl :alexandria :serapeum))
(in-package :lispostscript)

(defclass operator ()
  ())

(defclass environment ()
  ((&operators :initarg :operators :initform (make-hash-table))
   (&parent :initarg :parent :initform nil)))

(defgeneric op-stack-size (operator))

(defgeneric lookup-name (environment name)
  (:method-combination append))

(defmethod)

(defgeneric execute-op (op &rest args)
  )

(defun un-rpn (list environment)
  (loop with stack = (list)
     for token in list
     if (and (symbolp token)
	     (not (keywordp token)))
     do (let ((op (lookup-name environment token)))
	  (typecase op
	    (operator (let ((op-call (list)))
			(dotimes (n (op-stack-size op))
			  (push (pop stack) op-call))
			(push op stack)
			(push 'execute-op stack)))
	    (t (push op stack))))
     else do (push token stack)
     finally (return stack)))