Vous êtes sur la page 1sur 54

Soutenance de projet de fin d’études

Logiciel de simulation
de déroulement des algorithmes

Réalisé par :
HAJI Soukaina
OUICHOUL Chaimaa
CHACKCHAME FatimaEzzahra

Encadré par:
1
ANOUN Houda
Plan
 Introduction
• Présentation du projet
• Objectifs du projet
 L’interpréteur CSALGO-SIMULTOR
• Description du logiciel
• Différence entre compilateur et interpréteur
 Étapes de réalisation d’un compilateur/interpréteur
• Analyse des besoins
o Diagramme de cas d’utilisation
• Conception
o Héritage
o Polymorphisme
o Diagramme de classes
• Réalisation
o Outils utilisés
o Spécifications JFLEX et JCUP
o Arbre syntaxiques
o Tables de symboles
o Grammaire
o Exécution du code
o Exécution pas-à-pas
o Gestion d’erreur
 Simulation
 Site web
 Logiciel
 Conclusion
2
Introduction
3
Présentation du projet

CSALGO est un logiciel


permettant l’interprétation
et la simulation d’un code
algorithmique.

Un utilisateur édite un algorithme en pseudo-code à l’aide du


logiciel de simulation et ce, afin de simuler le déroulement d’un
algorithme en présentant l’état de la mémoire et les affichages sur
l’écran.

4
Objectifs du projet
• Interpréteur d’algorithmes ouvert à tout public.
• Facilité d’adaptation aux fonctionnalités du logiciel qui est destiné
en premier lieu aux étudiants débutants en programmation.
• Déroulement pas-à-pas et vulgarisation de la RAM
o Aider l’utilisateur à mieux assimiler le fonctionnement des programmes développés.
• Interface simple et riche de différents outils d’édition
o Faciliter la manipulation du code.
• La réalisation d’un site WEB
o plus d’accessibilité au logiciel avec divers contenu.

5
L’interpréteur CSALGO
6
Description du logiciel CSLAGO
• CSALGO est un interpréteur,

• Il permet le prototypage rapide des algorithmes,

• Il contient un langage pseudo code à syntaxe flexible,

• Il offre un environnement de développement d'algorithmes


simple et convivial,

7
Description du logiciel CSLAGO

Figure 1: pseudo code CSALGO

8
Différence entre compilateur et interpréteur

• Un compilateur est un programme informatique qui


transforme un code source écrit dans un langage de
programmation en un autre langage informatique .

9
Différence entre compilateur et interpréteur

Figure 2: Fonctionnement d’un


compilateur

10
Différence entre compilateur et interpréteur

• Un interpréteur, est un outil ayant pour tâche d'analyser, de


traduire et d'exécuter les programmes écrits dans un langage
informatique,

• L'interprétation repose sur l'exécution dynamique du


programme par un autre programme, plutôt que sur sa
conversion en un autre langage,

11
Différence entre compilateur et interpréteur

Figure 3 : Interprétation d’un


programme source

12
Étapes de réalisation du logiciel
13
• Voici un schéma qui résume les principales étapes qu’on a dû suivre
afin de réaliser CSALGO:

14
Analyse des besoins

• Le diagramme des cas d’utilisation est un diagramme UML


utilisé pour donner une vision globale du comportement
fonctionnel d'un système logiciel.

15
Diagramme de cas d’utilisation

• Voici le diagramme des cas d’utilisations qui va donner une vue globale du
comportement fonctionnel de notre application :

16
Conception

Le projet s’appuie sur différents concepts dont les


principaux sont :

• Héritage

• Polymorphisme

17
Héritage
• Une classe Java dérive toujours d’une autre classe, Object quand rien n’est spécifié. Pour
spécifier de quelle classe hérite une classe on utilise le mot-clé extends : 
class D extends B { . . . }

• La classe D dérive de la classe B. On dit que le classe B est la super classe, la classe de base,


ou la classe mère de la classe dérivée D, et que D dérive de B, ou que D est une sous-classe
de B.

18
Héritage
• Exemple de l'héritage dans le code source de CSALGO:
 

• La classe Tdeclar et Taffect hérite de la classe abstraite Tinstr, dont la méthode prepareInterp et
interpret sont redéfinis
19
Polymorphisme
• Le polymorphisme est un concept qui complète parfaitement celui de l'héritage .  

• Il permet de manipuler des objets sans vraiment connaître leur type.

20
Polymorphisme
• Exemple du polymorphisme dans le code source de CSALGO:

• La méthode interpret de la classe Tinstrlist 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...) :

21
Diagramme de classe
• Tprogram regroupe toutes
les instructions se trouvant entre
les deux étiquettes "DEBUT" et "FIN".

• Tinstrlist contient une liste d'instructions


(type Tinst) qui peut être soit
une déclaration(Tdeclar),
affectation (Taffect),
instruction de sélection
en choix (Tswitch) ...

22
Diagramme de classe

• Texp représente l'expression


de Cast, les identifiants,
les expressions booléennes ...

23
Diagramme de classe
• 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 ces derniers.

• MyError est une classe


qui permet la gestion
des erreurs.

24
Réalisation

25
Outils utilisés
• Langages de programmation

26
Outils utilisés
• Logiciels utilisés

27
Générateur d’analyseurs lexicaux JFLEX

• JFLEX est un générateur d’analyseurs lexicaux pour Java,

• Il génère des analyseurs lexicaux écrits en Java (Lexer.java).

• 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(JCUP).

28
Générateur d’analyseurs lexicaux JFLEX

Figure 4 : Fonctionnement du JFLEX

29
Générateur d’analyseurs lexicaux JFLEX

Figure 5 : extrait du fichier JFLEX


30
Générateur d’analyseurs syntaxiques JCUP

• JCUP est un générateur d’analyseurs syntaxiques à partir de


spécifications.

• 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 JFlex.


Un fichier de spécification pour JCUP décrit une grammaire algébrique
éventuellement décorée par des actions sémantiques (analyse sémantique).

31
Générateur d’analyseurs syntaxiques JCUP

Figure 6 : fonctionnement du JCUP

32
Générateur d’analyseurs syntaxiques JCUP

Figure 7 : les terminaux et


non terminaux

33
Générateur d’analyseurs syntaxiques JCUP

Figure 8 : extrait du fichier JCUP

34
Interfaçage de JFLEX et JCUP

Figure 9 : interfaçage du
JFLEX et JCUP

35
Arbre syntaxique

• Un arbre abstrait constitue une interface plus naturelle entre l’analyse syntaxique et
l’analyse sémantique, elle ne garde de la structure syntaxique que les parties
nécessaires à l’analyse sémantique et à la production de code.

• L’arbre abstrait est construit lors de l’analyse syntaxique, en associant à toute règle
de grammaire une action sémantique.

36
Arbre syntaxique

37
Grammaire
Instruction Syntaxe
Déclaration VAR liste-identifiant :{ENTIER|REEL|CARACTERE|BOOLEAN}
Affectation Id <- valeur
Incrémentation Id++
Décrémentation Id--
Lecture LIRE(liste identifiant )
Écriture ECRIRE(‘’chaine‘’ , valeur , ...)
Condition SI(condition) ALORS liste-instruction FINSI
SI(condition) ALORS liste-instruction SINON liste-instruction FINSI
Boucle TANTQUE(condition) liste-instruction FINTANTQUE
 
REPETER TANTQUE(condition) liste-instruction FINREPETER
 
POUR id ALLANT DE valeur A valeur [PAR PAS DE valeur]
liste-instruction FINPOUR
Sélection en choix SELON(valeur)
CAS valeur1 :liste-instruction1
CAS valeur2 :liste-instruction2
...
[CAS SINON liste-instruction]
FINSELON
Cast Id<- (ENTIER)valeur
Id<- (REEL)valeur
Opération logique Valeur1[>|<|=|>=|<=| !=]valeur2 OU|ET ...
Fonctions primitives RACINE(valeur)
Valeur1 MOD valeur2

38
Table de symboles

• Une table de symboles est une centralisation des


informations rattachées aux  identificateurs
d'un programme informatique,

SymTab
Nom String
Val Object
Type String
Emp String

39
Exécution de la totalité du code
• 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 ».

40
Exécution de la totalité du code
• Un schéma qui résume les étapes de déroulement d’une instruction d’affectation :

41
Exécution pas-à-pas
• Pour le cas d’exécution pas-à-pas l’exécution va prendre une différente démarche ;

• 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 :

42
Exécution pas-à-pas
• La méthode prepInterp ?

 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 :

43
Exécution pas-à-pas
• La liste stockée dans la classe Tinstrlist servera à quoi ?

 Dans la classe Tprogram la méthode prepInterp affecte la liste retournée par


l’appel de l’objet instr_list à une liste d’instruction de la classe FirstForm pour
pouvoir exécuter la liste d’instruction par la suite lors d’un autre click sur le bouton
exécution pas-à-pas.

44
Exécution pas-à-pas

Notes :

• Toujours lors de la premiere 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 .

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

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

45
Exécution pas-à-pas
Le fonctionnement des instructions imbriqués (condition) :
• Prenant l’exemple suivant :
• Supposons que l’utilisateur a entré
le 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 :

46
Exécution pas-à-pas

• 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é :


o 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é.
o la liste d’instruction « suivant » ne contiendra par la suite que la deuxième instruction SI-SINON (en
bleu).

47
Exécution pas-à-pas
• Un schéma qui résume les étapes de déroulement d’une instruction simple ou imbriqué(conditon) :

48
Exécution pas-à-pas
• Et les instructions répétitives?

 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 :
o Savoir le point de rebouclage du bloc.
o Tester la validité de la condition à chaque fois

• 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).

49
Gestion d’erreur
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.

Figure 10 : Codes des 108 Cas dupliqué.

erreurs 109 Erreur de syntaxe.

50
Simulation
51
Conclusion
52
Merci pour votre attention _

53
54

Vous aimerez peut-être aussi