Rappel sur des notions importantes de jflex

Documents pareils
Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Programmer en JAVA. par Tama

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Java Licence Professionnelle CISII,

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Introduction au langage C

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Corrigé des exercices sur les références

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

as Architecture des Systèmes d Information

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

ACTIVITÉ DE PROGRAMMATION

Chapitre 10. Les interfaces Comparable et Comparator 1

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

PROGRAMMATION PAR OBJETS

Plan du cours. Historique du langage Nouveautés de Java 7

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Introduction au langage Java

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Cours 1: Java et les objets

TP1 : Initiation à Java et Eclipse

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Programme Compte bancaire (code)

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Une introduction à Java

Projet de programmation (IK3) : TP n 1 Correction

Programmation Par Objets


Auto-évaluation Programmation en Java

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Java Licence Professionnelle CISII,

Bases du langage. Historique Applications et applets Éléments de base du langage Classes et objets Les exceptions

Langage Java. Classe de première SI

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

TD3: tableaux avancées, première classe et chaînes

Utilisation d objets : String et ArrayList

Flux de données Lecture/Ecriture Fichiers

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Programmation en Java IUT GEII (MC-II1) 1

Programmation Objet Java Correction

Le prototype de la fonction main()

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Package Java.util Classe générique

Généralités sur le Langage Java et éléments syntaxiques.

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

TP, première séquence d exercices.

Remote Method Invocation (RMI)

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Programmation par les Objets en Java

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Tp 1 correction. Structures de données (IF2)

Introduction à l algorithmique et à la programmation M1102 CM n 3

Développement Logiciel

INF 321 : mémento de la syntaxe de Java

Dis papa, c est quoi un bus logiciel réparti?

Synchro et Threads Java TM

Apprendre Java en 154 minutes

Gestion distribuée (par sockets) de banque en Java

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Architecture Orientée Service, JSON et API REST

Programmation avec des objets : Cours 7. Menu du jour

Environnements de développement (intégrés)

OS Réseaux et Programmation Système - C5

1 Définition d une classe en Java

Premiers Pas en Programmation Objet : les Classes et les Objets

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Programmation Réseau SSH et TLS (aka SSL)

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Programmation C++ (débutant)/instructions for, while et do...while

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

INITIATION AU LANGAGE JAVA

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Exercices sur les interfaces

TD/TP PAC - Programmation n 3

TP1 : Initiation à Java et Eclipse

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Notions fondamentales du langage C# Version 1.0

TD/TP PAC - Programmation n 3

Remote Method Invocation Les classes implémentant Serializable

Consigne : je remplis le tableau en tenant compte des informations de la ligne supérieure et de la colonne de gauche (droite pour les gauchers)

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Derrière toi Une machine virtuelle!

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

COMPARAISONDESLANGAGESC, C++, JAVA ET

Corrigés des premiers exercices sur les classes

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Programmation Orientée Objet Java

Algorithmique et Programmation, IMA

Transcription:

Master 1 Compilation Coloration de code source Ce TP sur l'analyse lexicale correspond à un projet plus ambitieux puisqu'il s'agit de colorer les différents éléments du langage en produisant directement du HTML. Rappel sur des notions importantes de jflex Par défaut, lorsque l'analyseur lexical fonctionne en ne créant pas de main et qu'il est couplé à un autre programme, il utilise une méthode Yytoken yylex(). Le type Yytoken est à définir par le concepteur de l'analyseur. Voici un exemple de fichier qui permet de créer un analyseur lexical qui supprime les commentaires commençant par // ainsi que les fichiers annexes. La classe Commentaire est la classe principale qui appelle l'analyseur lexical sur un fichier passé en paramètre, la classe Yytoken est la «token» ou lexème créé par l'utilisateur : public class Yytoken { private String description; private int valeur; public Yytoken(String d){ description = d; valeur = 0; public Yytoken(String d, int v){ this(d); valeur = v; public String tostring(){ return description+"("+valeur+")"; import java.io.ioexception; import java.io.bufferedreader; import java.io.filereader; public class Commentaire {

public static void main(string [] args) throws IOException{ System.out.println(args[0]); // créer un analyseur EnleveCommentaires qui va prendre ses entrées dans le fichier de nom arg[0] EnleveCommentaires yy = null; yy = new EnleveCommentaires( new FileReader(args[0])); Yytoken token; // la fin de fichier est codée par le token null while((token = yy.yylex())!= null) System.out.print(token); %% %unicode %line %class EnleveCommentaires %% "//".* { ; \r\n { return new Yytoken("\n");.+ { return new Yytoken(yytext()); Ce qui donnera sur le fichier : fichier d'essai un commentaire // ci-dessous pas ici donnera : java Commentaire essai.txt essai.txt fichier d'essai(0) (0)un commentaire(0) (0) (0)pas ici(0) (0) Travail préliminaire : Taper le code ci-dessus Bien comprendre les différents éléments et l'interfaçage de ces éléments Le fichier jflex ne marche pas tout le temps pour certains commentaires, lesquels? Écrivez un ou plusieuts fichiers qui supprimeront les nombres de votre fichier et mettra les textes en majuscules

Contexte Cette technique est connue comme étant de la coloration syntaxique mais qui correspond en fait à de la coloration lexicale. Nous allons dans notre cas appliquer ce principe à la coloration des programmes Java, le but final étant d'obtenir une coloration syntaxique comme ci-dessous : Exemple.java import java.util.scanner; public class Exemple { int i; public Exemple(){ System.out.println("création de l'objet"); i = 1; ce qui correspond au fichier HTML généré suivant : <HTML> <BODY bgcolor = #FFFFFF> <H2>Exemple.java</H2> <CODE> <FONT color=00ff00>import java.util.scanner; </FONT> <FONT color=0000ff>public</font> <FONT color=0000ff>class</font> <FONT color=007f00>exemple</font> { <FONT color=0000ff>int</font> <FONT color=007f00>i</font>; <FONT color=0000ff>public</font> <FONT color=007f00>exemple</font>() { <FONT color=0000ff>system</font>.<font color=0000ff>out</font>.<font color=0000ff>println</font>(<font color=7f0000>"création de l'objet"</font>); <FONT color=007f00>i</font> <FONT color=00007f>=</font> <FONT

color=ff0000>1</font>; </CODE> </BODY> </HTML> Les couleurs ne sont peut-être pas les plus pertinentes mais c'est à vous éventuellement de les modifier. Pour le moment, votre analyseur lexical écrit en jflex prendra en compte les éléments suivants : 1. les mots-clefs if then else while switch case do break for return void int float double char long unsigned signed public private protected class System out println 2. les entiers (on ne prendra pas en compte dans un premier temps les nombres réels) ; 3. les importations (les lignes qui commencent par import xxx.yyy.zzz) ; 4. les chaînes de caractères entre guillemets ; 5. les identificateurs qui en Java commencent par une lettre ou le symbole "_" et se poursuivent par des lettres, le symbole "_" et des chiffres ; 6. et les différents opérateurs +,-,<,>=,==,. A chacune de ces unités lexicales, on lui affectera une couleur propre et chaque couleur correspondra simplement à un affichage du code suivant : <FONT color=xxx> </FONT> Par exemple, pour générer la chaîne de caractères en rouge vous devrez produire le code suivant : <FONT color=7f0000>"création de l'objet"</font>; Je vous propose les couleurs suivantes mais il est bien sûr tout à fait possible d'en utiliser d'autres : bleu vert violet rouge blanc bleu pale vert pale violet pale rouge pale <FONT color=00007f> <FONT color=007f00> <FONT color=007f7f> <FONT color=7f0000> <FONT color=white> <FONT color=0000ff> <FONT color=00ff00> <FONT color=00ffff> <FONT color=ff0000> Travail à réaliser Écrire votre fichier jflex que vous pouvez par exemple appeler java.jflex.

Votre fichier jflex aura comme option %unicode et %class JavaSyntax Vous pouvez éventuellement utiliser une classe intermédiaire pour améliorer la lisibilité du code dans votre fichier jflex. Par exemple, pour écrire un texte en rouge j'utilise dans ma partie action la commande suivante : MonHtmlLib.colPrint(MonHtmlLib.C_ROUGE); qui appelle dans la classe MonHtmlLib le code <FONT color=7f0000> Votre fichier java.jflex devra sortir tout le code au format HTML sans l'en-tête du fichier et son footer. N'oubliez pas que vous devez également transformer certains caractères par exemple < devra être transformé en HTML en > Ajout de l'en-tête et du footer Pour rajouter ces deux derniers éléments et pour former un fichier HTML complet, nous allons écrire un fichier Main qui permettra de lui passer en paramètre un fichier java et en sortie il sortira un fichier HTML complet. Comme le main ne sera plus généré par le fichier jflex vous enlèverez l'option %standlone et vous ajouterez à votre fichier jflex l'option %integer. Voici ci-dessous une bonne partie du squelette du programme à vous de le compléter en supposant que votre analyseurlexical s'appelle JavaSyntax sinon changer le nom dans le programme cidessous : import java.io.filereader; public class MainJava { public static void main(string [] argv) { if (argv.length == 0) { System.out.println("Utilisation : java JavaSyntax <inputfile>"); else { // header HTML System.out.println("<HTML>"); System.out.println("<BODY bgcolor = #FFFFFF>"); for (int i = 0; i < argv.length; i++) { /* 1 - déclaration du scanner */ JavaSyntax scanner = null; try { // écrire la page de titre et CODE System.out.println("<H2>"+argv[0]+"</H2>"); System.out.println("<CODE>"); /* 2 - scanner = new JavaSyntax() -> instantiation du Scanner par le JavaSyntax() 3 - new java.io.filereader(argv[i]) -> communique au scanner le fic scanner = new JavaSyntax( new FileReader(argv[i]) ); /* 4 - scanne le fichier jusqu'à la fin while ( scanner.yylex()!= null ); /* fermer la tage <code> */ System.out.println("</CODE>");

catch (java.io.filenotfoundexception e) { System.out.println("Fichier non trouvé : \"" + argv[i] + "\""); catch (Exception e) { System.out.println("Unexpected exception:"); e.printstacktrace(); /* Footer Html */ System.out.println("</BODY>"); System.out.println("</HTML>");