Changes between Version 2 and Version 3 of CaoCourseTme4
- Timestamp:
- Feb 25, 2007, 6:53:00 PM (18 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
CaoCourseTme4
v2 v3 1 1 {{{ 2 2 #!html 3 <h1>TME4 : Ecriture d'un parser lofig</h1>3 <h1>TME4 : Ecriture d'un parser ''.vst'' vers ''lofig''</h1> 4 4 }}} 5 5 [[PageOutline]] … … 7 7 = Introduction = 8 8 9 Ce TME constitue la suite du TME3 sur lex et yacc. Cette seconde partie a pour but de10 vous faire construire en mémoire la structure de données \emph{lofig}présentée en cours.9 Ce TME constitue la suite du TME3 sur ''flex'' et ''bison''. Cette seconde partie a pour but de 10 vous faire construire en mémoire la structure de données ''lofig'' présentée en cours. 11 11 A chaque règle importante de la grammaire correspond la création d'un objet de la 12 structure de données \emph{lofig}.12 structure de données ''lofig''. 13 13 14 Nous faisons l'hypothèse que le scanner et le parser du TME4 sont achevés. 15 Vous êtes invités à utiliser vos propres fichiers vst.l et vst.y, mais vous pouvez également 16 utiliser les fichiers vst.l et vst.y fournis avec ce TME. ces fichiers contiennent 17 cependant quelques erreurs que vous devrez corriger afin de vous obliger à les comprendre. 14 Nous faisons l'hypothèse que l'analyseur lexical et l'analyseur syntaxique réalisés 15 dans le TME3 sont achevés et opérationnels. 16 Vous êtes donc invités à utiliser vos propres fichiers vst.l et vst.y, mais vous pouvez également 17 utiliser les fichiers vst.l et vst.y fournis avec ce TME. '''Attention''' : ces fichiers contiennent 18 délibérement quelques erreurs que vous devrez corriger, afin de vous obliger à les comprendre. 18 19 19 = Etape 1 : Communication entre le scan ner et le parser =20 = Etape 1 : Communication entre le scaner et le parser = 20 21 21 Dans le TME3, portant sur l'analyse syntaxique du format .vst, le scanner transmettait au parser22 Dans le TME3, portant sur l'analyse syntaxique du format ".vst", le scaner transmettait au parser 22 23 des numéros de tokens définissant le type des tokens reconnus. cela a permis de vérifier que 23 24 les règles de grammaire étaient correctement écrites, et que les constructions grammaticales 24 25 du format .vst étaient correctement reconnues. 25 26 26 Chaque fois que le scan ner reconnait un token, il peut également transmettre au parser27 Chaque fois que le scaner reconnait un token, il peut également transmettre au parser 27 28 une valeur associée à ce token, en utilisant la variable globale yylval. 28 29 Le type de la valeur associée à un token peut être différent suivant le token … … 31 32 le type de la valeur qui sera stockée dans la variable yylval. 32 33 33 Dans cette étape, on ne va pas directement construire la structure de données \emph{lofig},34 mais on va se contenter d'introduire dans le parser les \emph{actions de compilation}lui35 permettant d'afficher sur le terminal (en utilisant printf) le texte correspondant aux différentes36 co nstructtions grammaticales reconnues. Dans cette première étape, on se limitera même37 à afficher les constructions grammaticales correspondant à la partie {{{entity}}} du 38 fichier analysé. Le but ici est simplement de vérifier le mécanisme de transmission 39 de valeurs entre le scanner et le parser.34 Dans cette étape, on ne va pas directement construire la structure de données ''lofig''. 35 On va se contenter d'introduire dans le parser les ''actions de compilation'' lui 36 permettant d'afficher sur le terminal, en utilisant la fonction printf(), le texte 37 correspondant aux différentes constructtions grammaticales reconnues. 38 Dans cette première étape, on se limitera même à afficher les constructions grammaticales 39 correspondant à la partie {{{entity}}} du fichier analysé. Le but ici est simplement de vérifier 40 le mécanisme de transmission de valeurs entre le scaner et le parser. 40 41 41 42 Il faut pour cela modifier les deux fichiers vst.l et vst.y. … … 43 44 * Déterminez quels tokens retournent une valeur significative 44 45 (les tokens n'ont pas tous une valeur). Dans le fichier vst.y, typez 45 les tokens qui doivent l'être en utilisant la construction \verb+%token 46 <type> TOKEN+. 47 * On rappelle que pour chaque token reconnu par le parser, la chaîne de caractères 46 les tokens qui doivent l'être en utilisant la construction 47 {{{ 48 %token 49 <type> TOKEN 50 }}} 51 * On rappelle que pour chaque token reconnu par le scaner, la chaîne de caractères 48 52 correspondant à ce token est stockée dans un buffer pointé par la variable 49 53 {{{yytext}}}, et que le scanner réutilise ce même buffer pour chaque nouveau token.