Bonjour,
j'ai un problème pour le parsage d'un langage. Le problème est que lorsque je compile ces deux fichiers (ci dessous, dans l'ordre lex puis yacc), ces deux erreurs apparaissent :
-> t.y:35:6: attention : return makes integer from pointer without a cast [enabled by default]
-> t.y:60:14: attention : initialization makes pointer from integer without a cast [enabled by default]
Je ne sais pas vraiment quoi faire pour les résoudre et donc j'en fais appel à vous.
Ce problème m'empêche de savoir si j'ai bien défini mes noeuds, vu que je peux pas tester.
Note : J'ai mis une version simplifiée de mon fichier yacc(y a pas tout les noeuds ni tous les attributs, pour simplifier la lecture)
D'avance je vous remercie pour votre aide.
Bien à vous, marincuveur
PS : j'espère que c'est le bon endroit pour ce topic...dans le cas contraire n'hésitez pas à me le faire savoir. merci
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 %{ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "y.tab.h" %} %option noyywrap %% "<sup>" {return SUP;} "</sup>" {return E_SUP;} "<sub>" {return SUB;} "</sub>" {return E_SUB;} [\t]+ { } [0-9]* { yylval.ival = atoi(yytext); return TEXTE; } . { fprintf(stderr, "ce mot ne fait pas partie du langage"); exit(0); } %%
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 %{ #include <stdio.h> #include <stdlib.h> #include <string.h> extern char* yytext; int yylex(void); int yyerror(char *str); %} %union{ int ival; char *sval; struct h { char *mot; } hval; struct tmef { char *mot; } tmefval; struct tie { char *mot; } tieval; struct t { char *mot; } tval; } %token SUP E_SUP SUB E_SUB TEXTE %type <hval> Html %type <tmefval> TexteMisEnForme %type <tieval> TexteIndiceExposant %type <tval> Texte %% Root : Html {return $<hval>1.mot;} ; Html : TexteMisEnForme {$<hval>$.mot = $<tmefval>1.mot;} ; TexteMisEnForme : Texte TexteIndiceExposant {$<tmefval>$.mot=strcat($<tval>1.mot,$<tieval>2.mot);} {$<tieval>$.mot = $<tmefval>0.mot ;} ; TexteIndiceExposant : SUP TexteMisEnForme E_SUP {$<tmefval>$.mot = $<tieval>0.mot;}//{$<tieval>$.mot = $<tmefval>0.mot ;} | SUB TexteMisEnForme E_SUB {$<tmefval>$.mot = $<tieval>0.mot;}//{$<tieval>$.mot = $<tmefval>0.mot ;} | {$<tieval>$.mot = NULL ;} ; Texte : TEXTE {$<tval>$.mot = $<sval>1 ;} %% int yyerror(char *yytext){ fprintf(stderr, "cette phrase ne fait pas partie de la grammaire"); exit(0); } int main(){ char *mot = yyparse(); fprintf(stdout, "L'expression donne %s.\n", mot); return 0; }
Partager