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 :

type stream pas reconnu


Sujet :

Caml

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    Par défaut type stream pas reconnu
    slt tt le monde;
    je suis en train de faire un analyseur syntaxique en utilisant le module Genlex.
    Mais le compilateur le reconnait pas les expression de type stream [< ...>]

    voila le code que j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    open Genlex
    let lexer_distrib l=make_lexer ["<-";"(";")";"->";"Bin";";"] (Stream.of_string l)
     
    let rec parse_distribution str=
      match s with parser 
        |[< 'Ident x; 'Kwd "<-"; 'Ident e >]-> Draw(x,Ens(e))
        |[< 'Ident x;'Kwd "<-";'Kwd "(";'Ident e1;'Kwd ")";'Ident e2;'Ident")" >]->Draw(x,EnsFct(e1,e2))
        |[< 'Ident x;'Kwd "<-";'Kwd "Bin";'Int i >]-> Draw(x,Bin(i))
        |[< s1=parse_distribution;'Kwd ";";s2=parse_distribution >]-> XDD(s1,s2)
    j'ai une erreur de syntaxe au niveau des caractères "[<"
    je ne sais pas si je dois ouvrir un module particulier par exemple
    Merci d'avance pour vos réponses.

  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
    La bibliothèque qui gère les Stream fait partie de la bibliothèque standard, mais pour avoir la syntaxe spécifique il faut utiliser le préprocesseur camlp4. Rajoute à ta ligne de compilation l'option "-pp camlp4o" :

    ocamlc -pp camlp4o -o ...

    (si tu utilises l'interpréteur interactif "ocaml", c'est "ocaml camlp4o.cma ..." ou "ocaml dynlink.cma camlp4o.cma ..." en 3.11)

  3. #3
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Salut !

    En prévision d'un autre problème avec les stream : le code de parse_distribution que tu nous montres ne fonctionnera pas comme tu le souhaites car les stream d'OCaml sont destructifs. Il faut comprendre par là qu'un élément matché est immédiatement retiré du stream. Donc les trois filtrages qui commencent par Ident vont poser problème. Si le premier échoue mais que Ident a été matché, il sera retiré avant le test du second filtrage. Essaie quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    let rec parse_distribution str = parser
      | [< 'Ident x; 'Kwd "<-"; s >] ->
        begin match s with parser
          | [< 'Ident e >] -> ...
          | [< 'Kwd "("; 'Ident e1; 'Kwd ")"; 'Ident e2; 'Ident ")" >] -> ...
          | [< 'Kwd "Bin"; 'Int i >] -> ...
        end
      | [< s1 = parse_distribution; 'Kwd ";"; s2 = parse_distribution >]-> ...
    Cordialement,
    Cacophrène

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 44
    Points : 23
    Points
    23
    Par défaut
    merci déjà pour vos réponses; ça a résolu mes problèmes et ça m'a permis de mieux comprendre les streams.

    est ce que vous pouvez me dire comment je peux tester la fin d'un stream.
    comment détecter la fin d'un stream?

  5. #5
    Membre éprouvé
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Points : 1 125
    Points
    1 125
    Par défaut
    Salut !

    Citation Envoyé par amiroushka
    est ce que vous pouvez me dire comment je peux tester la fin d'un stream. comment détecter la fin d'un stream?
    Spontanément je pense à quelque chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let is_empty s = 
      try Stream.empty s; true with Stream.Failure -> false
    Exemple d'application :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    let foo stream =
      if is_empty stream then (* action si le stream est vide *) else
        match stream with parser
        | [< bar >] -> (* autre action *)
        | ...
    
    À noter que le cas [< >] ne matche pas seulement le stream vide, mais aussi tous les cas qui ne correspondent à aucune clause de filtrage.

    Cordialement,
    Cacophrène

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

Discussions similaires

  1. [TALEND] n'est pas reconnu comme type valide
    Par Syphys dans le forum Développement de jobs
    Réponses: 0
    Dernier message: 27/01/2011, 09h43
  2. [xmlrad] fichier vbs ou vb pas reconnu
    Par ekmule dans le forum XMLRAD
    Réponses: 17
    Dernier message: 01/02/2006, 16h23
  3. Répertoire Temporary Internet Files pas reconnu par Dir
    Par Cupidon dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 09/11/2005, 11h55
  4. Fiche créée mais pas reconnue par l'application ??
    Par Leesox dans le forum Langage
    Réponses: 8
    Dernier message: 30/10/2005, 15h10
  5. Réponses: 8
    Dernier message: 04/08/2004, 14h17

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