IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Design Patterns Discussion :

Interpréteur de source C


Sujet :

Design Patterns

  1. #1
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 80
    Points : 43
    Points
    43
    Par défaut Interpréteur de source C
    Bonjour,

    Je voulais de l'aide pour une question que je n'arrive pas à traiter.
    Voici le libellé.
    création d'un interpréteur pour un langage lambda

    L'objectif est de créer un interpréteur pouvant s'appliquer à tout type de langage impératif de type C. Pour cela, nous allons considérer deux grands types de données : les instructions et les expressions.

    Dans le cadre de ce projet, nous ne nous intéressons pas à la partie compilation (analyse des fichiers source) mais à la partie représentation interne d'un programme pour l'interpréteur. L'analyseur s'occupera de lire le code source puis, à l'aide de fabriques (voir la deuxième partie du sujet), générera une représentation interne du programme analysé. Cette représentation interne sera créée sous la forme d'un ensemble d'instances des classes définies pour le stockage interne du programme (voir la première partie du sujet).
    Et je dois proposer une modélisation selon ou plusieurs hiérarchies de classes pour mettre en œuvre cet interpréteur.

    Franchement je ne sais pas par où commencer!

    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    la question à résoudre est de chercher les classes permettant la représentation interne du programme sachant qu'il est de type impératif de type C

    et que contient un tel programme ?
    • des déclarations de variable globale (peut être hors sujet dans le cas présent)
    • mais surtout des fonctions


    et qu'est-ce qu'une fonction ?
    • un nom
    • un profile (type rendu, type et nom des paramètres)
    • les instructions du corps


    et qu'est-ce qu'une instruction ?
    • une structure de contrôle (return, if, while ...) avec les instructions et expression associées
    • une expression (y compris les affectations)


    et qu'est-ce qu'une expression ?
    • une constante
    • une variable
    • l'appel d'une opération (les arguments sont des expressions)
    • l'appel d'un opérateur (les arguments sont des expressions), ce qui peut en interne ne pas être différentié de l'appel d'une opération, cette dernière étant juste builtin


    etc ...

    il faut donc faire les classes correspondantes, et en permettant bien-sûr l'exécution

    par exemple (je n'ai as mis les constructeurs, type d'une valeur etc) un if c'est juste cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class If implements Instruction {
      public void exec() {
        if (! test.eval().isZero())
          iftrue.exec();
        else
          iffalse.exec();
      }
      
      private Expression test;
      private Sequence iftrue;
      private Sequence iffalse;
    }
    avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    interface Instruction {
      public void exec();
    }
    
    abstract class Expression implements Instruction {
      public void exec() {
        eval();
      }
      
      public abstract Value eval();
    }
    
    interface Value {
      public boolean isZero();
    }
    
    class Sequence implements Instruction {
      public void exec() {
        int index;
    
        for (index = 0; index != instrs.length; index += 1)
          instrs[index].exec();
      }
    
      private Instruction[] instrs;
    }
    note : j'ai séparé Instruction et Expression, mais à la rigueur en permettant à une Value de représenter void la classe Instruction disparait

    c'est donc assez facile et surtout amusant à faire
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 80
    Points : 43
    Points
    43
    Par défaut
    Merci.
    Donc si je comprends bien je dois faire une classe boucle, conditionnelle, affectation, bloc d'instruction, entrée/sotie, les appels de fonctions ........ qui vont implémenter l'interface instruction.

  4. #4
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Je te conseille de regarder le design pattern Interpreteur et Chaine de Responsabilité
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

Discussions similaires

  1. [C++][Source] Interpréteur d'expression mathématique
    Par Gabrielly dans le forum Contribuez
    Réponses: 3
    Dernier message: 03/03/2009, 15h46
  2. Source Safe -> VC++
    Par Emilio dans le forum MFC
    Réponses: 7
    Dernier message: 07/11/2002, 15h57
  3. Outil de reformatage d'un source Pascal
    Par HRS dans le forum Pascal
    Réponses: 7
    Dernier message: 21/10/2002, 14h55
  4. mp3 et source
    Par davlefou dans le forum C
    Réponses: 2
    Dernier message: 18/10/2002, 15h01
  5. Créer un interpréteur de langage inspiré du Basic
    Par Picasso dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 11/05/2002, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo