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

Caml Discussion :

[Caml] Comment faire un compilateur PASCAL


Sujet :

Caml

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [Caml] Comment faire un compilateur PASCAL
    Bonjour,
    Voilà j'aurais besoin de votre aide, j'ai comme projet de faire un compilateur d'un langage pascal simplifié qui sera réalisé en caml. Est ce que quelqu'un pourrait m'expliquer les étapes pour faire ce compilateur ?
    Aussi que veut dire le message d'erreur "24 shift/reduce conflicts" quand j'exécute ocamlyacc parser.mly ?

    merci d'avance pour votre aide
      0  0

  2. #2
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    salut !
    24 shift/reduce conflicts
    Ca c'est une ambiguité que le parser ne sait pas lever : il existe deux possibilité pour appliquer des règles de réduction de la grammaire.

    Je ne suis pas un spécialiste de compilation, mais tu veux faire un compilateur qui compile du PASCAL en langage machine ? Ou tu veux écrire un interpreteur ?

    ++
    En premier lieu, utilisez un moteur de recherche.
    En second lieu, postez sur le forum adéquat !
      0  0

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    c'est pour faire un compilateur en langage pseudo machine,
    le compilateur doit compiler le prog pascal et le transcrire dans une sorte de langage assembleur. L'interpréteur du langage machine nous est fourni.

    ensuite , je ne vois pas comment résoudre ce problème d'ambiguïtés,
    du moins j'en vois aucune dans la grammaire

    merci !
      0  0

  4. #4
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    Bon je sais pas si jvais pouvoir faire grand chose, mais poste la grammaire, on sait jamais

    http://www.pps.jussieu.fr/~dicosmo/C...pilation/9900/, il y a des cours qui utilisent OcamlYacc et OcamlLex

    Précision : shift/reduce conflit, c'est quand l'analyseur ne sait pas s'il faut faire une réduction ou un décalage sur un symbole.
    En premier lieu, utilisez un moteur de recherche.
    En second lieu, postez sur le forum adéquat !
      0  0

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    merci , ça m'a permi d'enlever 12 ambiguïtés mais il m'en reste encore 12
    mais là je vois pas !

    >>> output du ocamlyacc -v parser.mly
    --------------------------------------------------------------
    71: shift/reduce conflict (shift 72, reduce 18) on ADD
    71: shift/reduce conflict (shift 73, reduce 18) on SUB
    71: shift/reduce conflict (shift 74, reduce 18) on MUL
    71: shift/reduce conflict (shift 75, reduce 18) on DIV
    71: shift/reduce conflict (shift 76, reduce 18) on LEQ
    71: shift/reduce conflict (shift 77, reduce 18) on LES
    71: shift/reduce conflict (shift 78, reduce 18) on GRT
    71: shift/reduce conflict (shift 79, reduce 18) on GEQ
    71: shift/reduce conflict (shift 80, reduce 18) on EQ
    71: shift/reduce conflict (shift 81, reduce 18) on NEQ
    71: shift/reduce conflict (shift 82, reduce 18) on AND
    71: shift/reduce conflict (shift 83, reduce 18) on OR
    state 71
    expr : expr . ADD expr (6)
    expr : expr . SUB expr (7)
    expr : expr . MUL expr (8)
    expr : expr . DIV expr (9)
    expr : expr . LEQ expr (10)
    expr : expr . LES expr (11)
    expr : expr . GRT expr (12)
    expr : expr . GEQ expr (13)
    expr : expr . EQ expr (14)
    expr : expr . NEQ expr (15)
    expr : expr . AND expr (16)
    expr : expr . OR expr (17)
    expr : unop expr . (18)

    ADD shift 72
    SUB shift 73
    MUL shift 74
    DIV shift 75
    LEQ shift 76
    LES shift 77
    GRT shift 78
    GEQ shift 79
    EQ shift 80
    NEQ shift 81
    AND shift 82
    OR shift 83
    PVIRG reduce 18
    VIRG reduce 18
    RBRA reduce 18
    PT reduce 18
    RPAR reduce 18
    END reduce 18
    THEN reduce 18
    ELSE reduce 18
    DO reduce 18
    --------------------------------------------------------------
      0  0

  6. #6
    Membre actif Avatar de Steki-kun
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 222
    Points : 281
    Points
    281
    Par défaut
    La réponse arrive sûrement bien tard, mais je viens de tomber sur le thread par hasard et comme il est pas marqué Résolu... ;-) Peut être tu as fini la partie grammaire mais tu es toujours sur autre chose, alors tu peux regarder cette page du cours de compil à l'X

    http://www.enseignement.polytechniqu...ottier/compil/

    où le but est exactement de faire un compilo Pascal en Caml, toutes les étapes y sont détaillées et le code y est, tu trouveras tout ce qui est nécessaire. Et sinon, c'est l'occasion de découvrir une alternative à ocamllex/yacc, qui s'appelle Menhir !
    I'm the kind of guy that until it happens, I won't worry about it. - R.H. RoY05, MVP06
      0  0

  7. #7
    Membre éprouvé
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Points : 1 284
    Points
    1 284
    Par défaut
    Tu n'as vraissemblablement pas utilisé les priorités des opérateurs : il est possible avec ocamlyacc d'associer une priorioté et une associativité à chaque symbole terminal. Je te conseille d'ajouter celà dans la partie déclaration, juste après les %token, et dans cet ordre strictement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    %nonassoc AND, OR
    %nonassoc LEQ, LES, GEQ, GRT, EQ, NEQ
    %left ADD, SUB
    %left MUL, DIV
    Le plus simple serait que tu postes toute la grammaire sous forme de fichier attaché, si celle-ci n'est pas très grosse : je connais bien ocamlyacc et ocamllex, je pourrais y jetter un coup d'oeil. Tu peux aussi utiliser la directive %prec pour forcer la priorité et l'associativité d'une règle ou d'un symbole terminal : c'est très utile pour lever les conflits, entre autres pour l'opérateur moins unaire.

    Les cours sur les grammaires se focalisent trop sur le fonctionnement d'un analyseur syntaxique : je pense que c'est réellement un tort, car il existe une grande différence entre écrire une grammaire sans conflits et savoir comment marche l'analyseur... surtout que tu n'as pas réellement besoin de connaître les détails du fonctionnement pour lever les conflits : ça c'est l'expérience qui te l'apprend et le nombre de jours passés à te casser les dents sur l'écriture de grammaires.

    Si tu as une autre question...
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.
      0  0

Discussions similaires

  1. [Outils et compilateurs] Outils de développement et compilateurs Pascal : où les trouver, comment participer ?
    Par Alcatîz dans le forum Contribuez
    Réponses: 0
    Dernier message: 03/04/2013, 10h56
  2. comment faire evoluer ma base vers interbase6
    Par toure32 dans le forum InterBase
    Réponses: 5
    Dernier message: 23/10/2002, 10h59
  3. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  4. Comment faire pour mettre l'ecran en veille ?
    Par March' dans le forum MFC
    Réponses: 6
    Dernier message: 29/08/2002, 14h25
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

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