Problème en lex et yacc

DarKcYbeR Messages postés 103 Statut Membre -  
DarKcYbeR Messages postés 103 Statut Membre -
Bonjour,
j'ai un problème en programmant en Lex et Yacc

en lex j'ai ce programme:

%{
#include <stdio.h>
#include "yab.h"
%}
%%
[0-9]+                  NUMBER;
heat                    TOKHEAT;
on|off                  STATE;
target                  TOKTARGET;
temperature             TOKTEMPERATURE;
\n                      ;
[ \t]+                  ;


%%





et en yacc (le truc qui devrit aller avec):

%{
#include <stdio.h>
#include <string.h>
%}

%token NUMBER TOKHEAT STATE TOKTARGET TOKTEMPERATURE

%%

commands:
        | commands command
        ;

command:
        heat_switch
        |
        target_set
        ;

heat_switch:
        TOKHEAT STATE
        {
                printf("\tHeat turned on or off\n");
        }
        ;

target_set:
        TOKTARGET TOKTEMPERATURE NUMBER
        {
                printf("\tTemperature set\n");
        }
        ;
%%

int yyerror(const char *str)
{
        fprintf(stderr,"error: %s\n",str);
}
 
int yywrap()
{
        return 1;
} 
  
main()
{
        yyparse();
} 


alors voila
sauf qu'en compilant (j'utilise ce qui suit:
 lex example4.l
yacc example4.y
cc lex.yy.c y.tab.c -o example4 


j'obtiens l'erreur qui suit
example4.l: Dans la fonction «yylex» :
example4.l:6: erreur: «NUMBER» undeclared (first use in this function)
example4.l:6: erreur: (Each undeclared identifier is reported only once
example4.l:6: erreur: for each function it appears in.)
example4.l:7: erreur: «TOKHEAT» undeclared (first use in this function)
example4.l:8: erreur: «STATE» undeclared (first use in this function)
example4.l:9: erreur: «TOKTARGET» undeclared (first use in this function)
example4.l:10: erreur: «TOKTEMPERATURE» undeclared (first use in this function)


je vois vraiment pas comment je pourrai résoudre ce bug, merci de m'aider :)

1 réponse

DarKcYbeR Messages postés 103 Statut Membre 8
 
il y a personne pour m'aider?
0
DarKcYbeR Messages postés 103 Statut Membre 8
 
Ok c'est bon j'ai trouvé tout seul
Merci pour tous ceux qui ont essayé de me donner un coup de main
en fait c'est un truc tout con: pour ceux qui ont le même problème, je vous explique:

quand on fait la commande

yacc -d  example4.y


yacc génère deux fichiers:

y.tab.c


et

y.tab.h


et c'est ce dernier qui doit faire l'objet du "include" dans le fichier lex
or moi dans mon code, j'avais fait include pour un autre fichier ".h"
donc il connait pas les définition des prototypes, c'est pour ça.

j'espère que ça vous aidera
bye
0