[問題] lex&yacc 簡易計算
要寫一個 支援+-*/()和負數的計算程式
但是導入測資之後一切正常 就是最後一個測資的Ans不能跑出來反而跳到error 不知道哪
裡有問題
————————————————
程式碼:
Lex:
%{
#include <stdio.h>
#include "y.tab.h"
%}
%option noyywrap
%%
[0-9]+ { yylval = atoi(yytext); return INTEGER; }
[\+\-\*\/\(\)\n] { return *yytext; }
[\t] {}
. { yyerror("invalid char."); }
%%
————————————————-
Yacc:
%{
#include <stdio.h>
#include <stdlib.h>
#include "y.tab.h"
int yylex();
%}
%token INTEGER
%left '+' '-'
%left '*' '/'
%nonassoc UMINUS
%%
program:
|program expression '\n' { printf("Ans : %d\n\n", $2); }
;
expression :
INTEGER { $$ = $1; }
| expression '+' expression { $$ = $1 + $3;
printf("%d + %d = %d \n",$1,$3,$$);}
| expression '-' expression { $$ = $1 - $3;
printf("%d - %d = %d \n",$1,$3,$$);}
| expression '*' expression { $$ = $1 * $3;
printf("%d * %d = %d \n",$1,$3,$$);}
| expression '/' expression { $$ = $1 / $3;
printf("%d / %d = %d \n",$1,$3,$$);}
| '-' expression %prec UMINUS { $$ = -$2; }
| '(' expression ')' { $$ = $2; }
| { yyerror("invalid input.\n"); }
;
%%
int main()
{
yyparse();
return 0;
}
void yyerror(char *msg)
{
printf("Error: %s \n",msg);
}
———————————————-
編譯結果:
https://i.imgur.com/sRw39qw.jpg

最後一行都會是syntax error
不知道是不是發這個版 裡面有寫C應該是?!
找bug找很久但是找不到
求大神相救
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.10.237.189
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1545013780.A.1A7.html
※ 編輯: aa1727 (39.10.237.189), 12/17/2018 10:30:47
→
12/17 10:52,
7年前
, 1F
12/17 10:52, 1F
有 每一組都有換行
※ 編輯: aa1727 (39.10.237.189), 12/17/2018 11:46:19
※ 編輯: aa1727 (39.10.237.189), 12/17/2018 11:50:13
推
12/17 13:07,
7年前
, 2F
12/17 13:07, 2F
我只是隨便打幾個算式而已 等等補貼
※ 編輯: aa1727 (39.10.237.189), 12/17/2018 16:10:26
推
12/18 00:16,
7年前
, 3F
12/18 00:16, 3F
→
12/18 14:38,
7年前
, 4F
12/18 14:38, 4F
→
12/18 14:38,
7年前
, 5F
12/18 14:38, 5F