10 | | qui sont des outils de la distribution GNU permettant de générer automatiquement des |
11 | | ''scanners'' (un scanner est un analyseur lexical) et des ''parsers'' (un parser est un analyseur |
12 | | syntaxique) pour différents formats de fichiers. |
13 | | |
14 | | Vous allez développer un analyseur lexical (scanner), puis un analyseur syntaxique (parser) |
| 10 | qui sont des outils de la distribution GNU permettant de générer automatiquement des |
| 11 | analyseurs lexicaux (ou "scanners") et des analyseurs syntaxiques (ou ''parsers'') |
| 12 | pour différents formats de fichiers. |
| 13 | |
| 14 | Vous allez développer un analyseur lexical, puis un analyseur syntaxique |
140 | | 1. Définir les règles de grammaire correspondant a la déclaration des signaux en analysant le contenu du fichier ''signal.vst'' qui vous est fourni, et implanter ces règles dans le fichier ''vst.y''. On définira successivement la règle décrivant un signal, puis la règle décrivant une liste de signaux. |
141 | | 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 le scanner. |
142 | | 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(). |
143 | | 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''. |
144 | | 1. Il faut enfin modifier la fonction main(), qui est maintenant définie dans le fichier ''vst.y'', et doit appeller la fonction yyparse(). |
| 144 | 1. Déclarez dans le fichier ''vst.y'', les différents token utilisés par le parser susceptibles d'être reconnus par le scanner. |
| 145 | 1. Définissez les deux règles de grammaire correspondant a la déclaration d'une liste de signaux, et implanter ces règles dans le fichier ''vst.y''. On définira successivement la règle décrivant un signal, puis la règle décrivant une liste de signaux. '''Bison''' permet d'associer à chaque règle une "action de compilation" qui est exécutée pendant l'analyse du fichier, au moment ou la règle est reconnue, mais dans cette première étape, on n'associera aucune action aux deux régles définies. |
| 146 | 1. La fonction main() est maintenant définie dans le fichier ''vst.y'', et doit appeller la fonction yyparse(). Il faut donc modifier la dernière partie du fichier du fichier ''vst.l'', qui ne contient plus que la définition de la fonction |
187 | | La compilation s'effectue comme suit, à charge pour vous d'intégrer cela dans le Makefile. |
188 | | Nous vous rappellons que la compilation de '''flex''' doit dépendre du fichier d'entête généré par '''bison'''. |
| 190 | |
| 191 | La compilation s'effectue comme suit, à charge pour vous d'intégrer ces commandes dans le Makefile. |
| 192 | * L'option -d sur la ligne de commande de '''bison''' active le mode debug, qui vous permet de suivre le déroulement de l'analyse syntaxique du fichier. Il faut de plus affecter une valeur non-nulle à la variable globale yydebug dans la fonction main(). |
| 193 | * L'option -t sur la ligne de commande de '''bison''' demande à '''bison''' de générer un fichier ''vst.tab.h''. Ce fichier est utilisé par '''flex''', et contient la définition des "tokens" utilisés par '''bison'''. Ce fichier doit être inclus dans l'en-tête du fichier ''vst.l'', et la compilation de '''flex''' doit dépendre de ce fichier ''vst.tab.h'' généré par '''bison'''. |