;; meta: (module meta mzscheme (require "ns.ss" "ns-base-stx.ss" "composite.ss" "base.ss" "rpn-eval.ss") (provide (all-defined)) ;; --- partial evaluator / meta code --- ;; the assembler can contain delayed (partial) evaluations in symbolic ;; form. the canonical example of this is of course symbolic machine ;; constants, but the compiler is allowed to generate CAT expressions ;; as argument values for opcodes. these expressions should evaluate ;; to a number. ;; Meta language dictionary ;; (ns-new '(meta)) (define-syntax meta-words (syntax-rules () ((_ word ...) (compositions (meta) base: ;; snarf from (base) (word word) ...)))) (meta-words + - 2/ << >> <<< >>> and or xor * / pow) ;; Default meta language compiler and evaluator (ns-base-stx (meta:) ((meta))) (define (meta-eval exp) (apply values ;; so multiple values give an error ((rpn-compile exp 'meta:)))) (rpn-modules "meta.ss") )