J'essaye de faire un petit exercice chez FLEX et BISON.FLEX/BISON: Pourquoi ma règle n'est pas reconisée?
Voici le code que j'ai écrit:
calc_pol.y
%{
#define YYSTYPE double
#include "calc_pol.tab.h"
#include <math.h>
#include <stdlib.h>
%}
%start line
%token NOMBRE
%token FIN
%%
line: exp '\n' { printf("\t%.2lf\n", $1); };
exp: exp exp '+' { $$ = $1 + $2 ;}
| exp exp '-' { $$ = $1 - $2 ;}
| exp exp '*' { $$ = $1 * $2 ;}
| exp exp '/' { $$ = $1/$2 ;}
| exp exp '^' { $$ = pow($1, $2) ;}
| NOMBRE;
%%
calc_pol.l
%{
#include "calc_pol.tab.h"
#include <stdlib.h>
#include <stdio.h>
extern YYSTYPE yylval;
%}
blancs [ \t]+
chiffre [0-9]
entier [+-]?[1-9][0-9]* | 0
reel {entier}('.'{entier})?
%%
{blancs}
{reel} { yylval = atof(yytext); return NOMBRE; }
\n { return FIN; }
. { return yytext[0]; }
%%
Makefile
all: calc_pol.tab.c lex.yy.c
gcc -o calc_pol $< -ly -lfl -lm
calc_pol.tab.c: calc_pol.y
bison -d calc_pol.y
lex.yy.c: calc_pol.l
flex calc_pol.l
Avez-vous une idée de ce qui ne va pas? Merci
Edité: Le message d'erreur est
flex calc_pol.l: calc_pol.l:18: règle non reconnue
ligne 18 est la ligne commençant par {reel}
, et le message d'erreur se traduit à l'anglais comme « règle non reconnue ».
Symptômes? ... –
Pour répondre à la question, non je n'ai aucune idée de ce qui ne va pas. Avez-vous des preuves concrètes que quelque chose ne va pas? Telles que la sortie de diagnostic, ou les résultats de test de calc_pol? –
'flex calc_pol.l': calc_pol.l: 18: règle non reconnue – Natim