作者hahasouliu (微積分爆炸啦!!!)
看板b93902HW
標題[作業] 請問compiler中error的問題
時間Mon May 28 22:42:39 2007
下面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)
推 ddio:好像 yacc 碰到error的時候會先call yyerror("syntax error") 05/28 22:49
推 hahasouliu:謝謝~ 05/28 23:13