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 :

problème avec camlp4


Sujet :

Caml

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut problème avec camlp4
    bonjour


    Je tente de toucher un peu à camlp4 , mais quand je tape une quotation
    par exemple, si je préparse ou charge dans l'interpréteur camlp4o.cma ça me retourne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     While finding quotation "expr" in a position of "str_item":
      Available quotations are:
     
      Camlp4: Uncaught exception: Not_found
    et si j'utilise camlp4oof.cma il me renvoi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Unbound constructor Ast.Ex....quelquechose
    je pense que je ne dois pas avoir compris quelque chose, pourtant il me semble que j'avais essayé il y a un certain temps et que ça marché

    j'espere que quelqu'un pourra m'aider.

  2. #2
    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
    Salut.

    J'ai regardé hier soir le manuel et tutoriel de CamlP4, et il semblerait qu'il faut, au lancement de la boucle d'intéraction, entrer la commande suivante...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ocaml -I +camlp4 gramlib.cma
    ... et non simplement...

    Le manuel de référence de CamlP4 est ici...

    http://caml.inria.fr/pub/docs/manual-camlp4/index.html

    ... le tutoriel (à lire ne priorité) est là...

    http://caml.inria.fr/pub/docs/tutori...lp4/index.html

    ... et le passage auquel je pense est ici...

    http://caml.inria.fr/pub/docs/manual...manual009.html

    Fais-moi savoir si ça résout ton problème.
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  3. #3
    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
    ocaml camlp4oof.cma :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # <:expr<1+2>>;;
    Unbound constructor Ast.ExApp
    # open Camlp4.PreCast;;
    # <:expr<1+2>>;;
    Unbound value _loc
    # let _loc = Loc.ghost;;
    val _loc : Camlp4.PreCast.Loc.t = <abstr>
    # <:expr<1+2>>;;
    - : Camlp4.PreCast.Ast.expr =
    Camlp4.PreCast.Ast.ExApp (<abstr>,
     Camlp4.PreCast.Ast.ExApp (<abstr>,
      Camlp4.PreCast.Ast.ExId (<abstr>, Camlp4.PreCast.Ast.IdLid (<abstr>, "+")),
      Camlp4.PreCast.Ast.ExInt (<abstr>, "1")),
     Camlp4.PreCast.Ast.ExInt (<abstr>, "2"))

  4. #4
    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
    Ahhhhh... je vois... ils ont donc changé des trucs et ne les ont pas documentés ?
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  5. #5
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Exact, c'est dit dans le Changes:
    Objective Caml 3.10.0:
    ----------------------

    (Changes that can break existing programs are marked with a "*" )

    * Changed the behaviour of instance variable overriding; the new
    definition replaces the old one, rather than creating a new
    variable.
    * Camlp4: heavily revised implementation, new API.
    La nouvelle API est documentée ici:

    http://pauillac.inria.fr/~ddr/camlp5/doc/htmlc/

    Autant lire le Changes:

    Camlp5 Version 5.01:
    ---------------------

    * [06 Oct 07] Fixed bug in grammars: there was a parsing confusion with
    entries with qualified names with same final identifier, resulting
    bad results. Example: (qualified names "Prim.ident" and "Constr.ident"
    have the same final identifier "ident").
    EXTEND
    Prim.ident: [ [ ... ] ];
    Constr.ident: [ [ ... ] ];
    END;
    * [05 Oct 07] In Scheme syntax (pa_scheme.cmo), added "type*" (symmetric
    to "define*") and "exceptionrebind".
    * [04 Oct 07] Added flag C in pr_r.cmo and pr_o.cmo to add comments inside
    phrases (default = True).
    * [01 Oct 07] Added flag E in pr_r.cmo and pr_o.cmo to ask to equilibrate
    cases in 'match', 'if', 'parse', 'EXTEND' statements, i.e if one case does
    not fit on the line, all cases must be cut (default = False).
    * [01 Oct 07] Added module "Diff" in the library (general comparison of
    two arrays). Implemented with the same algorithm as the Unix 'diff'
    command.
    * [01 Oct 07] Fixed bug in pa_o.cmo (normal syntax) introduced in version
    5.00. The example: "function Atom atext as cur :: tl' -> 0" did not
    parse, printing the error "incorrect alias pattern".
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  6. #6
    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
    SpiceGuid, ton message porte un peu à confusion, parce que tu mentionnes camlp5, alors que le posteur initial utilise visiblement camlp4 3.10.

    Pour clarifier les choses (je ne sais pas vraiment qui parle de quoi sur le topic, mais ça ne coûte rien de clarifier au cas où), il y a trois choses à distinguer.

    Camlp4 de la 3.09 et précédentes, est la version "ancienne" de camlp4, écrite principalement par Daniel de Rauglaudre. C'est celle qui est couverte par les manuels "officiels" fournis sur le site de l'INRIA, et à laquelle fait référence InOCamlWeTrust.

    Camlp4, à partir de la version 3.10, a subit des retouches assez profondes, de la part principalement de Nicolas Pouillard. Les bases restent les même mais l'infrastructure a été assez profondément modifiée (entre autre pour être "plus modulaire", utilisant assez souvent des foncteurs, etc.). Elle n'est pas compatible avec les versions précédentes (les extensions syntaxiques doivent être modifiées un peu pour fonctionner), et c'est celle concernée par la question de caouis (d'après les erreurs qu'il a). C'est par ailleurs celle que je connais (puisque j'ai appris camlp4 après la sortie de la 3.10, et que cette version est maintenant la version officielle distribuée avec OCaml). Ses ajouts sont assez riches et variés (et controversés, comme va le montrer la suite). Pour se documenter, j'utilise personellement cette wiki, et la source, avec en particulier une page générée automatiquement par ocamldoc, à partir du fichier camlp4/Camlp4/Sig.ml.

    Camlp5 est la continuation de l'ancien camlp4 par Daniel de Rauglaudre, qui désapprouve une partie des changements effectués lors du passage à la version 3.10. Elle vise à rester plus proche du camlp4 initial, mais je ne suis pas certain qu'elle mantienne la compatibilité. Elle est distribuée indépendamment de OCaml, et utilisée par certaines extensions syntaxiques, ou programmes dépendant de camlp4, qui n'ont pas souhaité (ou eu le temps de) passer au camlp4 3.10, la transition camlp4 3.09 -> camlp5 étant plus simple. C'est la version dont parle SpiceGuid.

  7. #7
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Ha ben oui pour ce recadrage, dit commre ça on y voit un peu plus clair dans le "qui est qui" du preprocessing.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  8. #8
    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
    Je savais que Nicolas Pouillard avait fait de nombreuses modifications de Camlp4, mais je ne savais pas qu'il y avait carrément deux fork de Camlp4, qui, apparemment, ne sont même pas compatibles avec le bon vieux Camlp4 d'origine.

    Ca ne m'étonne que moyennement que Daniel ne soit pas d'accord avec la nouvelle version...
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    je connais aussi ce wiki est il est plutôt bien (mais incomplet),mais cela reste la seule source d'information sur le nouveau camlp4 (le manuel officiel est en retard de plusieurs version vu qu'il est annoncé dessus qu'il est va être refait aprés la version 3.07 ) .

    toutefois quelque soit la version si on préparse (/charge dans l'interpréteur) avec les fichiers nécessaire , si on évalue une quotation elle doit se comporter comme l' AST correspondant , donc devrait me renvoyer Mais vu les messages d'erreurs ,je pense que je ne doit pas avoir chargé les bons fichiers (pourtant ce sont bien ceux indiqué dans le wiki sucité ) ou que je n'ai pas compris quelque chose.

  10. #10
    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
    T'as quelle version de ocaml ?
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    la 3.10

  12. #12
    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
    Je ne connais pas cet usage d'évaluation, et je ne l'ai jamais rencontré.

    Tu es sûr que c'est bien une "évaluation" que tu cherches ? Le code que j'ai montré donne bien l'AST Camlp4 correspondant à la valeur entrée, sous la forme d'un type algébrique, ce qui permet de produire ensuite un code OCaml formatté dans la syntaxe que tu veux, ou un dump directement lisible par le compilateur.
    Peut-être que ce dump pourrait être directement interprété par le toplevel, mais ça me semble un peu étrange. Tu as un lien qui décrit ce comportement ?

  13. #13
    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
    Juste au cas où, histoire d'insister : es-tu sûr que ce n'est pas un problème de fichier/module/librairie de Camlp4 non chargé ?
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    pour répondre à Bluestorm en fait tu a raison j'ai vérifié avec ocaml 3.9 et effectivement ce genre de quotations retourne un ast (et celui ci n'est pas évalué à la volé comme je le pensait) , j'avait était un peut induit en erreur par cet exemple : http://caml.inria.fr/pub/docs/tutori...torial004.html

    Mais un coup d' oeil au manuel de camlp4 m'a révélé qu'une quotation pouvait renvoyé un AST ou bien un string (cas de l'exemple) qui lui est bien interprété à la volé .

    InOcamlWeTrust: justement je suis presque sur que c'est un fichier que j'oublie de chargé(vu que ça me renvois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unbound constructor Ast.ExInt
    pour
    <:expr<1>>
    par exemple) mais je ne vois pas le quel

    merci quand même pour l'aide

  15. #15
    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
    Ben ça, c'est dans ma première réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    open Camlp4.PreCast;;
    let _loc = Loc.ghost;;

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    merci j'avais pas vu ,effectivement ça résout le problème .

  17. #17
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Oui, enfin seulement si le problème était de générer cet infâme Abstract Syntax Tree:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    - : Camlp4.PreCast.Ast.expr =
    Camlp4.PreCast.Ast.ExApp (<abstr>,
     Camlp4.PreCast.Ast.ExApp (<abstr>,
      Camlp4.PreCast.Ast.ExId (<abstr>, Camlp4.PreCast.Ast.IdLid (<abstr>, "+")),
      Camlp4.PreCast.Ast.ExInt (<abstr>, "1")),
     Camlp4.PreCast.Ast.ExInt (<abstr>, "2"))
    Autrement, si le problème c'était, à partir de cet AST, d'afficher l'entier 3, alors là on va entrer dans Objective Caml, ça va être court mais pour les débutants ça va être

    (pardon les modos pour le hors sujet)

    J'ai pensé, de façon complètement sournoise il faut bien le dire, que peut être, le code qui suit pouvait avoir une certaine parenté avec le problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # type expr =
      | Int of int
      | Add of expr * expr
     
    let rec eval e =
      match e with
      | Int n -> n
      | Add(a,b)-> eval a + eval b;;
    type expr = Int of int | Add of expr * expr
    val eval : expr -> int = <fun>
     
    # eval (Add(Int 1,Int 2));;
    - : int = 3
    Ceci dit je vous accorde volontiers que ce code n'a rien à voir avec camlp4.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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