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

Java Discussion :

[Conception] Arbre syntaxique


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 254
    Par défaut [Conception] Arbre syntaxique
    Bonjour, je voudrais savoir comment est-ce qu'on construit un arbre syntaxique à partir d'un analyseur syntaxique.

    Grosso modo mon analyseur teste la première instruction et voit si la grammaire est correcte, puis relance le test pour l'instruction suivante jusqu'à la fin du fichier.

    Mon arbre est de cette structure :

    arbre :
    String/Int
    / \
    arbre1 arbre2

    Pour l'instant c'est un arbre binaire. En fait cela m'arrangerais s'il pouvait avoir n branches au lieu de 2 mais je sais pas comment faire!

    Donc ma question est : comment est ce que je peux implémenter ca dans mon analyseur syntaxique? Je pense qu'il faudrait construire un bout d'arbre à chaque instruction, mais la difficulté réside dans le fait de coller le bout qu'on vient de faire l'arbre général.

    merci de vos réponses, je sais pas si je me suis bien exprimé alors n'hésitez pas à me demander des précisions...

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Je n'ai pas trop compris ton problème, mais regarde du côté du package javax.swing.tree, peut-être trouveras-tu quelque chose d'adapté à ton cas.

  3. #3
    Membre émérite
    Avatar de thecaptain
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Décembre 2003
    Messages
    919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Décembre 2003
    Messages : 919
    Par défaut
    Salut,

    à mon avis dans ton cas c'est plutot le principe de la récursivité qui vient s'appliquer non ? A moins que pour toi "abre synthaxique" est l'arbres des possibilités (du genre, si je viens de recontrer un void, les prochaines instructions possibles sont : xxxs) ?

    @++

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2005
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Philippines

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2005
    Messages : 244
    Par défaut
    Les arbres binaires ne servent qu'à faire des recherche rapide en cherchant dans des intervalles de plus en plus petits ( ou trier des données ). Dans cette optique, il faut se dire que chaque branche de ton arbre est une partie de l'interval. Donc si tu veux faire un arbre à n branches dans ce cas de figure sa sert a rien (d'ailleurs ce genre d'arbre c'est de type 2^n pour l'indexation de données à n dimensions)

    Moi non plus je n'ai pas tres bien compris ce que tu souhaite faire...

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 254
    Par défaut
    Ben en fait c'est simple, je dois écrire un programme en java qui est censé transformer du Pascal en C.

    J'ai fait un analyseur lexical et un analyseur syntaxique. Maintenant dans l'analyseur syntaxique je dois construire un arbre binaire qui correspond à la représentation de mon programme en Pascal.

    Ensuite je dois le parcourir et l'afficher en langage C.

    Mon analyseur syntaxique parcourt la première instruction de mon programme en Pascal, puis il fait des tests pour différent type d'instruction, ex : BEGIN-END, WHILE, FOR, IF-THEN-ELSE, etc et vérifie si la grammaire est correcte.
    Ca c'est fait. Maintenant je n'ai absolument aucune idée de comment implémenter l'arbre binaire. Effectivement c'est une question de récursivité.

  6. #6
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    A toi de définir pour chaque instruction Pascal comment tu la représentes sous forme d'arbre binaire. Par exemple IF-THEN-ELSE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                   IF
                /     \
    expression         \   
    booléenne           \
                        THEN
                      /      \
             instructions   ELSE
                               /
                        instructions
    La construction de l'arbre se fait naturellement à chaque étape de ton analyseur syntaxique. Si tu implémentes une analyse de type top-down, à chaque fois qu'une règle syntaxique est reconnue, tu crées un noeud de l'arbre en positionnant ses fils gauche et droit, et tu renvoies le noeud.
    Pour les expressions (somme de termes) c'est qq chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public Node expression() {
      Node expression = terme();
     
      Token token = getToken();
      while (token.isOperateur('+') || token.isOperateur('-')) {
         Node terme = terme();
         expression = new Node(expression, token, terme);
         token = getToken();
      }
     
      return expression;
    }
    Cette méthode construit le sous-arbre d'une expression.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 254
    Par défaut
    ok merci herve! c sympa de m'avoir répondu!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/12/2006, 10h13
  2. [Débutant][Conception] Arbre en JAVA
    Par moutey dans le forum Général Java
    Réponses: 5
    Dernier message: 14/03/2006, 13h27
  3. java et la compilation (arbre syntaxique )
    Par loupblanc dans le forum Général Java
    Réponses: 2
    Dernier message: 03/02/2006, 13h59
  4. [Conception] Analyseur Syntaxique
    Par guu dans le forum Général Java
    Réponses: 7
    Dernier message: 03/01/2006, 12h28
  5. [conception] arbre de calculs
    Par Jidévé dans le forum Modélisation
    Réponses: 7
    Dernier message: 10/10/2005, 17h02

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