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

Algorithmes et structures de données Discussion :

Algorithme pour générer du code assembleur.


Sujet :

Algorithmes et structures de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Algorithme pour générer du code assembleur.
    Bonjour,

    Je travaille actuellement sur un projet qui consiste à créer un compilateur simplifié. Pour se faire nous avons utilisé :
    _Lex pour la partie lexical.
    _Yacc pour la partie grammaire.

    Nous avons également :
    _Une table des symboles qui contient les variables, si elles sont globales ou non, les paramètres si c'est une fonction...
    _Un arbre du programme C qui est généré.

    Notre arbre fonctionne correctement tel que nous l'attendons.

    Je voudrais simplement savoir si on s'y prend correctement pour la génération de code assembleur, car nous n'avons jamais travaillé sur de telles choses, et je me suis peut-être fourvoyé dans ce que j'ai pensé.

    A partir de l'arbre et de la table des symboles, on appelle la méthode générerProg qui appelle les autres fonctions jusqu'à tout générer de cette façon :

    genererProg()
    ------> Enregistrement des variables globales depuis la table des symboles
    ------> Lancement de la méthode genererFonction()
    ------------> Lancement de la méthode genererDeclaration()
    ------------> Lancement de la méthode genererInstruction()
    ------------------> Lancement de la méthode genererAffectation()
    ------------------> Lancement de la méthode genererAppelFonction()
    ------------------> Lancement de la méthode genererReturn()

    ------------------> Lancement de la méthode genererCond()
    ------------------> Lancement de la méthode genererWhile()

    Les deux dernières méthode pouvant lancer d'autres méthodes (boucles imbriquées ect...). Et pas d'ordre pour les instructions.

    Par contre on a défini que les déclarations se trouvaient forcément avant les instructions sinon ça ne fonctionne pas.

    Est-ce que cet algo est bancal ou non ?

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    C'est un bon début.

    Généralement on définit une structure "bloc de code":
    Code bloc : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Début de bloc
      déclarations (optionnel)
      instructions (optionnel) (peuvent contenir un bloc en interne)
    Fin de bloc

    Et, du coup, on définit que certaines instructions ou déclarations contiennent un bloc
    • while ( condition ) BLOC
    • if (conditon) BLOC
    • function name(type name,...) BLOC

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    C'est un bon début.

    Généralement on définit une structure "bloc de code":
    Code bloc : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Début de bloc
      déclarations (optionnel)
      instructions (optionnel) (peuvent contenir un bloc en interne)
    Fin de bloc

    Et, du coup, on définit que certaines instructions ou déclarations contiennent un bloc
    • while ( condition ) BLOC
    • if (conditon) BLOC
    • function name(type name,...) BLOC
    Merci, je vais donc continuer dans cette voie, et pis euh je pense que je posterai dans la rubrique ASM pour un peu d'aide

  4. #4
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    as-tu au moins pensé à regarder les algos de coloration ?
    ça te sera plus qu'utile quand tu devras déterminer quelle variable mettre dans quel registre

    en outre, passer ton AST en forme SSA me semblerait pertinent, car cette forme a été construite pour simplifier nombre d'algorithmes utilisés dans les middle-end et back-end de compilateurs

Discussions similaires

  1. Algorithme pour générer des matrices
    Par senacle dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 13/12/2007, 15h32
  2. Réponses: 24
    Dernier message: 29/09/2006, 18h36
  3. Quel outil UML (industriel) pour générer du code C# ?
    Par matsri2003 dans le forum Outils
    Réponses: 3
    Dernier message: 17/01/2005, 14h45
  4. Algorithme pour chiffres significatifs en Assembleur
    Par lutin2003 dans le forum Assembleur
    Réponses: 5
    Dernier message: 09/09/2004, 11h47

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