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