1
我試圖從文件(例如1 + 2)中讀取值並在控制檯中輸出答案。操作符正常工作併產生正確的結果,但輸出中的初始值完全錯誤。例如,當我嘗試5 + 3時,它顯示爲6432824 + 6432824 = 12865648,當再次運行它時,顯示爲4597832 + 4597832 = 9195664.因此,即使5和3不同(顯然)顯示它們作爲相同的數字,並且每次運行時看似隨機。我怎樣才能解決這個問題?Flex和野牛計算器計算問題
下面的代碼:
Flex的文件:
%{
#include <stdio.h>
#include <stdlib.h>
#include "y.tab.h"
extern FILE* yyin;
FILE* FileOutput;
#define YYSTYPE int
%}
%%
[0-9]+ { yylval = (int)yytext; return INTEGER; }
"+" return ADD;
"-" return SUBTRACT;
"*" return MULTIPLY;
"/" return DIVIDE;
[ \t] ;
. yyerror();
%%
int main(int argc, char *argv[])
{
yyin = fopen(argv[1], "r");
FileOutput = fopen("output.c", "w");
yyparse();
fclose(FileOutput);
return 0;
}
int yywrap(void)
{
return 1;
}
int yyerror(void)
{
printf("Error\n");
}
野牛文件:
%{
#include <stdio.h>
#include <stdlib.h>
extern FILE* FileOutput;
#define YYSTYPE int
void createcode(int result, int a, unsigned char op, int b);
%}
%token INTEGER
%token ADD SUBTRACT MULTIPLY DIVIDE
%left ADD SUBTRACT
%left MULTIPLY DIVIDE
%%
program:
| program statement
;
statement:
expression '\n' { printf("%d\n", $1); }
| error '\n' { yyerrok; }
;
expression:
INTEGER { $$ = $1; }
| expression ADD expression { $$ = $1 + $3, createcode($$, $1, '+', $3);}
| expression SUBTRACT expression { $$ = $1 - $3; createcode($$, $1, '-', $3);}
| expression MULTIPLY expression { $$ = $1 * $3; createcode($$, $1, '*', $3);}
| expression DIVIDE expression { $$ = $1/$3; createcode($$, $1, '/', $3);}
| '(' expression ')' { $$ = $2; }
;
%%
void createcode(int result, int a, unsigned char op, int b)
{
printf("%d %c %d = %d", a, op, b, result);
fprintf(FileOutput, "%d %c %d = %d", a, op, b, result);
}
謝謝,它的工作〜! http://i.4cdn.org/v/src/1394049079355.png BlackDrMario隨時準備填寫您的處方,只要你需要它。 – BlackDrMario