Bonjour à tous je cherche à faire un validateur de fichiers css et je passe par flex et bison pour réaliser ce projet, cependant j'éprouve quelques difficultés sur certaine fonctions pour lesquels il me faudrait utiliser la récursivité je vous présente ca à travers mes fichiers j'intègre uniquement les parties nécessaires évidemment :

editeur_css.l

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
 
%option noyywrap
 
%{
	#include<stdio.h>
	#include<string.h>
	#include<gtk/gtk.h>
 
	GList *list = NULL;
%}
 
THIN     	[Tt][Hh][Ii][Nn]
MEDIUM     	[Mm][Ee][Dd][Ii][Uu][Mm]
THICK     	[Tt][Hh][Ii][Cc][Kk]
INHERIT       [Ii][Nn][Hh][Ee][Rr][Ii][Tt]
SPACE			(" "|"\t"|"\n"*)*
VIRG			","|{SPACE}","|","{SPACE}|{SPACE}","{SPACE}
PTS			":"|{SPACE}":"|":"{SPACE}|{SPACE}":"{SPACE}
 
%%
 
{THIN}						{g_list_append(list,yytext); return THIN;}
{MEDIUM}					{g_list_append(list,yytext); return MEDIUM;}
{THICK}						{g_list_append(list,yytext); return THICK;}
{SPACE}						{g_list_append(list,yytext); return SPACE;}
{VIRG}						{g_list_append(list,yytext); return VIRG;}
{PTS}						{g_list_append(list,yytext); return PTS;}
 
%%
editeur_css.y

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
33
34
35
 
%{
 
#define YYSTYPE double
#include <stdio.h>
#include "lex.yy.c"
 
void yyerror ();
 
gchar *chaine = NULL;
 
%}
 
%token THIN
%token MEDIUM
%token THICK
%token INHERIT
%token SPACE
%token VIRG
%token PTS
 
%%
 
%start Depart
 
.........
 
border_width_b : 	THIN VIRG | THICK VIRG | MEDIUM VIRG
 
border_width_a : 	border_width_b border_with_a |
 
border_width :		BORDER_WIDTH PTS border_width_a SPACE
         		| BORDER_WIDTH PTS INHERIT SPACE
 
%%
mon fichier flex passe très bien alors que mon fichier bison lui pose problème et affiche l'erreur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
editeur_css.y: le symbole border_with_a est utilisé mais ce n'est pas un terminal et il ne possède pas de règle
Je débute en flex et bison je ne connais pas encore toutes les subtilités qu'offre ces outils mais avec votre aide je vais surement y arriver Merci d'avance !!