Changes between Version 13 and Version 14 of CaoCourseTme3
- Timestamp:
- Feb 17, 2007, 2:47:41 PM (18 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
CaoCourseTme3
v13 v14 20 20 la construire en analysant la structure du fichier [wiki:CaoCourseTme3exemple exemple.vst]. 21 21 22 Vous pourrez également utiliser le fichier [wiki:CaoCourseTME3signal signal.vst] qui ne décrit pas un composant23 complet mais simplement une liste de déclarations de signaux.22 Vous pourrez également utiliser le fichier [wiki:CaoCourseTME3signal signal.vst] qui ne décrit pas 23 un composant complet mais simplement une liste de déclarations de signaux. 24 24 25 25 Ces deux fichiers sont disponibles dans le répertoire: … … 60 60 On donne ci-dessous une partie du fichier ''vst.l'' que vous devez écrire. Comme vous pouvez le constater, 61 61 ce fichier se termine par la définition du programme main() qui fait appel à la fonction yylex(). 62 La variable globale yyin est un pointeur sur le fichier à analyser. 62 La variable globale yyin est un pointeur sur le fichier à analyser. La variable globale yytext est un 63 pointeur sur la chaîne de caractère correspondant au token reconnu. 63 64 {{{ 64 65 %{ 65 66 #include <string.h> 66 67 #include <stdio.h> 67 int yylineno = 1; /* compteur denumero de ligne utilisé pour les messages d'erreur */68 #define YY_NO_UNPUT /*68 int yylineno = 1; /* numero de ligne utilisé pour les messages d'erreur */ 69 #define YY_NO_UNPUT 69 70 %} 70 71 71 72 %% 72 [ \t] { /* Rien de rien */ }73 [ \t] {] 73 74 \n {yylineno++;} 74 75 regle1 {printf("TOKEN1: %s\n", yytext);} … … 100 101 La compilation du fichier ''vst.l'' s'effectue comme suit, à charge pour vous d'intégrer cela dans un Makefile: 101 102 {{{ 102 flex -t vst.l > vst.yy.c 103 gcc -Wall -Werror -o scanner vst.yy.c -lfl 103 $ flex -t vst.l > vst.yy.c 104 $ gcc -Wall -Werror -o scanner vst.yy.c -lfl 105 }}} 106 107 Validez votre travail en lançant l'analyseur lexical sur les fichiers ''signal.vst'' et ''exemple.vst''. 108 {{{ 109 $ scanner signal.vst 104 110 }}} 105 111 … … 118 124 }}} 119 125 * 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. 126 * Lancer cette nouvelle version de l'analyseur lexical sur les fichiers ''exemple.vst'' et ''signal.vst''. 120 127 121 128 = Etape 3 : Analyseur syntaxique = … … 131 138 (une liste de signaux dans notre cas). 132 139 133 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''. 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. 134 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. 135 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().