From: <lu...@us...> - 2003-04-14 14:03:38
|
Update of /cvsroot/jungerl/jungerl/lib/claw/src In directory sc8-pr-cvs1:/tmp/cvs-serv7526/lib/claw/src Added Files: core-compiler.lisp Log Message: Code generation. Defines functions for one-to-one translation of Core Erlang syntactic constructs into Common Lisp. The functions are called as parsing actions from `core-parse.lisp' to generate code directly in the parser, so that the "parse tree" is actually a real common lisp program. Not complete. --- NEW FILE: core-compiler.lisp --- (defpackage :a (:nicknames :atom)) (defpackage :core-compiler (:use :common-lisp) (:export :module :exports :attributes :value-list :tuple :am :integer :var :a-string :function-name :fdef :fun)) (in-package :core-compiler) ;; Code generators (defun module (name exports attributes defs) `(progn (defpackage ,name (:export ,@(loop for symbol in exports collect (symbol-name symbol)))) (in-package ,name) (defvar ,(intern "*attributes*" (find-package name)) ',attributes) ,@defs)) (defun exports (fnames) fnames) (defun attributes (attrs) attrs) (defun value-list (values) `(VALUES ,@values)) (defun tuple (elems) `(TUPLE ,@elems)) (defun am (name) (intern name :a)) `(ATOM ,name)) (defun integer (i) i) (defun var (v) (intern v)) (defun a-string (s) `(STRING ,s)) (defun function-name (name arity) (intern (format nil "~a/~a" name arity))) (defun fdef (name fun) ;; We pull apart the FUN's lambda expression to create a DEFUN (destructuring-bind (lambda args expr) fun `(defun ,name ,args ,expr))) (defun fun (args body) `(lambda ,args ,body)) |