저는 바이슨의 다기능 계산기에서 일하고 있습니다. 다음 표현식이 프로그램에 전달되면 잘못된 답이 생성된다는 것을 알게되었습니다.들소와 굴곡 계산기에 문제가 있습니다
(1+2) * (2+1)
위 표현식은 9를 생성해야합니다. 그러나 다음 설정에서 6을 생성합니다.
이 들소 코드 :
D [0-9]
WS [ \t\v\f]
%%
{D}+ { yylval = atof(yytext); return NUMBER; }
"+" { return yytext[0]; }
"-" { return yytext[0]; }
"*" { return yytext[0]; }
"/" { return yytext[0]; }
"(" { return yytext[0]; }
")" { return yytext[0]; }
"\n" { return yytext[0]; }
{WS} {}
. {}
%%
감사
%token NUMBER
%%
statement_list: statement '\n'
| statement_list statement '\n'
;
statement: expression { printf("= %d\n", $1); };
expression: expression '+' term { $$ = $1 + $3; }
| expression '-' term { $$ = $1 - $3; }
| term { $$ = $1; }
;
term: term '*' factor { $$ = $1 * $3; }
| term '/' factor
{ if ($3 == 0)
yyerror("Division by zero");
else $$ = $1/$3; }
| factor { $$ = $1; }
;
factor: '(' expression ')' { $$ = $2; }
| '-' factor { $$ = -$2; }
| NUMBER { $$ = $1; }
;
%%
이것은 플렉스 코드, 알리
불행하게도
문제가 해결되었습니다. "("및 ")"을 플렉스 코드에 넣지 않았습니다 . – Ali