voila j'essaye de faire une calculette complexe en utilisant Lex et Yacc
voici les codes sources
Code Lex
Code :
- %{
- #include "y.tab.h"
- struct Complex{
- int reel;
- int img;
- };
- extern struct Complex Cm;
- %}
- %%
- [0-9]+ {yylval.Cm.reel = atoi(yytext);
- yylval.Cm.img=0;
- return NUMBER;
- /*printf("Reel = %d Img = %d\n",Cm.reel,Cm.img);*/
- }
- [0-9]+j+ {yylval.Cm.img = atoi (yytext);
- yylval.Cm.reel=0;
- return NUMBER;
- /*printf("|| Reel = %d Img = %d\n",Cm.reel,Cm.img);*/
- }
- j+ {
- yylval.Cm.img=1;
- yylval.Cm.reel=0;
- return NUMBER;
- /*printf("Reel = %d Img = %d\n",Cm.reel,Cm.img);*/
- }
- \t; {printf("whitespace" );}
- " " {;}
- \n return 0; /* symbole de retour pour la fin de fichier */
- . return yytext[0];
- %%
|
Le code Yacc
Code :
- %{
- struct Complex{
- int reel;
- int img;
- };
- %}
- %union{
- struct Complex Cm;
- }
- %token NAME
- %token <Cm> NUMBER
- %left '-' '+'
- %left '*' '/'
- %nonassoc MINUS
- %%
- statement: NAME '=' expression
- | expression { printf("= %d\n",$1); }
- ;
- expression: expression '+' expression { $$.reel = $1.reel + $3.reel; }
- | NUMBER { $$.reel = $1.reel; }
- ;
- %%
- int yyerror(){
- }
- int main ()
- {
- yyparse();
- }
|
lors de la comilation du code yacc il me donne :
bash-2.03$ yacc -d ex2.y
"ex2.y", line 20: fatal: must specify type for expression
bash-2.03$
ligne : | expression { printf("= %d\n",$1); }
je pense que cela vient de la structure.
il faut caster ???
Merci d'avance
Message édité par Mordock le 03-11-2003 à 13:43:34