Bonsoir a tous,
Je souhaite faire un petit compilateur pour requetes sql simples.
J'utilise Yack/Bison et Flex/lex, j'approche de la fin mais j'ai une serie d'erreurs identiques dans mon fichier .y lorsque je compile :
bison -d -v compil_sql.y -ocompil_sql.c
flex compil_sql.lex
gcc -Wall -c lex.yy.c
gcc -Wall -c compil_sql.c
compil_sql.c: In function «yyparse":
compil_sql.y:33: erreur: request for member «ptr" in something not a structure or union
compil_sql.y:33: erreur: request for member «ptr" in something not a structure or union
compil_sql.y:33: erreur: request for member «ptr" in something not a structure or union
compil_sql.y:34: erreur: request for member «entier" in something not a structure or union
compil_sql.y:34: erreur: request for member «ptr" in something not a structure or union
compil_sql.y:34: erreur: request for member «ptr" in something not a structure or union
compil_sql.y:40: erreur: request for member «entier" in something not a structure or union
compil_sql.y:40: erreur: request for member «entier" in something not a structure or union
compil_sql.y:43: erreur: request for member «chaine" in something not a structure or union
compil_sql.y:44: erreur: request for member «chaine" in something not a structure or union
compil_sql.y:44: erreur: request for member «ptr" in something not a structure or union
compil_sql.y:47: erreur: request for member «chaine" in something not a structure or union
compil_sql.y:48: erreur: request for member «chaine" in something not a structure or union
compil_sql.y:48: erreur: request for member «ptr" in something not a structure or union
compil_sql.y:55: erreur: request for member «entier" in something not a structure or union
compil_sql.y:55: erreur: request for member «entier" in something not a structure or union
compil_sql.y:56: erreur: request for member «entier" in something not a structure or union
compil_sql.y:56: erreur: request for member «ptr" in something not a structure or union
compil_sql.y:56: erreur: request for member «ptr" in something not a structure or union
compil_sql.y:57: erreur: request for member «entier" in something not a structure or union
compil_sql.y:57: erreur: request for member «ptr" in something not a structure or union
compil_sql.y:57: erreur: request for member «ptr" in something not a structure or union
compil_sql.y:58: erreur: request for member «entier" in something not a structure or union
compil_sql.y:58: erreur: request for member «entier" in something not a structure or union
compil_sql.y:62: erreur: request for member «entier" in something not a structure or union
compil_sql.y:62: erreur: request for member «ptr" in something not a structure or union
compil_sql.y:62: erreur: request for member «ptr" in something not a structure or union
compil_sql.y:65: erreur: request for member «entier" in something not a structure or union
compil_sql.y:66: erreur: request for member «entier" in something not a structure or union
compil_sql.y:70: erreur: request for member «entier" in something not a structure or union
compil_sql.y:71: erreur: request for member «entier" in something not a structure or union
make: *** [compil_sql.o] Erreur 1
Voici une partie du code du fichier .y :
L'appel de la fonction cons_tree serv à créer l'arbre de requete.
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 %{ #include "sql_def.h" #include "compil_sql.h" //int yylex(); //void yyerror(const char *); %} %union{ int entier; NODE val; NODE *ptr; char *chaine; } %token SELECT ETOILE EGAL DIFFERENT NOM NOM_QUALIFIE PAR_OUV PAR_FER ET OU FROM WHERE VALEUR VIRGULE FIN %left SELECT %left FROM %left NOM %left NOM_QUALIFIE %left OU %left ET %left PAR_OUV %left PAR_FER %start AXIOME %% AXIOME : SELECT PROJECTION FROM LISTE_TABLE CONDITION FIN { if($<ptr>2 == NULL) { cons_tree(SEL,"",0,$<ptr>4,$<ptr>6); } else { cons_tree(PROJ,"",0,cons_tree(SEL,"",0,$<entier>4,$<ptr>6),$<ptr>2); } } | ; PROJECTION : ETOILE | LISTE_NOMS_QUALIFIES { $<entier>$ = $<entier>1; } ; LISTE_NOMS_QUALIFIES : NOM_QUALIFIE { cons_tree(LIST, $<chaine>1, 0, NULL, NULL); } | NOM_QUALIFIE VIRGULE LISTE_NOMS_QUALIFIES { cons_tree(LIST, $<chaine>1, 0, $<ptr>3, NULL); } ; LISTE_TABLE : NOM { cons_tree(TABLE, $<chaine>1, 0, NULL, NULL); } | NOM VIRGULE LISTE_TABLE { cons_tree(PROD, "", 0, cons_tree(TABLE, $<chaine>1, 0, NULL, NULL), $<ptr>3); } ; CONDITION : WHERE DES_CONDITIONS | ; DES_CONDITIONS: COMPARAISON { $<entier>$ = $<entier>1; } | DES_CONDITIONS ET DES_CONDITIONS { cons_tree($<entier>2, "", 0, $<ptr>1, $<ptr>3); } | DES_CONDITIONS OU DES_CONDITIONS { cons_tree($<entier>2, "", 0, $<ptr>1, $<ptr>3); } | PAR_OUV DES_CONDITIONS PAR_FER { $<entier>$ = $<entier>2; } ; COMPARAISON : TERME COMPARATEUR TERME { cons_tree($<entier>2, "", 0, $<ptr>1, $<ptr>3); } ; TERME : NOM_QUALIFIE { cons_tree(VALUE_OF, $<entier>1, 0, NULL, NULL); } | VALEUR { cons_tree(VALUE, $<entier>1, 0, NULL, NULL); } ; COMPARATEUR : EGAL { $<entier>$ = EQ; } | DIFFERENT { $<entier>$ = NE; } ; %%
N'ayant jamais rencontre ce type d'erreur j'aimerai en connaitre la cause (syntax, inclusion de headers, mauvaise edition de lien dans le makefile....).
Toute aide sera la bienvenue.
Merci par avance,
Cordialement.
Partager