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