Ich habe Flex und Bison für die Herstellung eines kleinen Taschenrechners verwendet. Meine Dateien sind die folgenden:Flex und Bison Ausgabe für reelle Zahlen
bisonFile.y
%{
#include <stdio.h>
%}
/* declare tokens */
%token NUMBER
%token ADD SUB MUL DIV ABS
%token EOL
%%
calclist: /* nothing */
| calclist exp EOL { printf("= %d\n", $2); }
;
exp: factor
| exp ADD factor { $$ = $1 + $3; }
| exp SUB factor { $$ = $1 - $3; }
;
factor: term
| factor MUL term { $$ = $1 * $3; }
| factor DIV term { $$ = $1/$3; }
;
term: NUMBER
| ABS term { $$ = $2 >= 0? $2 : - $2; }
;
%%
main(int argc, char **argv)
{
yyparse();
}
yyerror(char *s)
{
fprintf(stderr, "error: %s\n", s);
}
flexFile.l
%{
# include "f5.tab.h"
int yylval;
%}
/* reconocimiento de tokens e impresion */
%{
int yylval;
%}
%option noyywrap
%%
"+" { return ADD; }
"-" { return SUB; }
"*" { return MUL; }
"/" { return DIV; }
"|" { return ABS; }
[0-9]+("."[0-9]+)? { yylval = atoi(yytext); return NUMBER; } //part added
\n { return EOL; }
[ \t] { /* ignore whitespace */ }
. { printf("Mystery character %c\n", *yytext); }
%%
Mein Programm arbeitet mit Integer-Zahlen in Ordnung, und es erkennt auch reelle Zahlen, aber das Problem ist, dass Wenn ich die Ergebnisse einer Operation drucke, gibt sie immer die Antwort als Ganzzahl zurück. Warum das?
Dank
Ich habe das auch schon versucht, und druckt immer noch die Antwort als eine ganze Zahl – Little