Problème en lex et yacc
DarKcYbeR
Messages postés
103
Statut
Membre
-
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:
et en yacc (le truc qui devrit aller avec):
alors voila
sauf qu'en compilant (j'utilise ce qui suit:
j'obtiens l'erreur qui suit
je vois vraiment pas comment je pourrai résoudre ce bug, merci de m'aider :)
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 :)
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 génère deux fichiers:
et
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