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 JavaCC.

Présentations similaires


Présentation au sujet: "IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke JavaCC."— Transcription de la présentation:

1 IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke JavaCC

2 IFT313© Froduald Kabanza2 Objectifs Introduction à JavaCC

3 IFT313© Froduald Kabanza3 Références [2] Appel, A. and Palsberg. J. Modern Compiler Implementation in Java. Second Edition. Cambridge, 2004. – Sections 3.4 à 3.5 [6] JavaCC : A parser / scanner generator for Java: https://java.net/projects/javacc https://java.net/projects/javacc

4 ATTRIBUTS SÉMANTIQUES IFT313© Froduald Kabanza4

5 IFT313© Froduald Kabanza5 Attributs dans JavaCC JavaCC ne fait pas que valider la syntaxe. Avec les attribut sémantiques, JavaCC permet: –Deffectuer des calculs à la volé (exemple Calc1) –De construire un arbre syntaxique abstrait (exemple Calc2 ci-après); Limites avec JavaCC: –Un seul attribut par symbole. –Une seule passe dévaluation. Pour aller au-delà, il faut utiliser dautres outils ou des méthodes adhoc pour évaluer les attributs (avec laide loutil JJTree). Ceci est au-delà du cours..

6 IFT313© Froduald Kabanza6 CalcParser PARSER_BEGIN(Parser) package calcsParser; import java.io.*; public class Parser { … } parser.Expr_list(); } PARSER_END(Parser) SKIP : { " " | "\t" | "\n" | "\r" } TOKEN : { | }

7 IFT313© Froduald Kabanza7 CalcParser (Suite) void Expr_list () : {} {(E() )* } void E () : {} {T() ( T () ) *} void T () : {} {F() ( F())*} void F () : {} { | E() }

8 8 Calc1 void Expr_list() : { int a; System.out.println("Please type in an arithmetic expression followed by a \";\" or ^D to quit:" + "\n"); } { ( a=E() { System.out.println(" =" + a + "\n"); System.out.println("Please type in another expression followed by a \";\" or ^D to quit:" + "\n"); } )* } int E () : { int a, i; } { a=T() ( i=T() { a = a + i; })* { return a; } } IFT313© Froduald Kabanza

9 9 Calc1 (Suite) int T() : { int a, i; } { a=F() ( i=F() { a = a * i; })* { return a; } } int F() : { Token t; int a = 0; } { t= { return Integer.parseInt(t.image); } | a=E() { return a; } } IFT313© Froduald Kabanza

10 10 Calc2 void Expr_list() :{ Exp e; System.out.println("Please type in an arithmetic expression followed by a \";\" or ^D to quit:" + "\n"); } { ( e=E() { System.out.println(" =" + e.eval() + "\n"); System.out.println("Please type in another expression followed by a \";\" or ^D to quit:" + "\n"); } )* } Exp E () : { Exp e1, e2; } { e1=T() ( e2=T() { e1 = new PlusExp(e1,e2); } | e2=T() { e1 = new MinusExp(e1,e2); } )* { return e1; } } IFT313© Froduald Kabanza

11 11 Calc2 (Suite) Exp T() :{ Exp e1, e2; } { e1=F() ( e2=F() { e1 = new TimesExp(e1,e2); } | e2=F() { e1 = new DivideExp(e1,e2); } )* { return e1; } } Exp F() : { Token t; Exp e; } { t= { return new NumberLiteral(t.image); } | e=E() { return e; } } IFT313© Froduald Kabanza

12 GÉRER LES CONFLITS FIRST/FOLLOW IFT313© Froduald Kabanza12


Télécharger ppt "IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke JavaCC."

Présentations similaires


Annonces Google