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

Autres éditeurs Discussion :

yacc, lex & yylval


Sujet :

Autres éditeurs

  1. #1
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut yacc, lex & yylval
    Bonsoir,

    du à des problèmes rencontrés avec %union, je suis tombé sur ce site http://www.dil.univ-mrs.fr/~jfp/tp_l...c_casalta.html
    J'ai pris les deux derniers bouts de code (lex puis yacc).
    Puis j'ai fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    [jerome@localhost test]$ yacc (-d) essai.y //pas de chgt, sauf création de .h
    [jerome@localhost test]$ lex essai.l
    [jerome@localhost test]$ gcc lex.yy.c -o essai -lfl
    essai.l: In function ‘yylex’:
    essai.l:7: error: ‘yylval’ undeclared (first use in this function)
    essai.l:7: error: (Each undeclared identifier is reported only once
    essai.l:7: error: for each function it appears in.)
    essai.l:7: error: ‘Tid’ undeclared (first use in this function)
    essai.l:8: error: ‘Tnb’ undeclared (first use in this function)
    Comme vous pouvez le constater, cela ne fonctionne pas.
    Je me suis donc dit d'ajouter y.tab.h dans le fichier lex.
    fichier lex modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        /* -- evalv3.lex --
           Evaluation d'une expression
           Partie analyseur lexical.
         */
     #include "y.tab.h"
    BLANC [ \n\t]
    %%
    [a-zA-Z_]+  strcpy(yylval.chaine, yytext);  return Tid;
    [0-9]+      yylval.valeur = atoi(yytext);   return Tnb;
    [-+*/()=]   return yytext[0];   /* caracteres unites lexicales */
    {BLANC}+    ;
    .           printf("Caractere (%c) non reconnu\n", yytext[0]);
    J'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    jerome@localhost test]$ yacc -d essai.y
    [jerome@localhost test]$ lex essai.l
    [jerome@localhost test]$ gcc lex.yy.c -o essai -lfl
    /tmp/cc4VrMOJ.o: In function `yylex':
    lex.yy.c:(.text+0x235): undefined reference to `yylval'
    lex.yy.c:(.text+0x258): undefined reference to `yylval'
    collect2: ld returned 1 exit status
    Quelqu'un saurait-il où se trouve le problème ?

  2. #2
    Membre actif Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 225
    Points
    225
    Par défaut
    Citation Envoyé par je®ome Voir le message
    J'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    jerome@localhost test]$ yacc -d essai.y
    [jerome@localhost test]$ lex essai.l
    [jerome@localhost test]$ gcc lex.yy.c -o essai -lfl
    /tmp/cc4VrMOJ.o: In function `yylex':
    lex.yy.c:(.text+0x235): undefined reference to `yylval'
    lex.yy.c:(.text+0x258): undefined reference to `yylval'
    collect2: ld returned 1 exit status
    Il suffit de compiler également y.tab.c et tout fonctionne très bien

Discussions similaires

  1. Erreur de syntaxe dans yacc & lex
    Par zarbiman dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 11/02/2008, 20h25
  2. [Yacc] Conversion de yylval en réel
    Par Kerod dans le forum Autres langages
    Réponses: 0
    Dernier message: 19/11/2007, 21h35
  3. Réponses: 1
    Dernier message: 03/01/2007, 16h07
  4. grammaire yacc lex simili C
    Par BigBarbare dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 16/05/2005, 22h40

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