вот мой лекс код:
three.l
%{
#include "y.tab.h"
#include "string.h"
%}
%%
[a-zA-Z]+ { yylval.a_var=(char *)malloc(sizeof(char *));
strcpy(yylval.a_var,yytext);
return var;}
[-+/*,] {return yytext[0];}
[\t\n] return 0;
%%
Мой YACC
three.y
%{
#include "stdio.h"
#include "string.h"
int yywrap()
{
return 1;
}
static int i;
int d;
char temp();
%}
%left '+' '-'
%left '*' '/'
%union{char *a_var;}
%token id
%token <a_var>var
%start line
%%
line:var '=' exp {printf("%c=t%c\n",$1,$3);}
;
exp:exp '+' exp {$$=temp();if(i<=1){printf("t%c=%c+%c\n",$$,$1,$3);} else{printf("t%c=t%c+%c\n",$$,$1,$3);} }
|exp '-' exp {$$=temp();if(i<=1){printf("t%c=%c-%c\n",$$,$1,$3); } else{printf("t%c=t%c-%c\n",$$,$1,$3);} }
|exp '*' exp {$$=temp();if(i<=1){printf("t%c=%c*%c\n",$$,$1,$3); } else{printf("t%c=t%c*%c\n",$$,$1,$3);} }
|exp '/' exp {$$=temp();if(i<=1){printf("t%c=%c/%c\n",$$,$1,$3); } else {printf("t%c=t%c/%c\n",$$,$1,$3);} }
|var {$$=$1;}
;
%%
main()
{
yyparse();
return 0;
}
int yyerror(char *s)
{
fprintf(stderr,"%s\n",s);
}
char temp()
{
return('1'+ i++);
}
но когда я скомпилирую это
three.y: 19.40-41: $ 3 строки не имеет объявленного типа
three.y: 21.20-21: $$ для exp не имеет объявленного типа
three.y: 21.60-61: $$ для exp не имеет объявленного типа
three.y: 21.63-64: $ 1 для exp не имеет объявленного типа
three.y: 21.66-67: $ 3 для exp не имеет объявленного типа
three.y: 21.100-101: $$ для exp не имеет объявленного типа
three.y: 21.103-104: $ 1 для exp не имеет объявленного типа
three.y: 21.106-107: $ 3 для exp не имеет объявленного типа
three.y: 22.21-22: $$ для exp не имеет объявленного типа
three.y: 22.61-62: $$ для exp не имеет объявленного типа
three.y: 22.64-65: $ 1 для exp не имеет объявленного типа
three.y: 22.67-68: $ 3 для exp не имеет объявленного типа
three.y: 22.104-105: $ 1 для exp не имеет объявленного типа
three.y: 22.107-108: $ 3 для exp не имеет объявленного типа
three.y: 23.22-23: $$ для exp не имеет объявленного типа
three.y: 23.62-63: $$ для `exp 'не имеет объявленного типа
three.y: 23.65-66: $ 1 для exp не имеет объявленного типа
three.y: 23.68-69: $ 3 для exp не имеет объявленного типа
three.y: 23.102-103: $$ для `exp 'не имеет объявленного типа
three.y: 23.105-106: $ 1 для exp не имеет объявленного типа
three.y: 23.108-109: $ 3 для exp не имеет объявленного типа
three.y: 24.21-22: $$ для exp не имеет объявленного типа
three.y: 24.61-62: $$ для exp не имеет объявленного типа
three.y: 24.64-65: $ 1 для exp не имеет объявленного типа
three.y: 24.67-68: $ 3 для exp не имеет объявленного типа
three.y: 24.102-103: $$ для `exp 'не имеет объявленного типа
three.y: 24.105-106: $ 1 для exp не имеет объявленного типа
three.y: 24.108-109: $ 3 для exp не имеет объявленного типа
three.y: 25.10-11: $$ для `exp 'не имеет объявленного типа
PL, помогите мне решить это ..