problème pour parser un langage
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:
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:
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;
} |