Dans mon analyseur, j'aiquestion Typedef avec bison et flex
%union {
SYMTABLE *p_entry ;
QUAD *p_quad ;
} ;
Maintenant, SYMTABLE est le typedef pour une struct. Les struct et typedef sont dans un fichier inclus. Il n'y a aucun problème avec ça. QUAD est le typedef pour un struct (typedef struct quad QUAD). Les struct et typedef sont dans un fichier inclus.
Il n'y a pas de problème à faire:
bison -d parser.y
gcc parser.tab.c -c
Mon lexer a besoin yylval, donc dans la partie des déclarations que j'ai
#include "parser.tab.h" /* bison generated header file */
extern YYSTYPE yylval ;
Quand je
flex scanner.lex
gcc lex.yy.c -c
GCC se plaint
In file included from scanner.lex:16:
parser.y:30: error: syntax error before "QUAD"
parser.y:30: warning: no semicolon at end of struct or union
parser.y:32: error: syntax error before '}' token
parser.y:32: warning: data definition has no type or storage class
parser.tab.h:121: error: syntax error before "yylval"
parser.tab.h:121: warning: data definition has no type or storage class
Si je retourne à mon fichier parser.y et remplacez QUAD par struct quad dans UNIQUEMENT l'union yylval%, le problème disparaît. Je veux dire que c'est une erreur typedef stupide, mais le fichier généré par bison compile bien. J'ai inclus le fichier d'en-tête pour mon QUAD typedef et struct quad dans mon scanner.
Il semble que ce soit le seul endroit où les problèmes se produisent, donc je pourrais juste remplacer QUAD avec struct quad, mais cela est incompatible avec le SYMTABLE.
I savait que c'était un erreur de ma part. Il se trouve dans mon scanner, j'avais #include "parser.tab.h" avant #include "quad.h" Je pensais que parser.tab.h aurait l'inclure de quad.h reporté, mais il ne semble pas . – Kizaru