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 Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313.

Présentations similaires


Présentation au sujet: "IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313."— Transcription de la présentation:

1 IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313 JFLEX

2 IFT313© Froduald Kabanza2 Sujet Introduction à JFLEX.

3 IFT313© Froduald Kabanza3 Objectif Comprendre comment fonctionne générateur danalyseur lexical (JFLEX). Lab #2 et TP #2 : Être capable de générer un analyseur lexical en utilisant JFLEX.

4 IFT313© Froduald Kabanza4 Références [2] Appel, A. and Palsberg. J. Modern Compiler Implementation in Java. Second Edition. Cambridge, – Section 2.5 [4] Aho, A., Lam, M., Sethi R., Ullman J. Compilers: Principles, Techniques, and Tools, 2 nd Edition. Addison Wesley, – Sections 3.5 [5] JFlex : A Fast Scanner Generator for Java

5 IFT313© Froduald Kabanza5 JFLEX JFLEX est un logiciel de génération danalyseurs lexicaux en Java. Il est écrit en Java. Il est de domaine publique, publié sous la licence GNU. JFLEX signifie Java Fast LEXical-analyzer generator –Comme Lex et FLEX sous UNIX. Il a été développé par un groupe de chercheurs en Allemagne. Lab #2 va vous familiariser avec JFLEX. –Téléchargement de JFLEX –Installation –Essaie de quelques exemples simples TP #2 vous permettra de le mettre en pratique. –Écrire un analyseur lexical pour un langage donné.

6 IFT313© Froduald Kabanza6 Intégration de JFLEX avec dautres composantes Analyseur syntaxique (Parser) Spec JFLEX (exp. rég. + actions) JFlex Scanner.java javac Scanner.class (Lexical analyzer) Code source Tokens

7 IFT313© Froduald Kabanza7 JFLEX et les analyseurs syntaxiques Un analyseur lexical généré par JFLEX peut fonctionner avec plusieurs analyseurs syntaxiques. Mais il est surtout facile à interfacer avec un analyseur syntaxique généré par Java CUP. JFLEX est une amélioration dun autre générateur danalyseurs lexicaux appelé JLEX développé par Elliot Berk de lUniversité Princeton, écrit aussi en Java.

8 IFT313© Froduald Kabanza8 Analyseur syntaxique Grammaire + actions sémantiques Java CUP ou JavaCC Parser.java javac Code source Code cible Parser.class (Syntactic analysis, Semantic analysis) Scanner.class Tokens

9 IFT313© Froduald Kabanza9 Exemple : scanner pour un calculateur Un des exemples danalyseur syntaxique que nous verrons plus tard consistera à générer un calculateur acceptant des expressions arithmétiques de la forme (3 + 5 * (7 + 5)) Le calculateur sera généré à partir de deux spécifications : –Un scanner pour des tokens composant de tels expressions. –Un parser (interpréteur) pour des expressions ayant une telle syntaxe. Pour linstant nous sommes concerné par le scanner. La suite vous explique donc la spécification à donner à JFLEX pour quil génère le scanner.

10 IFT313© Froduald Kabanza10Lab2/Example3/scanner.flex % /* Premier %. Mettez ici du code Java à insérer au début du fichier générée, les états lexicaux et les options de JFLEX. Chaque option JLFEX doit commencer par une nouvelle ligne et par un mot clé commencé préfixé par %. Voici des exemples. */ package exemple3; // Sera inséré dans la classe générée, avant main. %class Scanner; /* Nom de la classe à générer. Voir aussi %extends, %public, % abstract, et %implements */ %implements java_cup.runtime.Scanner /* ajouté à la déclaration de la classe*/ %function next_token /* nom de la méthode retournant le prochain token */ %type Symbol /* type des tokens retournés par la méthode next_token*/

11 IFT313© Froduald Kabanza11 Lab2/Example3/scanner.flex (suite) %char /* Active le comptage des caractères scanées (yychar). Voir aussi les options %line (yyline) et %column (yycolumn)*/ %{ private Symbol symbol(int type) { return new Symbol(type, yychar, yychar+yytext().length(), yytext()); } %} /* Le code entouré de %{ %} est copié tel quel dans la fichier.java du scanner. Vous mettez dedans toutes les méthodes auxiliaires que vous voulez utiliser dans les actions associées aux expressions régulières. */ %eofval{ { return new Symbol(sym.EOF); } %eofval} /* Action (code) exécutée lorsque next_token atteint la fin de fichier.*/

12 IFT313© Froduald Kabanza12 Lab2/Example3/scanner.flex (suite) % /* second % : début des expressions régulières */ ";" { return symbol(Sym.SEMI); } // Classe SymClasse Sym "+" { return symbol(Sym.PLUS); } "-" { return symbol(Sym.MINUS);} "*" { return symbol(Sym.TIMES); } "/" { return symbol(Sym.DIVIDE); } "%" { return symbol(Sym.MOD);}

13 IFT313© Froduald Kabanza13 Lab2/Example3/scanner.flex (suite) "(" { 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] { /* ignorer tabulations et sauts de lignes */ }. { System.err.println("Illegal character: "+yytext()); }

14 IFT313© Froduald Kabanza14 Résumé JFlex est un générateur danalyseurs lexicaux très flexible. Lab 2 et TP 2 ont pour objectif de vous familiariser avec JFlex JFlex sera utilisé plus tard pour générer un analyseur lexical pour Java CUP un outil de génération danalyseurs syntaxiques. Jflex permet beaucoup dautres options. Voir le manuel.


Télécharger ppt "IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke planiart.usherbrooke.ca/kabanza/cours/ift313."

Présentations similaires


Annonces Google