由买买提看人间百态

topics

全部话题 - 话题: yyarse
(共0页)
g*********s
发帖数: 1782
1
来自主题: Programming版 - 多次调用yyarse()的buffer flush问题。
在一个程序里反复调用yyparse()的时候,第一次调用出错后,之后所有的调用都出错
,即使后面的文件是正取的。看上去是buffer没有flush/reset。
放狗搜了一下,看上去这篇文章最靠谱。但是怎么在程序里调用YY_FLUSH_BUFFER啊?
这个是flex自己生成的macro。
http://olympus.het.brown.edu/cgi-bin/info2www?(bison)How+Can+I+Reset+the+Parser
c*****t
发帖数: 1879
2
来自主题: Programming版 - 多次调用yyarse()的buffer flush问题。
你找错方向了。
一般来说,跟 lexer 没关系。你最多改下 input 的 source 和 dfa state (回到
initial)而已。
至于 parser,我建议你仔细读下 bison 里面的 error handling 。里面讲的比较详
细。你要做的是 clear token stack 和 lookahead / error flag 。
g*********s
发帖数: 1782
3
来自主题: Programming版 - 多次调用yyarse()的buffer flush问题。
老大,原理明白了,再详细指点一下吧。又搜了半天,也看了bison的手册,还是没找
到具体操作。瞎猜了几个方案试了试,还是没解决问题。:(
g*********s
发帖数: 1782
4
来自主题: Programming版 - 多次调用yyarse()的buffer flush问题。
误打误撞,问题居然解决了。
第一个文件有个/*,但没有匹配的*/,就一直找到文件尾,然后报错返回。
下面这个方案经过验证可行:
<> {printf("unfinished comments when file ends\n"); YY_FLUSH_
BUFFER; BEGIN INITIAL; }
但对flex/bison这套错误处理机制还是不太清楚。
(共0页)