TP1 de compilation - analyse lexicale



On veut présenter proprement, sur le Web, des extraits de code C ou C++. Pour cela, il faut produire à partir du source C/C++ un fichier HTML respectant le formatage initial (retours ligne, indentation) et mettant en relief mots-clés, instructions du pré-processeur, chaînes de caractères et commentaires.

Voici un exemple de programme source :


#include <fifo.h> #define NVOISINS 8 /* Commentaire */ /* Ceci est un commentaire curieux*/ for (x = 0; x < N; x++) { if (M[x] != 0) /* le pixel appartient a un maximum */ { for (k = 0; k < NVOISINS; k += 1) /* parcourt les voisins */ { /* si un voisin n'est pas dans la FIFO */ y = voisin(x, k, rs, N); /* et pas maximum, on le met en FIFO */ if ((y != -1) && (! IsSet(y, EN_FIFO)) && (M[y] == 0)) { FifoPush(FIFO, y); Set(y, EN_FIFO); if (trace) printf("empile point %d (%d,%d)\n", y, y%rs, y/rs); } /* if y ... */ } /* for k */ } /* if M */ } /* for x */ /* curieuse maniere */ x = 0; /* de commenter */

Et voici le résultat désiré :


#include <fifo.h> #define NVOISINS 8 /* Commentaire */ /* Ceci est un commentaire curieux*/ for (x = 0; x < N; x++) { if (M[x] != 0) /* le pixel appartient a un maximum */ { for (k = 0; k < NVOISINS; k += 1) /* parcourt les voisins */ { /* si un voisin n'est pas dans la FIFO */ y = voisin(x, k, rs, N); /* et pas maximum, on le met en FIFO */ if ((y != -1) && (! IsSet(y, EN_FIFO)) && (M[y] == 0)) { FifoPush(FIFO, y); Set(y, EN_FIFO); if (trace) printf("empile point %d (%d,%d)\n", y, y%rs, y/rs); } /* if y ... */ } /* for k */ } /* if M */ } /* for x */ /* curieuse maniere */ x = 0; /* de commenter */


On remarquera que les caractères "if" dans "FifoPush" ne doivent pas constituer un mot-clé.

On remarquera aussi les curieux commentaires.

Voici quelques tags HTML pouvant servir :


debut, fin document : <html>...</html> respecte le formatage initial : <pre>...</pre> fonte courrier : <tt>...</tt> gras : <b>...</b> italique : <i>...</i> > : &gt; < : &lt; & : &amp; " : &quot; couleurs : <font color="Green">...</font>

Et la liste des mots-clés de C++ :


asm auto break catch case char class const continue default delete do double else enum extern float for friend goto if inline int long new operator overload private protected public register return short signed sizeof static struct switch this template typedef union unsigned virtual void volatile while

Pour une présentation complète de HTML, suivez ce lien.

La documentation de FLEX est aussi ``on-line''.


Dernière mise à jour :  par L. Najman.