14 | | Vous allez donc développer un ''parser'' pour le sous-ensemble de la grammaire du |
15 | | langage VHDL utilisé par la chaîne de CAO Allianced pour décrire la vue structurelle |
16 | | (format ".vst"). La structure de donnée construite en mémoire est la structure de données ''lofig'' |
17 | | présentée en cours. |
18 | | |
19 | | Nous ne vous donnons pas la grammaire du format ".vst" mais vous devrez |
20 | | la construire en analysant les fichiers d'exemples au format ".vst" qui sont disponibles dans le répertoire |
| 14 | Vous allez développer un analyseur lexical (scanner), puis un analyseur syntaxique (parser) |
| 15 | pour le sous-ensemble de la grammaire du langage VHDL utilisé par la chaîne de CAO Allianced |
| 16 | pour décrire la vue structurelle (format ".vst"). La structure de donnée construite en mémoire est |
| 17 | la structure de données ''lofig'' présentée en cours. |
| 18 | |
| 19 | Nous ne vous donnons pas la grammaire du format ''.vst'' mais vous devrez |
| 20 | la construire en analysant les fichiers d'exemples au format ''.vst'' qui sont disponibles dans le répertoire |
27 | | On fait l'hypothèse que tous les signaux sont de type bit, et il n'est donc pas demandÈ de traiter les vecteurs de bits. |
28 | | |
29 | | 1 : Ècriture du \emph{scanner}} |
30 | | |
31 | | On rappelle qu'on appelle \texttt{token} une suite de caractËres lus dans |
32 | | le fichier qu'on cherche ‡ analyser, et correspondant ‡ une |
33 | | expression rÈguliËre : mot-clef, identificateur, etc... |
34 | | Vous devez Ècrire le fichier \texttt{vst.l} dÈfinissant les expressions |
35 | | rÈguliËres correspondant au format .vst. |
36 | | |
37 | | On rappelle qu'en VHDL, les lettres majuscules et minuscules ne sont pas |
38 | | diffÈrenciÈes. |
39 | | Cherchez dans le manuel de \texttt{flex} une maniËre simple de |
40 | | produire un \emph{scanner} qui ne fasse pas la diffÈrence entre |
41 | | majuscules et minuscules. |
42 | | |
43 | | \begin{enumerate} |
44 | | \itemsep=-.5ex |
45 | | |
46 | | \item Ètablir la liste des mots clefs du format .vst, et en dÈduire les |
47 | | expressions rÈguliËres en langage \texttt{lex} permettant de |
48 | | les reconnaÓtre~; |
49 | | |
50 | | \item Ètablir la liste des opÈrateurs du langage et les rËgles |
51 | | permettant de les reconnaÓtre. |
52 | | On utilisera une classe pour les opÈrateurs |
53 | | possÈdant un seul caractËre~; |
54 | | |
55 | | \item un identificateur du VHDL commence par une lettre, suivie |
56 | | optionnellement d'autant de lettres, chiffres ou |
57 | | d'\emph{underscore}s que l'on veut, avec la contrainte que l'on |
58 | | ne doit pas avoir 2 \emph{underscore}s successifs. |
59 | | Etablir la rËgle de reconnaissance d'un identificateur~; |
60 | | |
61 | | \item un commentaire commence par \texttt{-\hspace{.2ex}-} et s'achËve en fin de |
62 | | ligne. Etablir la rËgle permettant d'absorber ces commentaires. |
63 | | |
64 | | \item Etablir la rËgle permettant d'absorber les caractËres d'espacement et les |
65 | | caractËres de tabulation. |
66 | | |
67 | | \end{enumerate} |
68 | | |
69 | | On donne ci-dessous une partie du fichier \texttt{vst.l} que vous devez Ècrire. |
70 | | Modifiez ce fichier en introduisant les rËgles que nous vous avons demandÈ d'Ètablir, et |
71 | | dÈfinissez les commandes d'affichage qui permettent d'afficher la chaÓne de |
72 | | caractËres correspondant ‡ chaque token reconnu. |
73 | | |
74 | | %\small |
75 | | %\scriptsize |
76 | | \begin{verbatim} |
| 26 | On fait l'hypothèse que tous les signaux sont de type bit, et il n'est donc pas demandé de traiter les vecteurs de bits. |
| 27 | |
| 28 | = Etape 1 : Ecriture de l'analyseur lexical = |
| 29 | |
| 30 | On appelle ''token'' une suite de caractères lus dans le fichier qu'on cherche à analyser, |
| 31 | et correspondant à une expression régulière : mot-clef, identificateur, etc... |
| 32 | Le but de cette première étape est d'écrire le fichier ''vst.l'' définissant les expressions |
| 33 | régulières du format ''.vst''. |
| 34 | |
| 35 | On rappelle qu'en VHDL, les lettres majuscules et minuscules ne sont pas différenciées. |
| 36 | Cherchez dans le manuel de '''flex''' une manière simple de générer un analyseur lexical |
| 37 | qui ne fasse pas la diffÈrence entre majuscules et minuscules. |
| 38 | 1. Etablir la liste des mots clefs du format ''.vst'', et en déduire les expressions régulières en langage '''flex''' permettant de les reconnaître. |
| 39 | 1. Etablir la liste des opérateurs du format ''.vst'', et écrire les règles en langage '''flex''' permettant de les reconnaître. On utilisera une classe pour les opérateurs possédant un seul caractère. |
| 40 | 1. Etablir la règle de reconnaissance d'un identificateur, sachant qu'un identificateur du VHDL commence toujours par une lettre, suivied'un nombre quelconque de lettres, chiffres ou ''underscore'', avec la contrainte que l'on ne doit pas avoir 2 ''underscore'' successifs. |
| 41 | 1. Etablir la règle permettant d'absorber les commentaires, sachant qu'un commentaire commence par "--" et s'achève en fin de ligne. |
| 42 | 1. Etablir la règle permettant d'absorber les caractères d'espace et les caractères de tabulation. |
| 43 | |
| 44 | On donne ci-dessous une partie du fichier ''vst.l'' que vous devez écrire. |
| 45 | {{{ |
114 | | \section*{Etape 2 : modification du \emph{scanner}} |
115 | | |
116 | | On cherche maintenant ‡ modifier le scanner pour qu'il affiche non plus |
117 | | la chaÓne de caractËres associÈe ‡ chaque token, mais un entier |
118 | | reprÈsentant le type du token reconnu. |
119 | | |
120 | | Pour cela~: |
121 | | |
122 | | \begin{enumerate} |
123 | | \itemsep=-.5ex |
124 | | |
125 | | \item DÈfinir dans le prologue du fichier vst.l un type ÈnumÈrÈ qui associe |
126 | | ‡ chaque token un entier dÈfinissant son type. On utilise en gÈnÈral des valeurs |
127 | | supÈrieures ‡ 255 pour les token correspondant ‡ une chaÓne de plusieurs caractËres, |
128 | | de faÁon ‡ pouvoir directement utiliser le code ascii du caractËre dans le cas |
129 | | d'un token constituÈ d'un seul caractËre. ~; |
130 | | |
131 | | \item Modifier les actions associÈes aux rËgles afin qu'elles retournent |
132 | | le type du \emph{token}~; |
| 78 | = Etape 2 : modification de l'analyseur lexical = |
| 79 | |
| 80 | On cherche maintenant à modifier l'analyseur lexical pour qu'il affiche non plus |
| 81 | la chaîne de caractères associée à chaque token, mais un entier représentant le type du token reconnu. |
| 82 | |
| 83 | Pour cela: |
| 84 | |
| 85 | * Définir dans le prologue du fichier ''vst.l'' un type énuméré qui associe à chaque token un entier définissant son type. On utilise en général des valeurs supérieures à 255 pour les token correspondant à une chaîne de plusieurs caractères, de façon à pouvoir directement utiliser le code ascii du caractère dans le cas d'un token constitué d'un seul caractère. |
| 86 | * Modifier les actions associées aux règles afin qu'elles retournent le type du token. |