[Flex et Bison] Des erreurs que je ne comprends pas
Bonjour,
Je dois créer un mini-compilateur, j'ai commencé un bout du projet et j'ai donc des erreurs que je n'arrive pas à résoudre.
Voici donc le début de mon fichier lex (j'ai mis un tas d'include, car je ne sais pas lesquels sont bons) :
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 32
| /* fichier test */
%{
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "test.tab.h"
%}
signe [+-]
blanc [ \t]+
lettre [A-Za-z]
chiffre [0-9]
entier {signe}?{chiffre}+
exposant [eE][+-]?{entier}
reel {entier}("."{entier})?{exposant}?
nombre {reel}|{entier}
identif {lettre}("_"|{lettre}|{chiffre})*
comment ("{"(lettre|nombre|blanc)*"}"|"(*"(lettre|nombre|blanc)*"*)")*
type_simple "INT"|"BOOLEAN"|"REAL"|"CHAR"
mot_reserves "IF"|"THEN"|"ELSE"|"PROGRAM"|"BEGIN"|"END"|"VAR"|"CONST"
%%
{blanc} /* Ignorer les blancs */
{nombre} {return(NOMBRE);}
{mot_reserves} {return(mot_r(yytext));}
{type_simple} {return(type_smp(yytext));}
">" {return(SUP);}
">=" {return(SUPEG);}
...
%%
... |
Et le début de mon fichier yacc :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| %{
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
void yyerror(char *str);
extern YYSTYPE yylval;
int yywrap() ;
extern FILE *yyin;
%}
%token NOMBRE
%token IF
%token THEN
%token ELSE
%token PROGRAM
%token BEGIN
%token END
.... |
Je compile le tout en faisant ceci :
flex test.l
bison -d test.y
Puis j'utilise Code::Blocks.
Et j'ai comme erreurs :
1- test.tab.h|46|error: expected identifier before '(' token
Cette ligne correspond (au niveau du BEGIN) :
Code:
1 2 3 4 5 6 7 8
| enum yytokentype {
NOMBRE = 258,
IF = 259,
THEN = 260,
ELSE = 261,
PROGRAM = 262,
BEGIN = 263,
... |
2- test.l|29|error: 'SUP' undeclared (first use in this function)
test.l|29|note: each undeclared identifier is reported only once for each function it appears in
Et ainsi de suite pour "SUPEG" ...
J'espère que vous avez compris mon problème.
PS : Je ne mets pas mon code en entier et vous comprenez pourquoi. :P