lex/yacc如何reset buffer?# Programming - 葵花宝典
g*s
1 楼
有这么一个问题:
for (int i = 0; i < n; i ++) {
yyin = fopen(f[i], "r");
try {
yyparse();
}
catch ...
}
这里.y里重定义了yyerror,有语法错就throw一个exception。
现在的问题是,如果f[1]有parse error,之后的f[2],f[3]等还是从f[1]原来的yylex
buffer里拿token,而不是自己的文件里。
怎么才能在yyerror()里,throw exception之前reset yylex buffer呢?放狗搜了一下
,有个YY_FLUSH_BUFFER的macro,但这个是只在.l里可见的,而.y里不可见。
另外现在还有人用flex/bison吗?很麻烦啊。
for (int i = 0; i < n; i ++) {
yyin = fopen(f[i], "r");
try {
yyparse();
}
catch ...
}
这里.y里重定义了yyerror,有语法错就throw一个exception。
现在的问题是,如果f[1]有parse error,之后的f[2],f[3]等还是从f[1]原来的yylex
buffer里拿token,而不是自己的文件里。
怎么才能在yyerror()里,throw exception之前reset yylex buffer呢?放狗搜了一下
,有个YY_FLUSH_BUFFER的macro,但这个是只在.l里可见的,而.y里不可见。
另外现在还有人用flex/bison吗?很麻烦啊。