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 : 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
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 : 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
%{
#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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.