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

Langage Perl Discussion :

[langage] Continuer a parser une ligne


Sujet :

Langage Perl

  1. #1
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut [langage] Continuer a parser une ligne
    bonjour,
    je souhaite parser une ligne du style macro toto(x,y,z) = x+y
    Or, je ne me souviens plus comment on fait pour sauvegarder l'endroit ou c'est arrete une recherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #si on a une macro
    if ($ligne =~ /^\s*macro\s+(\w+)\s*\(\s*/g) {
        $nom_macro=$1;
        #on parse les parametres
         while ($ligne =~ /\G(\w+)\s*[,]?\s*/g) {
             push(@param,$1);
         }
        # maintenant je veux parser a partir de la ou je me suis arreter ! 
        if (! ($ligne =~/\G\)/g) ) {
            exit(1);
        }
    Le probleme est que l'on sort de la boucle de recuperation des parametres lorsque le matching echoue, et donc \G n'a plus de signification !

    Aurriez-vous des souvenirs/idees ? ?

  2. #2
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Fin du monlogue : j'ai retrouve la fonction : pos($ligne)
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #si on a une macro
    if ($ligne =~ /^\s*macro\s+(\w+)\s*\(\s*/g) {
        $nom_macro=$1;
        #on parse les parametres
         while ($ligne =~ /\G(\w+)\s*[,]?\s*/g) {
             push(@param,$1);
             $pos=pos($ligne);
         }
        # maintenant je veux parser a partir de la ou je me suis arreter ! 
        pos($ligne)=$pos;
        if (! ($ligne =~/\G\)/g) ) {
            exit(1);
        }

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par D[r
    eadLock]Fin du monlogue : j'ai retrouve la fonction : pos($ligne)
    Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #si on a une macro
    if ($ligne =~ /^\s*macro\s+(\w+)\s*\(\s*/g) {
        $nom_macro=$1;
        #on parse les parametres
         while ($ligne =~ /\G(\w+)\s*[,]?\s*/g) {
             push(@param,$1);
             $pos=pos($ligne);
         }
        # maintenant je veux parser a partir de la ou je me suis arreter ! 
        pos($ligne)=$pos;
        if (! ($ligne =~/\G\)/g) ) {
            exit(1);
        }
    Une autre solution consiste a utiliser les operateur de pre-match et de post-match (solution plus propre je pense).......
    There's more than one way to do it...

  4. #4
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Citation Envoyé par Plouf
    Une autre solution consiste a utiliser les operateur de pre-match et de post-match (solution plus propre je pense).......
    Effctivement, je n'y avait pas pense ! Merci ! C'est clair que c'est un peu plus propre !

  5. #5
    Membre expérimenté
    Avatar de nyal
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    622
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 622
    Points : 1 428
    Points
    1 428
    Par défaut
    Non ce n est pas plus propre.
    TRES TRES LOURD. toujours eviter d utiliser ces variables. car des que tu les utilises une fois c est fini. il va les remplir pour toutes les autres regexp.
    ce qui est tres embetant et qui ralentit beaucoup le prog.

    à eviter par consequent. (bien sur il y a des cas où on en peut pas mais danc ce cas la on peut)

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par nyal
    Non ce n est pas plus propre.
    TRES TRES LOURD. toujours eviter d utiliser ces variables. car des que tu les utilises une fois c est fini. il va les remplir pour toutes les autres regexp.
    ce qui est tres embetant et qui ralentit beaucoup le prog.

    à eviter par consequent. (bien sur il y a des cas où on en peut pas mais danc ce cas la on peut)
    C'est pas du tout embetant, tout depends de la façon dont tu as construit ton code.
    Pour le ralentissement du prog, je n'en suis pas aussi sûr que toi, car recement j'ai comparer un analyseur syntaxique avec et sans les opérateur de pre/postmatch, et le prog était plus rapide avec les operateurs.....
    There's more than one way to do it...

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

Discussions similaires

  1. Parser une ligne suivant une expression réguliere
    Par houba91 dans le forum Général Java
    Réponses: 11
    Dernier message: 28/03/2014, 15h41
  2. Parser une ligne de commande.
    Par shirohige dans le forum Générateurs de compilateur
    Réponses: 7
    Dernier message: 30/06/2013, 11h46
  3. Réponses: 4
    Dernier message: 21/07/2009, 14h08
  4. Parser une ligne saisie au clavier.
    Par Sylmandel dans le forum C++
    Réponses: 5
    Dernier message: 17/10/2005, 10h12
  5. [OCaml] Parser une ligne de commande
    Par Thanatos dans le forum Caml
    Réponses: 4
    Dernier message: 10/12/2004, 10h11

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