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

Générateurs de compilateur Discussion :

[Lex/Yacc] Aide traduction des structures de contrôle


Sujet :

Générateurs de compilateur

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Points : 27
    Points
    27
    Par défaut [Lex/Yacc] Aide traduction des structures de contrôle
    Bonjour,
    Je dois réaliser un compilateur Fortran vers Assembleur MIPS à l'aide des outils lex/yacc
    J'ai pour l'instant avancé sans grande difficulté mais il me reste à présent à traiter la traduction des structures de controle (if, while, etc)....

    Sur le net j'ai pu trouver une doc anglaise expliquant plus ou moins la meme chose que ce que j'avais vu en cours à savoir :
    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
     
    E -> E(1) AND E(2) { complete(E(1).true, M.quad);
                         E.false = concat(E(1).fale, E(2).false);
                         E.true = E(2).true; }
      |  E(1) OR E(2) { ..... }
      |  not E(1)  { E.true = E(1).false;
                     E.false = E(1).true; }
      | id(1) oprel id(2) { E.true = crelist(nextquad);
                            E.false = crelist(nextquad+1);
                            GENCODE(if id(1).ptr oprel id(2).ptr goto ?);
                            GENCODE(goto ?);
                          }
      | .......
     
    S-> if E then M S(1) { complete(E.true, M.quad);
                           S.next = concat(E.false, S(1).next);
                         }  
    M -> /* vide */   { M.quad = nextquad; }
    Avec .true/.false correspond à tous les quad d'etiquette true/false qui devront etre complétés le moment venu avec la valeur de l'etiquette du quad à executer...
    .next attribut de type liste de quad


    nextquad : contient la valeur de l'etiquette du prochain quad a generer...

    crelist(i) : cree la liste contenant l'etiquette i
    concat(p1, p2) : concatene les 2 listes p1 et p2
    complete(p, i) : complete tous les quad de la liste p avec l'etiquette i

    Ex d'utilisation :
    P<Q or R<S and T<U

    100: if P<Q goto T
    101: goto 102
    102: if R<S goto 104
    103: goto F
    104: if T<U goto T
    105: goto F

    --> En gras ce sont les codes completes ulterieurement
    --> En bleu ceux qui ne sont pas completes

    Mon probleme est que je n'ai aucune idee de comment completer au fur et a mesure le code genere....

    Est ce que quelqu'un aurait une piste à me donner car cela fait un petit moment que je cherche sans vraiment trouver de resultat concluant.....


    Merci pour vos reponses

  2. #2
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mars 2003
    Messages
    57
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2003
    Messages : 57
    Points : 27
    Points
    27
    Par défaut
    Personne n'as une idee ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Je remonte un ancien post désolé.

    J'aimerais avoir des tutoriels la dessus, car je dois travailler sur un projet de ce type (Lex/Yacc avec code MIPS) et je n'ai pas vraiment d'exemples a suivre.

    Je n'ai pas trouvé sur google des exemples de codes ou des tutoriels pour me permettre de faire mon projet.

    Si vous avez des sources ou liens a me transmettre je suis preneur

    Merci

Discussions similaires

  1. Créer des noms de WinForm dans une structure de contrôle ?
    Par Feroen dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/08/2007, 08h12
  2. [Lex & Yacc] Gestion des ensembles d'entiers
    Par innosang dans le forum Générateurs de compilateur
    Réponses: 7
    Dernier message: 28/11/2005, 19h26
  3. Réponses: 9
    Dernier message: 07/10/2005, 16h47
  4. Modification à la chaine des noms de contrôle
    Par dde78 dans le forum Access
    Réponses: 3
    Dernier message: 29/09/2005, 16h24

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