Analyse sytaxique orientée objet

Analyse sytaxique orientée objet - C++ - Programmation

Marsh Posté le 11-02-2006 à 13:58:25    

Dans le cadre d'un projet de C++ il est demandé d'analyser une ligne de commandes entrée par l'utilisateur et, si elle n'est pas juste, de préciser à cet utilisateur quelles erreurs il a fait.
Le prof nous a bien précisé de faire ca avec la "philosophie orienté objet" mais je vois pas trop comment faire :heink:  
 
Voila tous les cas possibles :  
 
-Pour la creation
create triangle  nomtriangle  couleur  coord1 coord2 coord3
create rond   nomcarre  couleur  coord1 coord2
create rectangle  nomrectangle couleur  coord1 coord2
create parralelogramme  couleur  coord1   coord2 coord3 coord4
 
-Pour l'affichage  
displayall
 
-Pour placer derriere/devant
put back nomfigure
put front  nomfigure
 
-Changer de groupe/sortir du groupe :
move nomfigure groupe
move nomfigure
 
Je pensais mettre un classe de base Analyse qui contiendrait :
 
-la chaine entrée par l'utilisateur
-une méthode pour voir si une figure existe déjà  
 
et faire des classes heritees de cette classe de base genre
 
-CreateTriangle qui aurait des methodes en plus pour vérifier qu'il y a bien 3 parametres et qu'ils ne forment pas une ligne (tous la meme ordonnee/abscisse), que la couleur existe.
-CreateCarre qui verifierait que le carré formé n'est pas une ligne
etc...
 
Problème : je dois analyser les 2 premiers mots par qui ? La classe Analyse ?  
Qui recupere le resultat de cet premiere analyse et instancie la classe CreateTriangle ? La classe Analyse ou je fais ca dans le .cpp ?
 
Si vous avez de meilleures idées merci de m'en faire part [:cupra] sachant que le prof insiste bien sur la notion d'orienté objet (bon en C j'aurais fait ca en 30 secondes mais bon [:mcwimpy4]
 
Merci d'avance


Message édité par vouzico le 14-02-2006 à 16:05:34
Reply

Marsh Posté le 11-02-2006 à 13:58:25   

Reply

Marsh Posté le 13-02-2006 à 09:28:24    

Salut,
 
Moi je te conseillerais de faire :
 
class Erreur; //Pour gérer toutes les erreurs (tu géres cette class selon l'analyse que tu vas faire, descendante, ascendante, etc...)
class Analyse; //Tu prends une phrase rentrer par l'utilisateur, et tu retournes soit un token, soit un caractere et c tout
 
class Creation : public Analyse; //Dedans tu implements ta grammaire, etc... pour les autres
class Affichage : public Analyse;
class Placer : public Analyse;
class Changer : public Analyse;

Reply

Marsh Posté le 14-02-2006 à 15:39:50    

merci ca me parait un bon modèle d'autant plus qu'après avoir posé la question j'étais pas loin de le trouver tout seul :)
 
Cependant un autre truc :
j'ai une série de fonctions qui peuvent aider à corriger l'orthographe d'un mot par rapport à un modele (elles se trouvent dans la classe Analyse) elles seront utilisées par toutes les classes filles (Creation, Placer, Changer, etc...)
 
Mon idée était donc de faire un constructeur pour Creation qui enverrait un tableau de chaines de caracteres (les modeles qui sont propres à chaque classe fille) et les comparer un par un au mot rentré par l'utilisateur (dans la classe analyse). Cette dernière renverrait le mot correct à la classe Creation par exemple (avec une methode char* getResult()).  
Sachant que dans d'autre classes il y a d'autres vérifications que juste l'orthographe du premier mot (ca justifie l'héritage)
 
Seulement je ne sais pas comment passer le tableau de caractères propre à chaque Classe. En gros :
 
Dans mon code :  
=>analyse = correction
=> Creation = analyse
 
 

Code :
  1. #include "correction.h"
  2. class Analyse : public Correction
  3. {
  4. private :
  5.  char *chainebase;
  6.  char **tab;
  7. public :
  8. //////////////////////////////////////// CONSTRUCTEUR \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  9.    
  10. Analyse::Analyse (char *chaine) :
  11.       Correction (chainebase, tab) // => Le problème est là : comment passer le bon tableau {"create", "displayall", "move", "put"} par exemple en paramètre pour faire une instance de Correction
  12.  {
  13.   int i=0, j=0;
  14.   while(chaine[i]!=' ')
  15.   {
  16.    i++;
  17.   }
  18.   chainebase = new char [i];
  19.   while(j!=i)
  20.   {
  21.    chainebase[j]=chaine[i];
  22.    j++;
  23.   }
  24.  }


Message édité par vouzico le 14-02-2006 à 16:04:50
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed