Академический Документы
Профессиональный Документы
Культура Документы
Objectifs
Crer une grammaire du langage Logo. Faire gnrer un analyseur syntaxique de cette grammaire. Crer une reprsentation intermdiaire dun programme Logo. Crer un interprteur du langage Logo.
Outils
Gnrateur danalyseur lexical et syntaxique (lexer-parser-tree walker) AntLR (another tool for language recognition). Plugin AntLr pour lenvironnement Eclipse. Install sur les stations. Plugin Visual Editor pour lenvironnement Eclipse. Install sur les stations.
Documentation AntLR
Site : Documentation : API : Pour commencer : http://www.antlr.org/ http://www.antlr.org/doc/index.html Site NF11 : http://www4.utc.fr/~nf11/ voir liens utiles/ Documentation AntLR locale http://www.antlr.org/javadoc/overview-summary.html Site NF11 : http://www4.utc.fr/~nf11/ voir liens utiles/ AntLR : Pour commencer
Documentation LOGO
Site NF11 : http://www4.utc.fr/~nf11/ voir liens utiles/ Manuel LOGO
Crer un projet Java Installer le fichier antlt.jar dans le classpath du projet o build path/add external archives et rechercher le fichier : /eclipse/plugins/org.antlr_2.7.6/antlt.jar
Gnrateur danalyseur lexical Lire antlr.pdf. Copier le fichier defaultlogo.g dans le projet. Vrifier que ce fichier souvre dans lditeur AntLr (open with). Etudier la partie lexer du fichier grammaire defaultlogo.g Site NF11, Documentation/Grammaire Logo Introduction Crer un package de mme nom que celui figurant dans le header de la grammaire dans le projet java. Choisir le package pour la gnration des classes dans ce package - properties du fichier .g, ANTLR grammar options, choisir le package Gnrer les classes du lexer avec AntLr - compile ANTLR grammar. On pourra ajouter la rgle lexicale suivante permettant de ne pas prendre en considration les sparateurs :
WS ; : (' ' | '\t' | '\r' '\n' {newline();} | '\n' ) { $setType(Token.SKIP);}
Crer une classe pour tester le lexer (incluant la mthode main) et recopier la mthode parse1 de test qui permet dafficher les tokens dun programme. On crira les instructions dun programme logo dans un fichier (ex : defaultlogo.prg). Pour liminer les erreurs de compilation : source/add import.
public class LogoTestMain { public static void main(String[] args) { parse1("defaultlogo.prg"); } static void parse1(String filename) { try { FileReader f = new FileReader(filename); DefaultLogoLexer lexer = new DefaultLogoLexer(f); Token t = lexer.nextToken(); while (t.getType() != Token.EOF_TYPE) { System.out.println(t.getText() + " - " + t.getType()); t = lexer.nextToken(); } } catch (Exception ex) {
ex.printStackTrace(); } } }
En version java 5.0, on peut crire la mthode suivante permettant de lire un programme partir dune chane tape dans la console :
static void parse1() { Scanner scanner = new Scanner(System.in); System.out.print("Texte : "); String s = scanner.nextLine(); try { LogoLexer lexer = new LogoLexer(new StringReader(s)); Token t = lexer.nextToken(); while (t.getType() != Token.EOF_TYPE) { System.out.println(t.getText() + " - " + t.getType()); t = lexer.nextToken(); } } catch (Exception ex) { ex.printStackTrace(); } }
Tester, ajouter une rgle dans le lexer, gnrer les classes, tester de nouveau. Lexer pour le langage LOGO Etudier le document Manuel Logo. Ecrire quelques units lexicales de la grammaire du langage Logo. On pourra ajouter les expressions arithmtiques en tudiant le fichier expression2.g Gnrer les classes ; tester.
Parser pour le langage Logo Ajouter quelques rgles defaultlogo.g ; gnrer les classes ; tester.
Etape 3 : Interprteur
Arbre AST (Abstract Syntax Tree) Etudier la partie construction de larbre abstrait du parser du fichier grammaire defaultlogo.g. Gnrer les classes. Ecrire un programme de test pour visualiser la cration de larbre abstrait.
static void parse3(String filename) { try { FileReader f = new FileReader(filename); DefaultLogoLexer lexer = new DefaultLogoLexer(f); DefaultLogoParser parser = new DefaultLogoParser(lexer); parser.programme(); CommonAST parseTree = (CommonAST)parser.getAST(); System.out.println(parseTree.toStringList()); ASTFrame frame = new ASTFrame("Arbre AST", parseTree); frame.setVisible(true); } catch(Exception ex) { ex.printStackTrace(); } }
Aspect graphique Etudier la partie treewalker du fichier grammaire defaultlogo.g. Installer lapplication compose des classes LogoMain, LogoFrame, LogoPanel, Traceur, du package (logo.gui) et du fichier logo_config.xml. Il faut galement ajouter les librairies spring.jar et commons-logging.jar au classpath. Lensemble de ces fichiers se trouve sur le site NF11 (http://www4.utc.fr/~nf11/) Documentation/Matriel TP2 - fichier tp2v14.zip. Excuter lapplication LogoMain ; entrer un programme dans le panel de gauche ; excuter. Cette application permet de visualiser le rsultat de lanalyse syntaxique. Ajouter une rgle au treewalker ; gnrer les classes ; excuter. Cette application donne une ide de ce que peut tre un interprteur du langage Logo. Dans la suite, il est possible de garder cette application ou den crer une autre. Le fichier logo_config.xml doit tre adapt pour changer les noms des lexer, parser, treewalker et des axiomes.
Le second paramtre de la mthode prcdente est un TreeSelectionListener. On pourrait implmenter une classe telle que DefaultTreeSelectionListener, classe implmentant l' interface TreeSelectionListener, en ajoutant un comportement particulier. La construction du panel ncessite la prsence d' second paramtre pouvant un valoir "null".
public class DefaultTreeSelectionListener implements TreeSelectionListener { public void valueChanged(TreeSelectionEvent e) { } }
Le second panel est une instance dune classe (LogoPanel) crer hritant de javax.swing.Jpanel. Cest linvocation de la mthode paintComponent qui permet de tracer une figure dans le panel. Il est ncessaire de la surcharger.
Les deux panels dcrits ci-dessus sont insrs dans un javax.swing.JSplitPane. On peut utiliser la construction interactive d' classe interface l' d' une aide clipse en utilisant lditeur visuel. Pour cela crer une Visual Class.