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 :

questions sur ocamlyacc (et peut-être ocamllex)


Sujet :

Caml

  1. #1
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut questions sur ocamlyacc (et peut-être ocamllex)
    Je viens de me faire un parser.
    Je voulais me faire des messages d'informations pour afficher uniquement lorsqu'une variable debug était vrai. Ces messages étaient dans le parser. J'avais donc utilisé l'entête du fichier .mly qui d'après la documentation permet de mettre du code arbitraire. Or il se trouve qu'il n'a pas apprécié mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    let debug = false ;;
    let msg m = if (debug) then print_endline m else ignore m;;
    Ne peut-on pas mettre n'importe quoi finalement ?
    J'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    make inconsistent assumptions over implementation Ebs_parser_rules
    Si je le met dans un autre fichier (.ml) que j'ouvre dans l'entête (avec un open) tout va bien.

    Savez-vous pourquoi ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    À priori c'est juste un problème de compilation. Vire tous les *.cm* (et le .ml généré par ton .mly) aux environs, recompile tout, et ça devrait marcher.

    Cette erreur veut dire que deux modules ne sont pas d'accord sur la signature d'un module (ce qui peut arriver rapidement parce que dès que l'interface change, elle est considérée comme incompatible avec la précédente, et donc tous les modules qui ont été compilés avec l'ancienne version risquent de protester). L'utilisation de bons outils de compilation (c'est à dire pas un simple Makefile qui n'est pas vraiment adapté au caml tel quel, mais par exemple ocamlbuild) devrait résoudre le problème, en pratique je me suis jamais fait chier avec ça : en cas de doute, tu vires tout ce qui n'est pas du source original et tu recompiles. Très subtil et très efficace.

  3. #3
    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
    Il y a aussi la possibilité que les noms "debug" et "msg" soient déjà utilisés pour le parser, mais je n'y crois pas trop, car ils auraient été plutôt écrits comme "__ocamlyacc_debug" ou un truc dans ce goût-là.

    Fais un grep sur le fichier que crache ocamlyacc pour voir un peu...
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Si je fais un grep de debug sur tous les fichiers, il me dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Binary file ebs_functions.cmi matches
    ebs_functions.ml:let debug = false ;;
    ebs_functions.ml:let msg m = if (debug) then print_endline m else ignore m;;
    Binary file ocamlpai matches
    Pas étonnant puisque je l'ai défini dans ebs_functions.ml puisque ça ne passait pas dans le parser.

    J'ai essayé en mettant une variable dont le nom n'existe pas ailleurs (enfin j'espère). Et ça marche... le problème vient donc effectivement du nom debug. Je vais donc changer ça.

    Merci.

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

Discussions similaires

  1. Réponses: 17
    Dernier message: 19/02/2010, 15h43
  2. Sepi peut-être sur SourceForge
    Par sjrd dans le forum Sepi
    Réponses: 2
    Dernier message: 06/04/2005, 10h41
  3. question (peut-être idiote) sur les vues
    Par LadyArwen dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/03/2003, 10h35

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