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

C++ Discussion :

p[1] != "epsilon"


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 396
    Billets dans le blog
    16
    Par défaut p[1] != "epsilon"
    Bonjour,

    sur la capture d'écran, on voit p[1]="epsilon" et l'instruction de la ligne 273 du if se fait quand-même alors que la condition n'est pas vérifiée
    Nom : ecran.jpg
Affichages : 337
Taille : 60,5 Ko
    j'utilise le deboggeur gdb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    void grammaire::recursdirecte(std::string A){
      std::vector<std::vector<std::string>>retour;
      std::vector<std::string> X,Y;
      bool premieralpha=true;
      size_t indice=0;
      for(auto &p:grammaire_s)
        if(p[0]==A){
          if(p[1]==A)
    	if( ! annulable(A) && premieralpha){
    	  Y.push_back(A+"prim");
    	  Y.push_back("epsilon");
    	  retour.push_back(Y);
    	  Y.clear();
    	  premieralpha=false;
    	}
    	X.push_back(A+"prim");
    	X.insert(X.end(),p.begin()+2,p.end());//alpha_n
    	X.push_back(A+"prim");
    	retour.push_back(X);
    	X.clear();
          }
          else{
    	X.push_back(A);
    	if(p[1] != "epsilon")
    	  X.insert(X.end(),p.begin()+1,p.end());//beta_n
    	X.push_back(A+"prim");
    	retour.push_back(X);
    	X.clear();
          }
      for(size_t i=0;i<grammaire_s.size();i++)
        if(grammaire_s[i][0]==A){
          grammaire_s.erase(grammaire_s.begin()+i);
          i--;
        }
      grammaire_s.insert(grammaire_s.end(),retour.begin(),retour.end());
    }
    quelqu'un a une idée?

  2. #2
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 396
    Billets dans le blog
    16
    Par défaut
    c'est parce que j'ai compilé comme ça:
    puis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gdb --args ./a.out a-sa
    du coup, le fichier source ne correspondait pas

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 501
    Par défaut
    Salut,

    Il va vraiment falloir que tu te mettes à écrire du code qui veuille dire quelque chose, à commencer par choisir des noms de variables pertinents.
    Sérieusement, A, X, Y, P, ca ne veut rien dire, et Retour encore moins (ta fonction ne retourne rien).

    De plus, en C++, on ne pré-déclare pas les variables, ca gaspille des ressources inutilement (aussi infimes soient-elles).
    On déclare les variable là où on les utilises pour la première fois (et on les initialise au passage).

  4. #4
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 396
    Billets dans le blog
    16
    Par défaut
    @deedolith

    il n'y a pas vraiment de retour, le résultat vient s'ajouter à grammaire_s

    -------------------
    une autre fonction, Rproductions
    il faut donc que je redéclare la variable Rproductions_s à chaque scope du if-else?
    et si je la déclarais avant le if?

    version1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include <vector>
    #include <string>
     
    #include "grammaire.hpp"
    #include "unilex.hpp"
     
    std::vector<std::vector<std::string>> grammaire::Rproductions(std::vector<std::vector<std::string>> const &Rproductions_h){
      if(a.valeur==mot){
        std::vector<std::vector<std::string>>productions_s;
        productions_s=productions();
        std::vector<std::vector<std::string>>Rproductions1_h;
        Rproductions1_h=Rproductions_h;
        Rproductions1_h.insert(Rproductions1_h.end(),productions_s.begin(),productions_s.end());
        std::vector<std::vector<std::string>>Rproductions1_s;
        Rproductions1_s=Rproductions(Rproductions1_h);
        std::vector<std::vector<std::string>>Rproductions_s;
        Rproductions_s=Rproductions1_s;
        return Rproductions_s;
      }
      else{
        std::vector<std::vector<std::string>>Rproductions_s;
        Rproductions_s=Rproductions_h;
        return Rproductions_s;
      }
    }
    version 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include <vector>
    #include <string>
     
    #include "grammaire.hpp"
    #include "unilex.hpp"
     
    std::vector<std::vector<std::string>> grammaire::Rproductions(std::vector<std::vector<std::string>> const &Rproductions_h){
      std::vector<std::vector<std::string>>Rproductions_s;
      if(a.valeur==mot){
        std::vector<std::vector<std::string>>productions_s;
        productions_s=productions();
        std::vector<std::vector<std::string>>Rproductions1_h;
        Rproductions1_h=Rproductions_h;
        Rproductions1_h.insert(Rproductions1_h.end(),productions_s.begin(),productions_s.end());
        std::vector<std::vector<std::string>>Rproductions1_s;
        Rproductions1_s=Rproductions(Rproductions1_h);
        Rproductions_s=Rproductions1_s;
        return Rproductions_s;
      }
      else{
        Rproductions_s=Rproductions_h;
        return Rproductions_s;
      }
    }
    désolé pour le passage des données de vector en vector, mais il faut que ça corresponde au schéma de traduction dirigée par la syntaxe:
    (le "+" est la concaténation)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Rproductions	→ productions { Rproductions1.h= Rproductions.h + productions.s } Rproductions1 { Rproductions.s = Rproductions1.s }
    		→ ε { Rproductions.s = Rproductions.h }
    merci pour ton aide

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 501
    Par défaut
    Toujours les mêmes reproches:
    Ton code n'a de sens que pour toi.

    Si tu veux faire du C++, Fait du C++.
    Pas de la cuisine de camping sous-étoilé comme ce que tu nous montres jusqu'à présent.

  6. #6
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 396
    Billets dans le blog
    16
    Par défaut
    et comme ça?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #include <vector>
    #include <string>
     
    #include "grammaire.hpp"
    #include "unilex.hpp"
     
    std::vector<std::vector<std::string>> grammaire::resteproductions(std::vector<std::vector<std::string>> const &resteproductions_h){
      if(a.valeur==mot){
        std::vector<std::vector<std::string>>productions_s;
        productions_s=productions();
        std::vector<std::vector<std::string>>resteproductions1_h;
        resteproductions1_h=resteproductions_h;
        resteproductions1_h.insert(resteproductions1_h.end(),productions_s.begin(),productions_s.end());
        std::vector<std::vector<std::string>>resteproductions1_s;
        resteproductions1_s=resteproductions(resteproductions1_h);
        std::vector<std::vector<std::string>>resteproductions_s;
        resteproductions_s=resteproductions1_s;
        return resteproductions_s;
      }
      else{
        std::vector<std::vector<std::string>>resteproductions_s;
        resteproductions_s=resteproductions_h;
        return resteproductions_s;
      }
    }
    peut-être qu'il faut savoir ça pour comprendre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    grammaire	→ productions { Rproductions.h = productions.s} Rproductions fin { grammaire.s = Rproductions.s*; grammaire.axiome=grammaire.s[0][0] }
    fin	→ fdf | linefeed | ε
    Rproductions	→ productions { Rproductions1.h= Rproductions.h + productions.s } Rproductions1 { Rproductions.s = Rproductions1.s }
    		→ ε { Rproductions.s = Rproductions.h }
    productions	→ mot { ensembleprods.tete = mot.s } fleche ensembleprods linefeed { productions.s = ensembleprods.s }
    ensembleprods	→ {production.tete = ensembleprods.tete } production { Rprod.h ||= production.s*; Rprod.tete = ensembleprods .tete } Rprod { ensembleprods.s = Rprod.s }
    Rprod	→ barre { production.tete = Rprod.tete } production { Rprod1.h = Rprod.h || production.s*; Rprod1.tete = Rprod.tete } Rprod1 { Rprod.s = Rprod1.s }
    	→ ε { Rprod.s = Rprod.h }
    production	→ mot { restecorps.h ||= mot.s } restecorps { production.s ||= production.tete*; production.s += restecorps.s }
    restecorps	→ mot { restecorps1.h = retecorps.h || mot.s } restecorps1 { restecoprs.s = restecorps1.s }
    		→ ε { restecorps.s = restecorps.h }
    sinon, dis-moi où exactement tu ne comprends pas...

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

Discussions similaires

  1. Quote dans une requete...
    Par Isildur dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/06/2006, 10h57
  2. [xsl]simuler le mecanisme OO de "liaison dynamique"
    Par philemon_siclone dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 19/12/2003, 11h34
  3. Problème de quote
    Par kennini dans le forum ASP
    Réponses: 4
    Dernier message: 20/11/2003, 09h40
  4. VARCHAR contenant une quote '
    Par tonyskn dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/05/2003, 19h21
  5. Quotes dans TFilenameEdit (RXLib)
    Par AnnSo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 23/01/2003, 20h26

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