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

Générateurs de compilateur Discussion :

[Lex/Yacc] Lecture fichier


Sujet :

Générateurs de compilateur

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 26
    Points : 21
    Points
    21
    Par défaut [Lex/Yacc] Lecture fichier
    Bonjour tout le monde,j'essaye depuis hier de lire correctement un fichier avec lex et yacc mais je lis seulement le premier symbole et puis rien d'autre.
    Exemple : si j'ai prog exemple1 je lis seulement le prog et puis le reste n'ai pas reconnu.Je n'arrive pas à trouver le problème,voici mon code Lex :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    %{
    #include "declarations.h"
    #include "tpsyn_tab.h"
     
    %}
    lettre [A-Za-z]
    chiffre [0-9]
    id {lettre}+({lettre}|{chiffre})*
    nb {chiffre}+
    faux {nb}{id}
     
    opaffect ["="]
    oprel ("<"|"<="|"=="|"<>"|">"|">=")
    opadd ("+"|"-"|"or")
    opmul ("*"|"/"|"div"|"mod"|"and")
     
    A [/]
    B[*]
    C [^/*]
     
    commentaire {A}({A}.*|{B}({A}|{C}|{B}+{C})*{B}+{A})
     
    %%
     
     
    "prog"          { printf("mot cle %s \n",yytext);return PROGRAMME;}
    "begin"         return DEBUT;
    "end"           return FIN;
    "var"           { printf("mot cle %s \n",yytext);return DECLARATION;}
    "if"            return SI;
    "then"          return ALORS;
    "else"          return SINON;
    "while"         return TANT_QUE;
    "do"            return FAIRE;
    "not"           return NON;
    "proc"          return PROCEDURE;
    "func"          return FONCTION;
    "int"           return TYPE;
     
    {opmul}         return OPERATION;
    {opaffect}      return AFFECTATION;
    {oprel}         return COMPARAISON;
    {opadd}         return AJOUT;
     
    "("             return '(';
    ")"             return ')';
    "."             return '.';
    ","             return ',';
    ":"             return ':';
    ";"             return ';';
     
    "\t"            ;
    "\n"            nb_l++;
     
    {id}         {printf("mot cle %s \n",yytext);yylval.chaine=strdup(yytext);return IDENT;}
    {nb}        {yylval.entier=atoi(yytext);return NBRE;}
     
                                                                                                                     
    {commentaire} {/* pas d'action */ nb_l++;}
    {faux} { printf("\nErreur ligne %d : erreur lexicale !", nb_l); } 
    .  { printf("\nErreur ligne %d : erreur lexicale !", nb_l); } 
     
    %%

    Et le main situé dans le fichier yacc :


    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
         /* fonction pour la fin de fichier */
    int yywrap(void) {
    return 1;
    }
     
    /* fonction pour les erreurs */    
    void yyerror()
    {
            fprintf(stderr, "\nErreur ligne %d : erreur de syntaxe !", nb_l);
            compil_reussie=0;
    }    
    int main(int argc,char * argv[]) {
     
    yyin=fopen("C:\\Users\\Mehdi\\Desktop\\exemple1.txt", "r");
    if(!yyin){
              printf("impossible d'ouvrir le fichier \n");
              exit(1);
              }         
    yyparse();
    getch();
    return 0; 
     
    }
    -Voilà ça serait sympa de m'aider si vous avez déjà rencontré le problème,merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    faudrait pas gérer aussi le '\r' et le ' ' ?
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 26
    Points : 21
    Points
    21
    Par défaut
    Merci pour la réponse mais ça a fini par s'arranger,c'était un problème mineur.

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

Discussions similaires

  1. Fichier de configuration : XML vs Lex Yacc
    Par Battoss dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 11/07/2012, 13h48
  2. lex yacc fichiers en entrée et sortie
    Par Patnel dans le forum Générateurs de compilateur
    Réponses: 2
    Dernier message: 09/11/2010, 14h30
  3. [LG]probleme lecture fichier
    Par yp036871 dans le forum Langage
    Réponses: 2
    Dernier message: 28/01/2004, 19h22
  4. [LG]Probleme lecture fichier file of ....
    Par John_win dans le forum Langage
    Réponses: 11
    Dernier message: 11/11/2003, 18h53
  5. [langage] prob lecture fichier .txt
    Par martijan dans le forum Langage
    Réponses: 3
    Dernier message: 16/07/2003, 11h08

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