[作業] 請問compiler中error的問題

看板b93902HW作者 (微積分爆炸啦!!!)時間18年前 (2007/05/28 22:42), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串1/2 (看更多)
下面code是修改老師投影片上的範例 (沒改的地方就不打了) %{ void yyerror(char *s) { printf("in yyerror , reenter\n"); } %} %% lines : lines expr '\n' {printf("%d\n", $2);} | lines '\n' | /* empty */ | lines error '\n' { yyerror(""); yyerrok;} ; %% 輸入 6 + g '\n' 輸出 error token <g> in yyerror , reenter in yyerror , reenter 想請教為什麼會跑進yyerror兩次咧?? line / | \ / | \ / | \ / | \ / error \ / / | \ \ | / | | | line expr | ERROR | | | | | | | | | | | ε 6 + g '\n' 照上面的tree是有做一次line -> line error '\n'這個reduce 請問是我的觀念有錯嗎 還有請問yyerrok是要做什麼的阿? 我有試著把他刪掉,但輸出並沒有改變..... 感謝大家的回答 <(_ _)> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.246.121 ※ 編輯: hahasouliu 來自: 140.112.246.121 (05/28 22:43) ※ 編輯: hahasouliu 來自: 140.112.246.121 (05/28 22:43)

05/28 22:49, , 1F
好像 yacc 碰到error的時候會先call yyerror("syntax error")
05/28 22:49, 1F

05/28 23:13, , 2F
謝謝~
05/28 23:13, 2F
文章代碼(AID): #16MkfZ58 (b93902HW)
文章代碼(AID): #16MkfZ58 (b93902HW)