lines | lines error '\n' { yyerror(""); yyerrok;}
error 产生 yacc 自动 call 一次 yyerror
lines .... '\n' reduced 前 你又 call 一次 yyerror
所以就做了两次
至于yyerrok请看
http://www.gnu.org/software/bison/manual/html_mono/bison.html
搜寻yyerrok
the statement yyerrok, a macro defined automatically by Bison;
its meaning is that error recovery is complete
建议: yyerror 放空, 什么事都不要做
请看看 tinyC.tgz or tinyC++.tgz 的 system.cpp 档