[Lex/Yacc] Le parseur ne reconnaît pas les tokens de type NUM
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:
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:
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 :
Citation:
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 ?