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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
 
/* ..... */
/* 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 : 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
 
/* 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 ?