La gestion des LET est en place. Mais pour le traitement c'est pas encore ca :D

This commit is contained in:
Bertrand BRUN 2010-10-31 23:25:58 +01:00
parent b14701f20a
commit 5652d4deba

View File

@ -1,4 +1,5 @@
(load "environnement")
(defun lisp2li (expr env)
"Convertit le code LISP en un code intermédiaire reconnu
par le compilateur et par linterpréteur"
@ -44,6 +45,9 @@ par le compilateur et par linterpréteur"
(cons :call (cons 'set-binding (list `(:lit . ,env)
(cons :lit (second expr))
(cons :lit (third expr))))))
((eq 'let (car expr))
(push-new-env env "LET")
(map-lisp2li-let expr env))
((macro-function (car expr))
(lisp2li (macroexpand-1 expr) env)) ; macros
((not (special-operator-p (car expr))) ; fonctions normales.
@ -55,6 +59,9 @@ par le compilateur et par linterpréteur"
(defun map-lisp2li (expr env)
(mapcar (lambda (x) (lisp2li x env)) expr))
(defun map-lisp2li-let (expr env)
(mapcar (lambda (x) (add-binding env (car x) (lisp2li (cadr x) env))) (cadr expr)))
(defun make-stat-env (env params)
(mapcar (lambda (x) (add-binding env x nil)) params)
env)