La gestion des LET est en place. Mais pour le traitement c'est pas encore ca :D
This commit is contained in:
parent
b14701f20a
commit
5652d4deba
|
@ -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 l’interpréteur"
|
par le compilateur et par l’interpréteur"
|
||||||
|
@ -44,6 +45,9 @@ par le compilateur et par l’interpré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 l’interpré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)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user