Problème dans l'utilisation de l'option --defines=[FILE] de Bison.
Comme vous l'avez peut être déjà remarqué dans un fil récent, je me mets au couple Bison/Flex et le problème du jour est l'utilisation de l'option --defines=[FILE] de Bison.
Si j'ai bien compris, cette option force Bison à générer un header et permet d'en spécifier le nom. Elle est identique a l'option -d qui elle ne permet pas de choisir le nom du header.
J'ai essayé cette option et je tombe sur un os.
Voici les déclarations Bison que j'utilise :
Code:
1 2 3 4 5
|
%define api.value.type union /*Construit YYSTYPE a partir des types ci dessous */
%token <double> NUM
%token <symrec*> VAR FNCT
%type <double> exp |
La compilation en un seul fichier (sans l'option --defines=[FILE]) fournit dans le fichier de sortie :
Code:
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
|
/* ..... */
/* Token type. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
enum yytokentype
{
NUM = 258,
VAR = 259,
FNCT = 260,
NEG = 261
};
#endif
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE YYSTYPE;
union YYSTYPE
{
#line 140 "gram.tab.c" /* yacc.c:355 */
/* NUM */
double NUM;
/* exp */
double exp;
/* VAR */
symrec* VAR;
/* FNCT */
symrec* FNCT;
};
/*.....*/ |
Lorsque je compile le meme fichier de specifications avec l'option --defines=[FILE]
j'obtiens dans le header :
Code:
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
|
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE YYSTYPE;
union YYSTYPE
{
#line 62 "toto.h" /* yacc.c:1909 */
/* NUM */
double NUM;
/* exp */
double exp;
/* VAR */
symrec* VAR;
/* FNCT */
symrec* FNCT;
/* NUM */
double NUM;
/* exp */
double exp;
/* VAR */
symrec* VAR;
/* FNCT */
symrec* FNCT;
};
# define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1
#endif |
Resultat des courses, chaque champs est defini deux fois dans l union YYSTYPE.... ce qui provoque des erreurs lors de la compilation du code c (évidemment).
Même chose lorsque j'utilise l'option -d...
Une idée ?