La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

IFT313 – Introduction aux langages formels Eric Beaudry Département dinformatique Université de Sherbrooke Laboratoire 4 – JFlex Été 2010.

Présentations similaires


Présentation au sujet: "IFT313 – Introduction aux langages formels Eric Beaudry Département dinformatique Université de Sherbrooke Laboratoire 4 – JFlex Été 2010."— Transcription de la présentation:

1 IFT313 – Introduction aux langages formels Eric Beaudry Département dinformatique Université de Sherbrooke Laboratoire 4 – JFlex Été 2010

2 Tâches Implémenter des commentaires style C dans un analyseur lexical. Reconnaître des commentaires imbriqués. Valider des lexèmes de documentation du style JavaDoc ou Doxygen.

3 Langage dexpressions arithmétiques 1.Repartez de lexemple (calc/scanner.jflex) : ";" { return symbol(Sym.SEMI); } "+" { return symbol(Sym.PLUS); } "-" { return symbol(Sym.MINUS);} "*" { return symbol(Sym.TIMES); } "/" { return symbol(Sym.DIVIDE); } "%" { return symbol(Sym.MOD);} "(" { return symbol(Sym.LPAREN); } ")" { return symbol(Sym.RPAREN); } [0-9]+ { return new Symbol(Sym.NUMBER, yychar, yychar+yytext().length(), new Integer(yytext())); } [ \t\r\n\f] { /* ignore white space. */ }. { System.err.println("Illegal character: "+yytext()); }

4 Implémenter des commentaires Texte en entrée: 2+3; /* ceci est un commentaire … */ 3+4; Tokens en sortie: NUM : 2 PLUS : + NUM : 3 SEMI : ; COMMENTAIRE : ceci est un commentaire … NUM : 3 PLUS : + NUM : 4 SEMI : ;

5 Commentaires imbriqués Texte en entrée: 2+3; /* ceci est un commentaire /* imbriqué */ */ 3+4; Tokens en sortie: NUM : 2 PLUS : + NUM : 3 SEMI : ; COMMENTAIRE : ceci est un commentaire /* imbriqué */ TIMES : * DIV : / NUM : 3 PLUS : + NUM : 4 SEMI : ;

6 Comment supporter des commentaires imbriqués Les expressions régulières ne permettent pas de décrire des commentaires imbriqués. Le langage L={ («/*» w «*/» ) n, w=A* } nest pas régulier. Il serait possible de supporter ce langage par une grammaire. Cependant, cela exigerait que les commentaires soient reconnus au moment de lanalyse syntaxique plutôt quà lanalyse lexicale, ce qui moins pratique. JFlex peut utiliser plusieurs modes où chacun des modes possède son propre AFD. On peut passer dun mode à un autre à laide de la méthode yybegin() de JFlex. Chaque expression régulière peut être associée à un ou plusieurs modes. Un mode est donné entre <>.

7 Astuce pour reconnaître commentaires imbriqués 1.Ajouter devant les définitions dexpressions régulières du langage dexpressions arithmétiques. 2.Lorsque le début dun commentaire /* est reconnu, il faut basculer dans le mode. "/*" { yybegin(COMMENT); comment_count = comment_count + 1; } 3.À chaque fois que /* est rencontrer, incrémenter un compteur de profondeur. "/*" { comment_count = comment_count + 1; } 4.À chaque fois que */ est rencontrer, décrémenter un compteur de profondeur. Lorsque ce compteur égale zéro, revenir au mode. if (comment_count == 0) yybegin(YYINITIAL);

8 Reconnaître des balise JavaDoc ou Doxygen Texte en entrée: Prénom 1.0 */ Prénom Nom Tokens en sortie: TAG_AUTEUR : Prénom Nom TAG_VERSION : 1.0 NUM : 3 PLUS : + NUM : 4 SEMI : ; ERREUR LEXICAL : le ne peut être reconnu ID : Prénom ID : Nom


Télécharger ppt "IFT313 – Introduction aux langages formels Eric Beaudry Département dinformatique Université de Sherbrooke Laboratoire 4 – JFlex Été 2010."

Présentations similaires


Annonces Google