Rapport PFE
Transcript of Rapport PFE
Rapport de projet de fin d'études
Logiciel de simulation de déroulement des algorithmes
Universitaire HASSAN II Ain Chock CASABLANCA
École Supérieur de Technologie
Élaboré par : HAJI Soukaïna
OUICHOUL Chaimaa
CHACKCHAME Fatima-Zahra
Encadré par : ANOUN Houda
Département : Génie Informatique
Année scolaire : 2013 - 2014
1
Remerciements
Avant d’entamer ce travail, on tient tout d’abord à exprimer notre gratitude au corps
professoral et administratif de l'École Supérieur de Technologie de Casablanca, pour leur
formation et leur encadrement durant toute l'année.
De même, on adresse nos sincères remerciements dans un premier temps à Mr Larbi
HASSOUNI le chef du département de l’informatique.
On tient à présenter nos sincères et nos vifs remerciements à Mme Houda ANOUN, notre
encadrante, pour son aide, ses conseils inestimables, son encouragement et sa disponibilité
tout au long de la réalisation du projet.
On tient à leur exprimer toute notre gratitude pour ses précieux conseils et son grand effort
pour mettre en valeur notre projet.
On espère que vous trouvez ici l’expression de notre profond respect et notre
profonde reconnaissance.
2
Avant-propos
Dans le cadre de la formation à l’École Supérieure de Technologie de Casablanca
(ESTC) et afin de préparer l’entrée à la vie active, l’établissement cherche à améliorer les
compétences et le savoir-faire de ses étudiants par divers moyens tels que les mini-projets,
les stages et le projet de fin d’étude.
Le projet de fin d’études est une initiative parfaite qui ouvre la porte face à tous les
étudiants afin de tester et d’amplifier leurs connaissances, pour renforcer leur bagage et
leurs compétences professionnelles.
Le document ci-présent constitue le résumé de notre travail accompli dans le cadre de notre
projet de fin d’études et dont l’objectif est la réalisation d’un logiciel de simulation de
déroulement des algorithmes.
Ce logiciel a pour objectif d'aider les étudiants de la première année Génie Informatique à
assimiler toutes les instructions de base en algorithmique.
3
Table des matières
Remerciements .......................................................................................................................... 0
Avant-propos .............................................................................................................................. 2
Introduction .......................................................................................................... 5
Partie I : Généralités
I. Présentation de l’ESTC ........................................................................................................ 7
II. Organisation du travail en groupe: ..................................................................................... 8
Partie II : Présentation du projet
I. Cahier de charge ............................................................................................. 10
1. Contexte ........................................................................................................................ 10
2. Objectives du projet ...................................................................................................... 10
3. Public-cible du projet .................................................................................................... 11
II. Analyse de l’existant ........................................................................................ 11
III. Description de l’ interpréteur LSALGO-SIMULATOR ............................................... 11
1. Environnement de développement .............................................................................. 13
2. Utilité de l’interpréteur ................................................................................................. 13
3. Les composants de base ................................................................................................ 13
4. Structure d’un compilateur/interpréteur ..................................................................... 15
IV. Étape de réalisation de l’interpréteur .................................................................. 16
1. Analyse des besoins ...................................................................................................... 17
2. Conception .................................................................................................................... 18
2.1. Héritage .................................................................................................................. 18
2.2. Polymorphisme ...................................................................................................... 19
2.3. Diagramme de classes ............................................................................................ 20
3. Réalisation ..................................................................................................................... 24
3.1. Outils utilisés .......................................................................................................... 24
3.2. Spécification FLEX et CUP ...................................................................................... 25
3.3. Arbre syntaxique .................................................................................................... 32
3.4. Table de symboles .................................................................................................. 34
3.5. Grammaire ............................................................................................................. 34
4
3.6. Exécution ................................................................................................................ 34
3.7. Exécution pas-à-pas ............................................................................................... 37
3.8. Gestion d'erreur ..................................................................................................... 42
Partie III : Simulation
I. Site web LSALGO ............................................................................................................... 45
II. logiciel LSALGO .................................................................................................................. 45
1. Détails de l’interface ..................................................................................................... 46
Problèmes rencontrés et perspectives .................................................................................... 53
Conclusion ................................................................................................................................ 54
Bibliographie et webographie .................................................................................................. 55
5
Introduction
Au début de l’informatique, on développait des programmes en langage bas niveau (dit binaire). Cela s’est vite avéré fastidieux. On a très vite essayé d’utiliser les possibilités de l’informatique pour faciliter le travail de programmation.
L’étape suivante consiste à s’affranchir complètement de la machine en élaborant ce que l’on appelle des langages de haut niveau. Ces langages ont introduit un certain nombre de constructions qui n’existent pas dans le langage de la machine : expressions arithmétiques, variables locales, procédures et fonctions avec des paramètres qui retournent un résultat, structures de données (tableaux, énumération, record, objet,..), etc.
Pour cela il a fallu construire des programmes qui traduisent des énoncés exprimés dans le langage de haut niveau utilisé par les programmeurs, ce que l’on appelle le langage source, en instructions pour la machine cible. Les programmes effectuant ce genre d’opération s’appellent des compilateurs/interpréteurs- et qui s’avère être le sujet de notre projet - .
En tant que développeurs, nous utilisons fréquemment des compilateurs, pourtant avant de réaliser ce projet nous étions incapables d'expliquer le fonctionnement de ceux-ci.
Grâce à ce projet nous nous sommes intéressés aux outils que nous utilisons quotidiennement puisqu'il nous a été demandé de réaliser un logiciel permettant le déroulement et l'interprétation d'algorithmes écrits en pseudocode. Le compilateur permet de transformer un algorithme en un langage cible, c'est à dire un langage très proche de la machine. Ce langage machine sera par la suite interprété. Il en découlera différents états mémoires.
Ce rapport relate les procédures misent en place lors de la réalisation de ce projet, c'est-à-dire la mise en évidence de tâches ainsi que leurs répartitions, les différents choix adoptés ainsi que les méthodes de travail.
Logiciel de simulation de déroulement des algorithmes
Partie I : Généralités
7
Présentation de l’ESTC
L’École supérieure de technologie de Casablanca (ESTC), créée en 1986 par le Ministère de
l'Enseignement Supérieur de la Formation des Cadres et de la Recherche Scientifique, est
une école d'enseignement supérieur public. Elle fait partie du réseau des écoles supérieures
de technologie et relève de l'université Hassan II - Ain Chock de Casablanca. Sa vocation est
de former des Techniciens Supérieurs polyvalents, hautement qualifiés et immédiatement
opérationnels après leur sortie de l'École en tant que collaborateurs d'ingénieurs et de
managers.
Sont admis à l'ESTC, les bacheliers de l'enseignement secondaire technique, scientifique et
tertiaire. L'admission à l'École se fait par présélection sur la base des notes obtenues au
baccalauréat. Les candidats doivent être âgés de 22 ans au plus au 31 Décembre de l'année
du concours et doivent déposer leurs dossiers avant le 30 Juin de chaque année.
Orientation appliquée de l’enseignement
La formation appliquée à l'ESTC est largement tournée vers l'industrie, c'est pourquoi ses
programmes sont fait afin de répondre aux exigences et aux attentes de l'environnement
économique et social de l'École et font appel à des méthodes pédagogiques actives et
évoluées. Les programmes d'enseignement comportent des Cours, des Travaux Pratiques,
des Travaux Dirigés et des Travaux de Réalisation ainsi que des projets de fin d'études.
L'ESTC dispense des formations dans les spécialités suivantes
- Génie mécanique (GM)
- Génie électrique (GE)
- Génie informatique (GI)
- Génie des procédés (GP)
- Techniques de management (TM)
Elle permet aussi la formation continue.
Logiciel de simulation de déroulement des algorithmes
Partie I : Généralités
8
Durée des études
La durée des études est de deux années universitaires :
- La première année s'étale sur 32 semaines suivies de quatre semaines de stage dans
l'entreprise en Juillet ou Aout.
- La deuxième année est de 36 semaines dont 8 semaines de stage qui débutent du 21
Avril jusqu’au 14 Juin.
I. Organisation du travail en groupe:
Le groupe étant divisé en plusieurs binômes et trinômes, les séances de travail étaient
gérées par nous-mêmes avec l’aide des encadrants ainsi que des doctorants.
Toutes se déroulant sous forme de séances TP dans lesquelles on avançait dans la
préparation de notre projet, en discutant les étapes à suivre afin de mieux les réaliser ainsi
qu’en se répartissant les tâches que chacun aura à effectuer.
On avait aussi une réunion avec notre encadrante une fois par semaine, le Mardi, afin qu’elle
puisse mieux nous guider et nous éclairer sur les points qu’on n’a pas réussi à comprendre
ou à réaliser, tout en nous corrigeant ce qu’on avait pu accomplir jusqu’à présent.
À la fin de chaque réunion notre encadrante nous donnait des renseignements sur les tâches
à réaliser pour la prochaine séance, chose qui nous permettra de mieux améliorer notre
projet.
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
10
II. Cahier de charge
1. Contexte
L’interpréteur permet l’interprétation/simulation d’un code algorithme suivant la syntaxe
mentionnée par la suite.
Une bête à cornes pour résumé le fonctionnement de l’interpréteur:
2. Objectifs du projet
Les caractéristiques du projet sont les suivantes :
Un logiciel d’interprétation d’algorithme de base ouvert à tout public.
Facilité d’adaptation aux fonctionnalités du logiciel qui est destiné aux débutants en
programmation.
Déroulement pas-à-pas et vulgarisation de la RAM aide l’utilisateur à mieux assimiler
le fonctionnement des programmes développés.
Interface simple et riche de différents outils d’éditions pour faciliter la manipulation
du code.
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
11
Site web disponible sur internet pour plus d’accessibilité au logiciel avec divers
contenus pour une meilleure compréhensibilité aux utilisateurs.
3. Public-cible du projet
Le logiciel a été réalisé en étant destiné aux étudiants de première année en Génie
Informatique qui auront au début quelques difficultés à s’adapter au langage de
programmation.
Le logiciel peut être utile à toute personne souhaitant débuter en développement
informatique.
III. Analyse de l’existant
Il existe peu de logiciels permettant l’exécution d’algorithmes écrits en pseudocode. Il en
convient de les analyser pour définir les fonctionnalités intéressantes à réutiliser, et surtout
les fonctionnalités que nous aimerions pouvoir utiliser et qui manquent à ces logiciels ; car
nous sommes nous-mêmes des utilisateurs potentiels de notre logiciel.
Voici donc une analyse non exhaustive des points forts et points faibles d’un logiciel de
compilation:
Le logiciel LARP : est un logiciel gratuit les plus connus qui permet la compilation des codes
d’algorithme.
Ainsi, LSALGO a comme fonctionnalités de vulgariser la RAM afin d’avoir une idée plus claire
sur les opérations qui s’y effectuent, dont l’affectation des valeurs à des variables, sans
oublier l’exécution pas-à-pas des instructions afin d’avoir une meilleure idée sur la manière
dont on a obtenu le résultat, on pourra ainsi donc arriver à notre objectif final.
IV. Description de l’interpréteur LSALGO-SIMULATOR
LSALGO est en fait un interpréteur. Il vient de la compression de la phrase «Logiciel de
simulation d’algorithmes», Il est un langage de programmation permettant le prototypage
rapide d'algorithmes.
L'avantage de LSALGO est que le programme est un langage pseudocode à syntaxe flexible et
non un code source à compiler, ce qui permet de formuler des algorithmes en un langage
semi-naturel plutôt que de devoir adhérer à une syntaxe rigide et cryptique telle que celle
des langages de programmation traditionnels (C++, Pascal, Java, etc.…).
Voici un pseudo code LSALGO indiquant à l'écran si un nombre entré via le clavier de
l'ordinateur est positif ou négatif :
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
12
Comme on peut le constater, la syntaxe du langage LSALGO est simple et facile à
comprendre.
LSALGO offre un environnement de développement d'algorithmes simple et convivial
permettant à un utilisateur novice de se familiariser rapidement avec le logiciel.
L'utilisateur peut ainsi consacrer ses énergies à programmer des algorithmes plutôt qu'à se
familiariser avec une interface complexe ou une syntaxe de programmation aride.
La flexibilité du pseudocode supporté par LSALGO ainsi que la convivialité de
l'environnement de développement rend le logiciel particulièrement propice à
l'enseignement de la programmation.
En pratique, les étudiants peuvent exploiter l'environnement de développement de LSALGO
pour implémenter et expérimenter les algorithmes présentés par l'enseignant.
Afin de faciliter l'exploitation du langage dans un environnement éducatif, LSALGO est doté
d'un système d'aide contextuel présentant la syntaxe du langage LSALGO sous une forme
pédagogiquement des exemples explicatifs et simples de différentes instructions.
Ainsi, la documentation en ligne permet à l'utilisateur non seulement d'apprendre la syntaxe
de LSALGO afin de programmer des algorithmes, mais aussi d'apprendre à exploiter des
notions de programmation telles les variables, les structures conditionnelles et répétitives et
le stockage de données.
Ces notions de programmation sont expliquées et accompagnées d'exemples concrets
facilitant leur compréhension.
Le logiciel LSALGO est un outil pédagogique essentiel à l'enseignement de la programmation. Que ce soit en apprentissage autonome ou en classe, LSALGO rend l'apprentissage de la
programmation plus facile et agréable.
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
13
1. Environnement de développement
L'environnement de développement de LSALGO est constitué d'une interface graphique
conforme aux standards de Microsoft Windows.
L'utilisateur étant déjà familier avec le type d'environnement accompagnant les outils de
développement traditionnels n'aura aucune difficulté à maîtriser l'environnement de
développement de LSALGO.
Réciproquement, l'utilisateur s'initiant à la programmation avec LSALGO aura peu de
difficultés à transférer les aptitudes acquises à un produit plus traditionnel comme ceux cités
ci-haut.
L'environnement de développement de LSALGO est constitué de plusieurs composants, dont
les principaux sont la fenêtre principale, la console d'exécution et l'aide en ligne.
2. Utilité de l’interpréteur
Lors de la réalisation de notre interpréteur, nous avons eu l’idée de vulgariser la RAM afin
d’avoir une idée plus claire sur les variables déclarées ainsi que les valeurs qu’on leur a
attribué.
Nous avons aussi introduit à notre interpréteur la fonction de déroulement pas-à-pas, de
façon à voir le résultat d’exécution de chaque instruction.
Aussi la réalisation de l’interpréteur prend en compte la gestion des erreurs. Donc, au cas où
on finit par commettre des erreurs lorsqu’on écrit un algorithme, ces dernières ainsi que leur
numéro s’afficheront à l’écran.
3. Les composants de base
Les composants de base du pseudocode supporté par LSAGLO sont récapitulés ci-dessous :
- Déclaration
o Déclaration d’une ou plusieurs variables en une instruction.
- Types Simples :
o Entier
o Réel
o Caractère
o Booléen
- Affectation
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
14
- Entrée/ Sortie :
o Affichage dans l’Écran (ECRIRE)
o Scan des variables (LIRE)
- Les expressions Booléennes :
o VRAI
o FAUX
- Les opérations arithmétiques :
o Addition +
o Soustraction -
o Division /
o Multiplication *
- Les opérations logiques :
o ET
o OU
o NON
- Incrémentation, Décrémentation :
o Incrémentation ++
o Décrémentation --
- Les instructions conditionnelles :
o SI ALORS SINON
o SI ALORS
- Les instructions répétitives :
o Boucle TANTQUE
o Boucle REPETERTANTQUE
o Boucle POUR
- Sélection en choix :
o SELON
- Les fonctions primitives :
o Modulo
o Racine
- Le Cast
o ENTIER ->REEL
o REEL ->ENTIER
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
15
4. Structure d’un compilateur/interpréteur
La réalisation d'un compilateur/interpréteur peut être effectuée de façon modulaire car il est généralement structuré en plusieurs phases:
- l'analyseur lexical; - l'analyseur syntaxique; - l'analyseur sémantique; - le générateur de code; - l'optimisation du code généré.
Les fonctions de chacune de ces composantes sont:
l'analyseur lexical (scanner) inspecte le programme source, caractère par caractère, élimine les caractères superflus, reconnaît les unités lexicales (tokens), construit les lexèmes à partir de ces caractères et les fournit à l'analyseur syntaxique;
l'analyseur syntaxique (parser) effectue une analyse syntaxique du programme source en se basant sur les unités lexicales que lui fournit l'analyseur lexical. L'analyse syntaxique consiste à vérifier si le programme est syntaxiquement correct, c'est-à-dire si la séquence des symboles dans le programme source respecte les règles syntaxiques du langage. Les règles d'écriture (syntaxe) sont généralement données sous la forme de grammaire.
l'analyseur sémantique vérifie si le programme syntaxiquement correct l'est aussi sémantiquement. La sémantique est l'étude d'un langage du point de vue du sens. Dans le cadre de la compilation le sens d'un programme est matérialisé par son code généré. Cet analyseur sémantique effectue, principalement, l'analyse de la portée des identificateurs et l'analyse des types;
le générateur de code est la partie du compilateur qui s'occupe de la production du code. Le code généré peut être du code machine, un code intermédiaire, un autre langage de programmation. C'est la composante du compilateur qui réalise effectivement la traduction évoquée à la section. Le code généré peut être optimisé.
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
16
Un compilateur/interpréteur ne réalise donc pas seulement un travail de traduction, il vérifie aussi que le programme source fourni par le programmeur respecte les règles de construction du langage de programmation choisi. Il doit également gérer les erreurs éventuelles, ce qui est loin d'être une tâche aisée.
V. Étape de réalisation du interpréteur
Voici un schéma qui résume les principales étapes qu’on a dû suivre afin de réaliser LSALGO:
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
17
1. Analyse des besoins
Les diagrammes de cas d'utilisation sont des diagrammes UML utilisés pour donner une
vision globale du comportement fonctionnel d'un système logiciel. Ils sont utiles pour des
présentations auprès de la direction ou des acteurs d'un projet, mais pour le
développement, les cas d'utilisation sont plus appropriés. Un cas d'utilisation représente une
unité discrète d'interaction entre un utilisateur (humain ou machine) et un système.
UML définit une notation graphique pour représenter les cas d'utilisation, cette notation est
appelée diagramme de cas d'utilisation. UML ne définit pas de standard pour la forme écrite
de ces cas d'utilisation, et en conséquence il est aisé de croire que cette notation graphique
suffit à elle seule pour décrire la nature d'un cas d'utilisation.
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
18
Voici le diagramme des cas d’utilisations qui va donner une vue globale du comportement
fonctionnel de notre application :
2. Conception
Dans cette partie on réalisera le diagramme de classes dans lequel on a utilisé les
termes suivants:
- Héritage
- Polymorphisme
2.1. Héritage
C’est un des concepts les plus importants de la programmation orientée objet, car il
conditionne irréversiblement la façon selon laquelle un code Java est écrit.
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
19
L'héritage est un mécanisme permettant de créer une nouvelle classe à partir d'une classe
existante en lui proférant ses propriétés et ses méthodes.
Ainsi, pour définir une nouvelle classe, il suffit de la faire hériter d'une classe existante et de
lui ajouter de nouvelles propriétés/méthodes.
De cette façon, les classes héritées forment une hiérarchie descendante, au sommet de
laquelle se situe la classe de base (superclasse).
Exemple de l'héritage dans le code source de LSALGO:
La classe Tdeclar et Taffect hérite de la classe abstraite Tinstr, dont la méthode
prepareInterp et interpret sont redéfinis
2.2. Polymorphisme
Le polymorphisme est un mécanisme par lequel un nom peut désigner des objets de
nombreuses classes différentes, tant qu’elles sont reliées par une superclasse commune.
Tout objet désigné par ce nom est alors capable de répondre de différentes manières à un
ensemble commun d’opérations.
Le polymorphisme est donc un concept qui complète parfaitement celui de l'héritage, il est
plus simple qu'il n'y paraît.
Pour faire court, nous pouvons le définir en disant qu'il permet de manipuler des objets sans
vraiment connaître leur type.
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
20
Exemple du polymorphisme dans le code source de LSALGO:
La méthode interpret de la classe Tinstr_list fait appel à la méthode interpret de chaque
objet instr suivant le mécanisme de polymorphisme pour exécuter la méthode interpret
équivalant au type de l'objet (Tdeclar, Taffect, Tfor...) :
2.3. Diagramme de classes
Le diagramme de classes est un schéma utilisé en génie logiciel pour présenter les classes et
les interfaces des systèmes ainsi que les différentes relations entre celles-ci. Ce
diagramme fait partie de la partie statique d'UML car il fait abstraction des aspects
temporels et dynamiques.
Une classe décrit les responsabilités, le comportement et le type d'un ensemble d'objets. Les
éléments de cet ensemble sont les instances de la classe. C’est un ensemble de fonctions et
de données (attributs) qui sont liées ensemble par un champ sémantique. Les classes sont
utilisées dans la programmation orientée objet. Elles permettent de modéliser
un programme et ainsi de découper une tâche complexe en plusieurs petits travaux simples.
Voici le diagramme de classes:
Tprogram regroupe toutes les instructions se trouvant entre les deux étiquettes "DEBUT" et "FIN".
Tinstrlist est une liste d'instructions (type Tinst) qui peut être soit une déclaration(Tdeclar),
affectation (Taffect), instruction de sélection en choix (Tswitch) ...
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
21
Diagramme 1
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
22
Texp représente l'expression de Cast, les identifiants, les expressions booléennes ...
Diagramme 2
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
23
FirstForm contient la fonction main qui lance l'instance du MainInterface.
SymTab est la table de symbole qui contient les objets Variable, ainsi que les opérations de
manipulation de ce dernier.
MyError est une classe qui permet la gestion des erreurs.
Diagramme 3
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
24
3. Réalisation
3.1. Outils utilisés
Langage de programmation
Java est un langage de programmation informatique orienté objet, Le langage reprend en grande partie la syntaxe du langage C++, très utilisé par les informaticiens. Néanmoins, Java a été épurée des concepts les plus subtils du C++ et à la fois les plus déroutants, tels que les pointeurs
et références, ou l’héritage multiple contourné par l’implémentation des interfaces.
Swing est une bibliothèque graphique pour le langage de
programmation Java, faisant partie du package Java Foundation
Classes (JFC), inclus dans J2SE. Swing constitue l'une des principales
évolutions apportées par Java 2 par rapport aux versions
antérieures. Swing offre la possibilité de créer des interfaces
graphiques identiques quel que soit le système d'exploitation sous-jacent, au prix
de performances moindres qu'en utilisant Abstract Window Toolkit (AWT).
JTattoo se compose de plusieurs différents Look and Feel pour les
applications Swing. Chacun d'entre eux permet aux développeurs
d'améliorer leur application avec une excellente interface
utilisateur. Donc JTattoo ouvre des applications de bureau la porte
pour les utilisateurs finaux qui sont malheureux avec le regard et se sent livré avec
le JDK standard.
JFlex est un générateur d’analyseurs lexicaux pour Java : il génère des analyseurs lexicaux écrits en Java. Le F de JFlex signifie ‘’Fast’’ : JFlex est une réécriture du générateur d’analyseurs lexicaux Jlex. JFlex et Jlex diffèrent par leur mise en
œuvre mais les fichiers de spécification et les techniques d’analyse utilisées sont très similaires. Leur ancêtre commun est Lex, un générateur d’analyseur lexical pour le langage de programmation C.
JCup raccourci pour Java—Based Constructor of Useful Parsers — est un générateur d’analyseurs syntaxiques LALR (cas particulier d’analyseurs LR) à partir de spécifications.
Inspiré de Yacc, il est écrit en Java et génère des analyseurs écrits en Java. Il est conçu pour travailler avec le générateur d’analyseurs lexicaux JFlex2. Un fichier de spécification pour Cup décrit une grammaire algébrique LALR (analyse syntaxique) éventuellement décorée par des actions sémantiques (analyse sémantique).
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
25
logiciels utilisés
NetBeansIDE est un environnement de développement qui s'adapte aux langages de programmation (Javascript, Python, PHP, C/C++, etc.), aux outils et aux ressources dont on dispose. Le programme détecte automatiquement la présence de Java, JDK, MySQL, etc.
PowerAMC propose différentes techniques de modélisation, chacune accessible aux informaticiens de tout niveau, parmi elles : Merise, UML, Data Warehouse, et processus métiers.
EdrawMax est spécialement conçu pour créer et assembler les graphiques, diagrammes, schémas ou autres plans et organigrammes. Plusieurs modèles sont proposés avec la possibilité de personnaliser entièrement les couleurs, les symboles, les dispositions de texte, les formes, etc…
3.2. Spécification FLEX et CUP
3.2.1. Générateur d’analyseurs lexicaux JFLEX
Flex prend en entrée un fichier qui contient une description de l’analyseur lexical à générer.
Il génère un fichier .java.
Le cœur de l’analyseur est une méthode appelée par la suite ‘’méthode d’analyse’’, cette
méthode extrait du texte à analyser le prochain lexème.
JFlex permet de configurer le nom, le type de retour de cette méthode, et le type
d’exception levée. Il est aussi possible de configurer son corps en associant une action à une
description du lexème. Cette action sera effectuée dans l´état final correspondant au
lexème. Dans l’utilisation habituelle d’un analyseur lexical, la méthode d’analyse est destinée
à être appelée répétitivement par un analyseur syntaxique jusqu’à la fin du flot de
caractères. L’action consiste alors le plus souvent à retourner le lexème reconnu, ce qui
termine l’exécution de la méthode.
Dans d’autres utilisations, les actions pourront par exemple calculer une valeur qui sera
retournée à la fin de l’analyse.
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
26
Structuration d’un fichier de spécification Un fichier
JFlex est composé de trois sections séparées par des %% :
La suite de ce document décrit succinctement le contenu de
ces trois sections :
– section 1 : code utilisateur ;
– section 2 : options et déclarations ;
– section 3 : règles lexicales.
Voici une partie du code du fichier flex:
Chaque lexème est représenté par une expression régulière spécifique.
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
27
Le Lexer retourne au Parser un lexème parfois accompagné par un String représentant la
valeur du lexème.
Pour exécuter un fichier .flex il faut :
o Télécharger jflex.jar
o Modifier la variable d’environnement PATH.
o La commande d’exécution :
Pour réaliser un tel analyseur, il faut élaborer spécification dans un fichier portant
l'extension .flex, par exemple on peut l'appeler monanalyseur.flex.
Cette spécification fournie à FLex permet d'obtenir ensuite un analyseur lexical en langage
Java... Une fois obtenu cet analyseur sous la forme d'une seule classe de java il faut la
compiler et l'on a alors un .class que l'on peut exécuter et qui effectue l'analyse lexicale d'un
texte suivant les instructions données dans monanalyseur.flex. Ce fonctionnement peut être
schématisé par la figure suivante :
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
28
3.2.2. Générateur d’analyseurs syntaxiques JCUP
Quand on écrit une grammaire attribuée, on a l’habitude d’indiquer de manière globale le
nom des attributs associés aux lexèmes terminaux et non-terminaux de la grammaire, ainsi
que leur type. Le procédé de spécification de Cup est différent : on explicite globalement le
type des attributs lors de la déclaration des terminaux et non-terminaux, mais le nom des
attributs est local à chaque production.
Chaque terminal ou non-terminal ne peut posséder qu’un attribut, nécessairement de type
objet (on utilisera par exemple le type objet Java Integer et non le type primitif int).
La syntaxe de fichier JCup :
Le fonctionnement peut être schématisé par la figure suivante :
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
29
Pour exécuter un fichier .cup il faut :
o Télécharger JCup.jar
o Modifier la variable d’environnement PATH
o La commande d’exécution :
- Voici un extrait du fichier JCup:
Les instructions peuvent être soit une instruction de déclaration, affectation affichage,
entrée clavier …
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
30
La structure de déclaration
VAR : représente la chaine de caractère « VAR ».
DPT : représente la chaine « : ».
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
31
type : représente une chaine de caractère qui peut être soit « ENTIER », « REEL »,
« CARACTERE » et « BOOLEEN ».
La structure de l’affectation
ident : représente une variable déclarée.
EQUALS : représente la chaine « <- ».
expr_all : représente des expressions arithmétiques.
boolexp : représente des expressions booléennes.
3.2.3. Interfaçage du JFLEX et JCUP
JCup et JFlex sont prévus pour s’interfacer. Pour que Cup puisse exploiter un analyseur
lexical celui-ci doit satisfaire les conditions suivantes :
– la méthode d’analyse s’appelle next token et retourne des lexèmes de type java
cup.runtime.Symbol;
- Le symbole de fin de fichier s’appelle EOF ;
- La classe implémente l’interface java_cup.runtime.Scanner.
Les tokens qui sont reconnus par le fichier Flex modélisateur de l’analyse lexicale et dont
l’ordre n’est pas la priorité, ne peuvent être analysé qu’avec le fichier Cup qui modélise
l’analyse syntaxique, constituée de deux parties : Partie qui décrit les lexèmes terminaux et
non terminaux ainsi que les priorités et partie qui est dédiée à la définition de la grammaire.
Ainsi, en pratiquant une analyse ascendante, le parseur est en mesure de dire si le code qui lui est donné respecte la grammaire du langage.
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
32
3.3. Arbre syntaxique
Un arbre syntaxique abstrait (abstract syntax tree, ou AST, en anglais) est un arbre dont les
nœuds internes sont marqués par des opérateurs et dont les feuilles (ou nœuds externes)
représentent les opérandes de ces opérateurs. Autrement dit, généralement, une feuille est
une variable ou une constante.
Un arbre syntaxique abstrait est utilisé par un analyseur syntaxique comme un intermédiaire
entre un arbre d'analyse et une structure de données. On l'utilise comme la représentation
intermédiaire interne d'un programme informatique pendant qu'il est optimisé et à partir
duquel la génération de code est effectuée.
Un AST diffère d'un arbre d'analyse par l'omission des nœuds et des branches qui n'affectent
pas la sémantique d'un programme. Un exemple classique est l'omission des parenthèses de
groupement puisque, dans un AST, le groupement des opérandes est explicité par la
structure de l'arbre.
La création d'un arbre syntaxique abstrait pour un langage décrit par sa grammaire est
généralement facile : la plupart des règles de la grammaire créent un nouveau nœud dont
les branches sont les symboles de la règle. Les seules règles qui n'ajoutent pas de symboles à
l'arbre sont les règles de groupement, qui sont représentées par un nœud (parenthèses, par
exemple). Un analyseur syntaxique peut aussi créer un arbre complet, et faire une passe
ultérieure pour supprimer les nœuds non utilisés par l'arbre syntaxique abstrait.
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
33
Prenant l’exemple de :
Les trois étapes importantes pour générer le code ainsi que l’arbre syntaxique depuis cet
exemple sont :
- Analyse Lexical
- Analyse Syntaxique
- Générateur de code
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
34
3.4. Table de symboles
LSALGO utilise une table de symboles pour garder trace de la portée et des informations
concernant la liaison des noms.
De ce fait, chaque fois qu’un nom est rencontré dans le texte source, une recherche
s’effectue dans la table de symboles.
Cette table est modifiée si l’on rencontre une déclaration d’une nouvelle variable ou une
affectation d’une variable déjà déclarée.
Donc le mécanisme de la table de symboles doit nous permettre d’ajouter de nouvelles
entrées et de retrouver des entrées existantes de façon efficace.
La table de symboles est une classe qui contient les informations concernant la variable, ces
informations sont :
- Nom : le nom de la variable.
- Val : la valeur de la variable.
- Type : le type de la variable.
- Emp : l’emplacement de la variable dans la mémoire.
3.5. Grammaire
Instruction Syntaxe Déclaration VAR liste-
identifiant :{ENTIER|REEL|CARACTERE|BOOLEAN}
Affectation Id <- valeur
Incrémentation Décrémentation
Id++ Id--
Lecture Écriture
LIRE(liste identifiant ) ECRIRE(‘’chaine‘’ , valeur , ...)
Condition SI(condition) ALORS liste-instruction SI(condition) ALORS liste-instruction SINON liste-instruction
Boucle TANTQUE(condition) FAIRE liste-instruction FINTANTQUE REPETER TANTQUE(condition) liste-instruction FINREPETER POUR id ALLANT DE valeur A valeur [PAR PAS DE valeur] liste-instruction FINPOUR
SymTab
Nom String Val Object Type String Emp String
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
35
Sélection en choix SELON(valeur) CAS valeur1 :liste-instruction1 CAS valeur2 :liste-instruction2 ... [CAS SELON liste-instruction] FINSELON
Cast Id<- (ENTIER)valeur Id<- (REEL)valeur
Opération logique Valeur1[>|<|=|>=|<=| !=]valeur2 OU|ET ...
Fonctions primitives RACINE(valeur) Valeur1 MOD valeur2
3.6. Exécution
On a vu le rôle des analyseurs, Lexical et syntaxique (JFLEX et JCUP), et comment chacun
d’eux contribue pour la réalisation de l’arbre syntaxique mais que ce passe-t-il réellement
lors de l’exécution d’un code tapé sur l’interface de l’interpréteur ?
Quand un utilisateur clique sur le bouton « Exécuter », le code sera enregistré sous un fichier
texte qui sera interprété par le Lexer et le Parser. Juste après la création de l’arbre
syntaxique la méthode de l’exécution (interpret) sera exécutée sous forme de série d’appel.
La méthode appelée lors du clic sur le bouton « Exécuter ».
Génération de l’arbre syntaxique dont le nœud regroupant est Tprogram
Interprétation de l’arbre généré (tous les instructions du programme)
1
2
1
2
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
36
Prenant un exemple simple et suivant la démarche précédente pour mieux comprendre :
Après la génération de l’arbre syntaxique, la
méthode interpret sera appelé par l’objet instance
de Tprogram, la méthode interpret de Tprogram
n’est qu’un appel de la méthode interpret de l’objet
Tinstrlist qui était stocké lors de la génération de
l’arbre (Tprogram = DEBUT list_nstr FIN).
Ainsi de suite la méthode interpret de l’objet Tinstlist
est sous forme d’appels récursifs des objets Tinstrlist, qui à la fin de chaque appel, la
méthode interpret de l’objet Tinstr sera exécutée.
Voici le code de la méthode interpret de la class Tinstrlist.
NB : la class Tinstrlist possède deux attributs Tinstrlist et Tinstr.
La méthode interpret de Tinstr est abstraite donc, est grâce au polymorphisme, la méthode
interpret sera exécuter selon la nature de l’instruction Tinstr.
Pour la première instruction de déclaration (regarder l’exemple), c’est là où la vrai exécution
aura lieu à la fin de l’arbre, une liste d’identifiants sera stockée dans la table de symbole (un
autre appel de la méthode interpret de l’objet instance de la class Tlistident, puis de l’objet
instance de Tident).
La même chose pour la deuxième instruction d’affectation (NB : on est toujours au niveau de
Tinstrlist à l’appel récursive), cella contacte la table de symbole, si l’identifiant en question
est existant la valeur sera affecté sinon une exception sera levée.
Même concept pour les autres instructions jusqu’à ce que la liste d’instructions de l’objet
Tprogram sera NULL.
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
37
Voici un schéma qui résume les étapes de déroulement d’une instruction d’affectation :
3.7. Exécution pas-à-pas
Lors d’une exécution simple et après la génération de l’arbre syntaxique en suivant les
étapes expliquées auparavant, l’exécution des instructions aura lieu avec des arrêts
d’entrées /sorties ou de gestion des exceptions.
Pour le cas d’exécution pas-à-pas l’exécution va prendre une différente démarche ;
Prenant le même exemple de la partie exécution, quand l’utilisateur clique sur le bouton de
l’exécution pas-à-pas pour la première fois l’arbre syntaxique du code en général sera
générée et les instructions de l’arbre seront stockés sous forme de liste grâce à la méthode
en série (même principe que la méthode interpret) « prepareinterpret ».
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
38
Le code de génération de l’arbre et d’exécution de la méthode prepInterp() dans la méthode
appelé lors du clic sur le bouton d’exécution pas-à-pas :
Tout comme la méthode interpret, prepInterp de la classe Tprogram fait appel à prepInterp
de Tintrlist, cette dernière stock chaque instruction (par appel récursive) dans une liste
d’objet Tinstr, comme le montre le code suivant :
Dans la classe Tprogram la méthode prepInterp affecte la liste retournée par l’appel de
l’objet instr_list à la une liste d’instruction de la classe FirstForm pour pouvoir exécuter la
liste d’instruction par la suite lors d’autre click sur le bouton exécution pas-à-pas.
Toujours lors du premier click sur le bouton d’exécution pas-à-pas après la génération de
l’arbre, le stockage des instructions sous forme de liste d’objet Tinstr, la récupération de
cette liste au niveau de la classe FirstForm. La première instruction de la liste « suivant » sera
automatiquement exécutée (NB : chaque instruction exécutée sera supprimée de la liste
« suivant », donc l’instruction qui sera exécuter à chaque fois est à l’index 0 de la liste).
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
39
Dans l’exemple précédent il n’y a que des instructions simples non imbriquées (déclaration,
affectation..), le vrai défi de l’exécution pas-à-pas est l’exécution des instructions imbriquées
comme les conditions, les instructions répétitives comme les boucles POUR et TANTQUE,
encore pire ; les instructions répétitives contenants des instructions imbriquées comme les
conditions et les boucles etc. ...
Commençons par la logique suivi pour l’exécution pas-à-pas pour les instructions
conditionnelles, prenons l’exemple ci-dessous :
Supposons que l’utilisateur a entré le nombre « 120 », la première condition du premier bloc
SI-SINON n’est pas validé donc le bloc d’instruction (SI) ne sera pas exécuter c’est dans ce cas
le deuxième bloc (SINON) qui sera traité, même chose pour le deuxième bloc SI-SINON.
Pour qu’à la fin un seul bloc d’instruction sera exécuté.
Restons sur l’exemple du nombre « 120 », Pour l’exécution pas-à-pas quand l’utilisateur
clique sur le bouton, après l’instruction LIRE, l’instruction qui sera directement exécuter
c’est : ECRIRE(’’C’est de la vapeur ‘’).
Mais derrière cette exécution plusieurs appels récursive auront lieu au niveau de la
méthode « suivant » (la méthode appelé lors du clic sur le bouton d’exécution P-A-P).
En effet l’instruction exécutée au début (celle qui a été stocké lors de la génération de la liste
d’instruction « suivant ») est la suivante :
SI ... SINON SI ... SINON ... FINSI FINSI
Après l’exécution de l’instruction SI-SINON la liste « suivant » sera modifié :
- suppression de l’instruction SI-SINON général et ajout du bloc d’instruction SINON car
dans notre cas c’est le bloc SINON qui sera exécuté.
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
40
- la liste d’instruction « suivant » ne contiendra par la suite que la deuxième
instruction SI-SINON (en bleu).
Si l’instruction courante est une instance de la classe Tcondition, ce qui est le cas dans notre
exemple, un appel récursive aura lieu et la deuxième instruction sera exécuter.
Ainsi de suite l’instruction suivante est une condition, automatiquement l’instruction SI-
SINON sera supprimée et le bloc d’instruction validant la condition (dans notre cas SINON)
sera stocké dans la liste pour qu’il soit exécuter à son tour grâce à un autre appel récursive
(instruction exécuté à la fin : ECRIRE (’’C’est de la vapeur ‘’)).
L’imbrication est sans limite le plus important c’est que la première instruction du bloc qui
valide les conditions sera exécuter en un seul clique sur le bouton d’exécution pas-à-pas.
Le schéma suivante résume le fonctionnement du déroulement pas-à-pas pour les
instructions simples et imbriquées (conditions) :
NB : la suppression de l’instruction SI-SINON et l’ajout du bloc valide aura lieu avant
l’exécution de l’instruction suivante (précisément lors de l’appel de la méthode interpret de
Tcondition -sans entrer dans les détails du code-).
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
42
Même principe de récursivité pour les instructions répétitives sauf que cette fois les
instructions de type boucle ne seront pas supprimé pour des raisons (savoir le point de
rebouclage du bloc, tester la validité de la condition à chaque fois).
L’idée était que lors de l’exécution , le bloc Tinstrlist de l’instruction Twhile par exemple sera
ajouté avant l’instruction Twhile ,bien sûr si la condition est valide sinon la boucle sera
supprimé sans rien ajouté dans la liste « suivant » , ainsi chaque instruction du bloc sera
exécuter jusqu’à ce qu’on arrive à notre instruction Twhile qui signifie la fin de la boucle , si
la condition est toujours valide le bloc sera ajouté avant l’instruction Twhile et encore
exécuté.
Le rebouclage continuera jusqu’à ce que la condition n’est plus valide, c’est là où
l’instruction Twhile sera supprimée et l’exécution du reste de la liste « suivant » aura lieu.
NB : les instructions à l’intérieure de la boucle, même chose pour les conditions, sont
exécutées une par une après le clic sur le bouton pas-à-pas.
En combinant les deux logiques des conditions et des boucles l’exécution pas-à-pas est
généralisée ; En cas de boucle contenant des conditions le premier click « suivant »
permettra l’exécution de la première instruction du bloc valide de la première condition (en
cas où la première instruction dans le bloc interne de la boucle est une condition).
3.8. Gestion d'erreur
Tout programme en exécution peut être sujet à des erreurs pour lesquelles des stratégies de
détection et de réparation sont possibles. Ces erreurs ne sont pas des bugs mais des
conditions particulières (ou conditions exceptionnelles, ou exceptions) dans le déroulement
normal d'une partie d'un programme.
Par exemple, utilisation d’une variable non déclaré ou non initialisé;
LSALGO contient une classe MyError qui permet la gestion des erreurs.
Voici un tableau qui représente les codes des erreurs :
Code d’erreur Description 100 Une variable déjà déclarée.
101 Une variable non déclarée.
102 Une variable non initialisée.
103 Incompatibilité de type.
104 Caractère illégal.
105 Code vide.
106 Opérant invalide
107 Casting invalide.
108 Cas dupliqué.
109 Erreur de syntaxe.
Logiciel de simulation de déroulement des algorithmes
Partie II : Présentation du projet
43
Le programmeur doit considérer durant le développement tous les cas de figure relatifs à
l’exécution de son code, et en particulier les erreurs d’exécution pouvant survenir.
En traitant une erreur d’exécution, le développeur doit aussi s’assurer que le système repart
dans un état stable.
Ce travail est très fastidieux et il est fort probable que le développeur oublie de traiter
certains cas.
Prenons l’exemple suivant :
Dans le cas où la variable n’est pas déclarée, tenter d’exécuter le programme, ça va
provoquer une erreur.
Bien évidemment, il suffit au développeur de corriger ce problème en ajoutant une condition permettant de vérifier l’existence de la variable dans la table de symbole.
Logiciel de simulation de déroulement des algorithmes
Partie III : Simulation
45
I. Site web LSALGO « En cours de construction »
II. logiciel LSALGO Pour ce projet, il faut offrir à l'utilisateur une interface intuitive et complète. En effet, elle doit permettre de réagir rapidement…
Pour cela nous avons décidé d'étudier plus particulièrement les parties suivantes :
La première Form à afficher lors du lancement d’une instance de LSALGO est la suivante :
Voici l’interface graphique telle qu'elle est au moment de la rédaction de ce rapport. Il se peut qu’elle évolue d’ici le rendu du projet étant donné que certains composants n’ont pas encore été intégrés, faute de temps.
Logiciel de simulation de déroulement des algorithmes
Partie III : Simulation
46
1. Détails de l’interface
Actions sur les fichiers
Comme sur la plupart des logiciels, il faut cliquer sur le bouton "Nouveau Fichier...".
Voici la première barre d’outils :
Elle contient :
- : en cliquant sur ce bouton un nouveau fichier sera créé mais après avoir notifié
l’utilisateur si ce dernier veut enregistrer le code ou non, par ce JDialog suivant :
Logiciel de simulation de déroulement des algorithmes
Partie III : Simulation
47
- Si on clique sur oui, le JFileChooser s’affiche :
LSALGO a sa propre extension .algo comme s’est afficher dans la figure précédente.
Une fois le choix fait, une page vierge s'ouvrira afin que vous puissiez commencer à taper votre code. Cette action peut être aussi réalisée en cliquant sur le menu "Fichier" puis "Nouveau" et en sélectionnant le langage que vous désirez.
- Ouvrir : Ouverture d’un fichier existant, Il permet de parcourir les dossiers et de choisir un fichier à ouvrir dans le logiciel LSALGO, le type de fichier (extension) est toujours .algo.
Logiciel de simulation de déroulement des algorithmes
Partie III : Simulation
48
- Annuler et refaire : En cliquant sur le bouton "Annuler", tout
simplement. On peut ainsi réparer l'erreur commise. Si on clique sur "Annuler" par
inadvertance et que toutes les modifications ont disparu, cela n’est pas un souci. On
clique juste sur le bouton "Refaire" et tout rentrera dans l'ordre.
- Imprimer : Le bouton imprimer permet l’impression du code.
- Web : Ce bouton permet l’accès directement au site officiel du LSALGO.
- l’indentation : Ces deux boutons permettent l’indentation qui est un procédé de retrait de texte qui permet d'organiser et de rendre plus lisibles le code et ils sont accessibles par des shortcut : TAB et Shift-TAB.
- Zoom en avant et en arrière du code et restauration de la taille par défaut.
En cliquant sur "Edition" puis sur " Remplacer". Tapez alors le texte à chercher et, si besoin est, le texte par lequel le remplacer.
Le nombre de la chaine trouvée est affiché, ainsi que highlighting les chaines dans le code :
Logiciel de simulation de déroulement des algorithmes
Partie III : Simulation
49
LSALGO contient deux thèmes :
Le premier thème LIGHT est celui par défaut :
Logiciel de simulation de déroulement des algorithmes
Partie III : Simulation
50
Le deuxième thème AngyDragon :
Ajout de la numérotation des lignes en utilisant Document Listener du package javax.swing.event:
Localisation du curseur en utilisant Listener CaretUpdate, ça sert à positionner le curseur pour faciliter la recherche des erreurs:
Logiciel de simulation de déroulement des algorithmes
Partie III : Simulation
51
- Ces boutons servent à l’édition du code : Couper, copier, coller et supprimer.
- Le premier bouton permet l’exécution du code, le deuxième l’exécution pas-à-pas et le troisième l’arrêt du déroulement pas-à-pas.
Afin de faciliter l'exploitation du langage dans un environnement éducatif, LSALGO est doté
d'un système d'aide contextuel présentant la syntaxe du langage LSALGO sous une forme
pédagogiquement des exemples explicatifs et simples de différentes instructions.
Logiciel de simulation de déroulement des algorithmes
Partie III : Simulation
52
Avant-propos du logiciel LSALGO :
53
Problèmes rencontrés et perspectives
Le problème majeur rencontré lors de l'implémentation de l'interface est la localisation des
instructions à exécuter dans le déroulement pas-à-pas. Plusieurs idées nous sont venues à
l'esprit parmi elle la fonction d’auto-complétion.
Nous ne pensions pas passer autant de temps sur la conception de la grammaire, qui nous a
valu de recommencer plusieurs fois et de passer de nombreuses heures à chercher la bonne
méthode pour lever les ambiguïtés, sans en soulever d'autres.
Malgré ces difficultés, une fois que notre AST était prêt et pensé sans ambiguïté pour le
parcours, nous avons été agréablement surpris de l'efficacité d'un tel travail pour les
contrôles sémantiques, la génération du code, qui se font naturellement en respectant les
différentes étapes.
Durant la réalisation de notre interpréteur, nous avions dû faire face à l’obstacle du temps,
ce qui nous a valu de faire notre travail à moitié, sans qu’on ait pu introduire les notions
suivantes :
- Fonctions et procédures,
- Type riches : tableaux, pointeurs, enregistrements…
- Variables locales,
- Localisation des instructions à exécuter dans le déroulement pas-à-pas,
- Auto-complétion,
Mais malgré cet obstacle, nous avons des perspectives futures concernant notre projet et ce,
en travaillons sur les notions qu’on n’a pas pu réaliser à temps. Car même si nous n’avions
pas eu l’occasion de présenter notre interpréteur au complet durant cette période, nous
espérons pouvoir le finaliser prochainement.
54
Conclusion
Satisfaits de n'être pas devenus fous à l'issu de ce projet, celui-ci nous aura permis de
parfaitement comprendre la chaîne de compilation d'un code.
L'expérience était très intéressante, et nous a donné l'occasion de découvrir énormément de
problèmes liés notamment à l'analyse, qui n'étaient pas aussi évidents durant la partie
théorique.
Cette unité d’enseignement de développer un interpréteur a tout d’abord été l’occasion de
montrer nos capacités à apprendre rapidement de nouvelles façons de travailler dans le
monde de l’informatique, notamment sur des projets de groupe. Ainsi, le résultat produit est
plus qu’un développement personnel, c’est le fruit d’une collaboration.
D’autre part, ce travail nous a permis de regarder vers l’avenir : le travail en équipe dans nos
futures carrières professionnelles.
Finalement, cette expérience ne s’arrête pas une fois ce rapport rendu. En effet, le projet est terminé mais son utilisation dans le temps définira de nouveaux besoins, et ainsi peut-être d’autres étudiants/développeurs prendront-ils la relève pour ajouter des modules, de nouvelles fonctionnalités et ainsi assurer la pérennité de notre interpréteur.
55
Bibliographie et webographie
Bien entendu, le résultat de ce projet n’aurait pas été tel qu’il est sans des ressources et des aides extérieures ! Voici une liste non exhaustive de nos principales sources d’information.
SWING - Livre Les Cahiers du Programmeur – Edition EYROLLES – Emmanuel Puybaret - http://stackoverflow.com/questions/13681977/jcombobox-autocomplete JAVA 1.4 ET 5.0 - Livre Les Cahiers du Programmeur – Edition EYROLLES – Emmanuel Puybaret
- http://www.java2s.com/Tutorial/Java
- http://stackoverflow.com/
- https://community.oracle.com/
JFLEX -
JCUP -