[問題] lex&yacc 簡易計算

看板C_and_CPP作者 (Sean)時間7年前 (2018/12/17 10:29), 7年前編輯推噓2(203)
留言5則, 4人參與, 7年前最新討論串1/1
要寫一個 支援+-*/()和負數的計算程式 但是導入測資之後一切正常 就是最後一個測資的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
t.txt ← 可以上傳到網路嘛,方便 debug
12/17 13:07, 2F
我只是隨便打幾個算式而已 等等補貼 ※ 編輯: aa1727 (39.10.237.189), 12/17/2018 16:10:26

12/18 00:16, 7年前 , 3F
expression最後一個推導成yyerror那行刪掉呢?
12/18 00:16, 3F

12/18 14:38, 7年前 , 4F
program是不是要加一個變成expression '\n',不然好像
12/18 14:38, 4F

12/18 14:38, 7年前 , 5F
沒辦法結束?
12/18 14:38, 5F
文章代碼(AID): #1S5meK6d (C_and_CPP)