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 :
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
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 */
stil_language est le symbole de départ.
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;} ;
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 :
Ce qui est souligné , c'est yyerror. Ce qui est italique , c'est moi qui l'ai écrit.user@pc_of_user{stil_directory} : parser
bus =0 , any = 0
STIL 1.0 ;
1.0 bus =0 , any = 0 ; Syntax error : --> unexpected ';'
Quelqu'un aurait-il une idée sur l'erreur s'il vous plait ?
Partager