Я изучаю Bison / Flex и не понимаю, как заставить тип $$ быть плавающим в файле .y.
scanner.l file
%{
#include "token.h"
%}
%%
[0-9]+ { return TOKEN_INT; }
"/" { return TOKEN_DIV; }
%%
int yywrap() { return 1; }
parser.y file
%{
#include <stdio.h>
void yyerror(char const *s) {} ;
extern char *yytext;
%}
%token TOKEN_INT
%token TOKEN_DIV
%%
program : expr
{
float div_result;
div_result=$1;
printf("In pgm %f \n",div_result);
} ;
expr : factor TOKEN_DIV factor
{
printf("In expr %f \n",(float)$1/(float)$3);
$$ = (float)$1 / (float)$3;
} ;
factor: TOKEN_INT { $$ = atoi(yytext); } ;
%%
int main() { yyparse(); }
В правиле expr вывод printf правильный.Например, если ввод 7/3, вывод на печать равен 2,333333.Но в правиле программы вывод printf равен 2.000000.
Кажется, что $$ в правиле expr или $ 1 в правиле программы имеет тип int.Правильно ?и почему?