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) :
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
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);} ... %% ...
Je compile le tout en faisant ceci :
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 ....
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.![]()
Partager