Bonjour à tous ,

J'ai écrit deux fichiers lex et yacc dans le but d'avoir un parseur d'un langage de l'IEEE ( STIL ). J'ai l'ER suivante :
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
/* Inclusion C et autres VG */
%%
/*
Autres ER
*/
dig     [0-9]
num1         {dig}+\.?([eE][-+]?{dig}+)?
num2         {dig}*\.{dig}+([eE][-+]?{dig}+)?
number       {num1}|{num2}
/*
Autres ER
*/
%%
/*
Autres règles
*/
{number}        {if(!bus) {return(NUM);} if (bus) REJECT;}
/*
Autres règles
*/
Dans le fichier yacc il y a :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
stil_language :
	STIL_statement top_level_statements
	{
		bus = 0;
	}
	;
 
STIL_statement :
	STIL NUM ';'
	| STIL NUM {any=1;} '{' anything_statements_plus '}' {any=0;}
	;
stil_language est le symbole de départ.

La variable bus est initialisée à 0 ( Dans le main , il fait une vérif et elle est bien initialisée à 0).

Le problème c'est que le parseur ne reconnait pas les token de type NUM !
Il les réécrit sur la sortie standard et invoque yyerror quand j'entre un symbole qui ne correspond pas à NUM ;

Voici le prompt en exemple :
user@pc_of_user{stil_directory} : parser
bus =0 , any = 0
STIL 1.0 ;
1.0 bus =0 , any = 0 ; Syntax error : --> unexpected ';'
Ce qui est souligné , c'est yyerror. Ce qui est italique , c'est moi qui l'ai écrit.

Quelqu'un aurait-il une idée sur l'erreur s'il vous plait ?