90 | | \end{verbatim} |
91 | | \normalsize |
92 | | |
93 | | \item Modifier le \texttt{main} pour qu'il affiche le type des tokens reconnus. |
94 | | Nous rappellons que \texttt{yylex} retourne 0 lorsque la fin de fichier est lue~; |
95 | | |
96 | | \end{enumerate} |
97 | | |
98 | | \section*{Etape 3 : dÈbut de l'Ècriture du \emph{parser}} |
99 | | |
100 | | Il faut maintenant dÈfinir dans le fichier \texttt{vst.y} les rËgles de la grammaire |
101 | | correspondant au format .vst. Ces rËgles s'appuient sur les token reconnus par flex. |
102 | | Dans ce TME, il ne sera pas question d'analyse sÈmantique ni mÍme |
103 | | d'actions ‡ effectuer lorsqu'une rËgle est activÈe. |
104 | | On se bornera donc ‡ effectuer l'analyse de syntaxe en s'assurant que les structures |
105 | | grammaticales dÈfinies permettent effectivement d'analyser le fichier exemple.vst. |
106 | | |
107 | | Cette Ètape vise ‡ analyser le fichier \texttt{signal.ex}, qui ne constitue qu'une |
108 | | partie du fichier \texttt{exemple.vst}. On cherche principalement ‡ traiter |
109 | | le problËme des rËgles permettant de reconnaÓtre un nombre variable d'arguments |
| 91 | }}} |
| 92 | * Modifier la fonction main() pour qu'elle affiche le type des tokens reconnus. On rappelle que ''yylex'' retourne 0 lorsque la fin de fichier est lue. |
| 93 | |
| 94 | = Etape 3 : Ecriture d'un premier analyseur syntaxique = |
| 95 | |
| 96 | Il faut maintenant définir dans le fichier ''vst.y'' les règles de la grammaire |
| 97 | correspondant au format ''.vst''. Ce fichier "vst.y'' est utilisé par '''bison''' pour |
| 98 | générer la fonction .c constituant l'analyseur lexical. |
| 99 | Ces règles de grammaire sont des combinaisons de token reconnus par flex. |
| 100 | Dans ce TME, il ne sera pas question d'analyse sémantique ni même |
| 101 | d'actions à effectuer lorsqu'une règle est activée. |
| 102 | On se borne donc à effectuer l'analyse de syntaxe en s'assurant que les structures |
| 103 | grammaticales dÈfinies permettent effectivement d'analyser le fichier ''exemple.vst''. |
| 104 | |
| 105 | Cette étape vise à analyser le fichier ''signal.ex'', qui ne constitue qu'une |
| 106 | partie du fichier ''exemple.vst''. On cherche principalement à traiter |
| 107 | le problème général des règles permettant de reconnaître un nombre variable d'arguments |
112 | | \begin{enumerate} |
113 | | \itemsep=-.5ex |
114 | | |
115 | | \item dÈfinir les rËgles de grammaire correspondant ‡ la dÈclaration des signaux VHDL |
116 | | en analysant le contenu du fichier \texttt{signal.ex} qui vous est fourni, |
117 | | et implanter ces rËgles dans le fichier vst.y.~; |
118 | | |
119 | | \item Dans le fichier vst.y, complÈter la dÈclaration des diffÈrents |
120 | | token utilisÈs par le parser. |
121 | | On dÈclarera tous les token susceptibles d'Ítre reconnus par |
122 | | le scanner.~; |
123 | | |
124 | | \item Comme nous n'allons pas effectuer d'actions pour ces |
125 | | rËgles, nous utiliserons le mode \emph{debug} de bison |
126 | | pour vÈrifier que l'analyse se passe bien. |
127 | | Pour activer ce mode, il faut utiliser l'option \texttt{-t} de |
128 | | bison et positionner la variable \texttt{yydebug} ‡ une |
129 | | valeur autre que zÈro dans la fonction main()~; |
130 | | \item Il faut par ailleurs que \texttt{bison} fournisse la liste des |
131 | | \emph{tokens} ‡ \texttt{flex}. Pour cela, il faut utiliser l'option |
132 | | \texttt{-d}, pour demander ‡ bison de gÈnËrer un fichier \texttt{vst.tab.h} |
133 | | contenant ces dÈfinitions. |
134 | | Il faut donc modifier le fichier vst.l pour qure le fichier |
135 | | \texttt{vst.tab.h} soit inclus dans le fichier vst.l et supprimer les dÈfinitions |
136 | | de token existant par ailleurs dans vst.l. |
137 | | \item il faut Ègalement modifier la fonction \texttt{main}, qui est maintenant dÈfinie |
138 | | dans le fichier vst.y, et doit appeller la fonction \texttt{yyparse()}. |
139 | | \end{enumerate} |
140 | | |
141 | | Voici une Èbauche du fichier \texttt{vst.y} que vous devez modifier et complÈter: |
142 | | |
143 | | %\scriptsize |
144 | | \begin{verbatim} |
| 110 | 1. Définir les règles de grammaire correspondant a la déclaration des signaux en analysant le contenu du fichier ''signal.ex'' qui vous est fourni, et implanter ces règles dans le fichier ''vst.y''. |
| 111 | 1. Dans le fichier ''vst.y'', compléter la déclaration des différents token utilisés par le parser susceptibles d'être reconnus par |
| 112 | le scanner. |
| 113 | 1. Comme aucune action n'a été associée à chacune des règles de grammaire, vous utiliserez le mode debug de '''bison''' pour vérifier que l'analyse se passe bien. Pour activer ce mode, il faut utiliser l'option -t sur la ligne de commande de '''bison''' et affecter une valeur non-nulle à la variable globale yydebug dans la fonction main(). |
| 114 | 1. Il faut par ailleurs que '''bison''' fournisse à '''flex''' la liste des tokens qu'il utilise. Pour cela, il faut utiliser l'option -d dans la ligne de commande de '''bison''', pour lui demander de générer un fichier ''vst.tab.h' contenant ces définitions. Il faut également modifier le fichier ''vst.l'' pour inclure le fichier ''vst.tab.h'' soit inclus dans le fichier ''vst.l'' et supprimer les définitions de token existantes dans ''vst.l''. |
| 115 | 1. Il faut enfin modifier la fonction main(), qui est maintenant définie dans le fichier ''vst.y'', et doit appeller la fonction yyparse(). |
| 116 | |
| 117 | Voici une ébauche du fichier ''vst.y'' que vous devez modifier et compléter: |
| 118 | {{{ |