TP1 de compilation - analyse lexicale

M. Couprie



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 #define NVOISINS 8 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 */

Et voici le résultat désiré :


#include <fifo.h> #define NVOISINS 8 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 */


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

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; 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 Michel Couprie.