TD Compilation numéro 1bis


L'objectif de ces exercices est d'appliquer les schémas d'évaluation et de compilation sur des objectifs simples.
  1. Analyse par cas et langages à balises
    La syntaxe parenthésée de LISP n'est qu'une des nombreuses syntaxes arbitraires possibles.
    L'objectif de cet exercice est de transformer  la syntaxe de LISP en une syntaxe alternative dans laquelle les cas syntaxiques de l'analyse par cas seraient explicités sous la forme de balises.
(:defun fact (n)
        (:if (:fun = (:var n) (:literal 0))
             (:literal 1)
          (:fun * (:var n) (:fun fact (:fun - (:var n) (:literal 1))))))

Définir la fonction lisp+tag qui transforme une expression évaluable LISP en une expression parenthésée avec balises comme dans cet exemple.
<defun> fact (n)
        <if> <fun> = <var> n </var> <literal> 0 </literal> </fun>
             <literal> 1 </literal>
          <fun> * <var> n </var> <fun> fact <fun> - <var> n </var> <literal> 1 </literal> </fun> </fun> </fun> </if> </defun>

Le lecteur voit immédiatement le gain en matière de lisibilité !
Ecrire la fonction lisp-to-html qui effectue cette transformation et retourne le code HTML.

NB. Comme LISP manipule bien les listes et mal les chevrons, on prendra les conventions suivantes :
Définir la fonction lisp-to-html.