[作业] 请问compiler中error的问题

楼主: hahasouliu (微积分爆炸啦!!!)   2007-05-28 22:42:39
下面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是要做什么的阿?
我有试着把他删掉,但输出并没有改变.....
感谢大家的回答 <(_ _)>
作者: ddio (冲一个吧笨蛋!)   2007-05-28 22:49:00
好像 yacc 碰到error的时候会先call yyerror("syntax error")
楼主: hahasouliu (微积分爆炸啦!!!)   2007-05-28 23:13:00
谢谢~

Links booklink

Contact Us: admin [ a t ] ucptt.com