我试图使用Bison / Yacc解析文件,但我想暂停解析一段时间。我想这样做的原因是我想按顺序处理一个巨大的文件,并使用hasNext()和next()方法模拟一个java迭代器。
一个简单的例子是,使用yacc逐行拆分文件,所以我可以调用:
while(myYaccObj.hasNext())
{
std::string line = myYaccObj.next()
}
我无法找到如何“暂停”文件扫描。有没有办法做到这一点?
答案 0 :(得分:2)
最简单的方法就是直接在动作代码中暂停。例如,您可以有一条规则:
rule: whatever { Pause(); }
;
这会调用你的Pause
函数,它可以暂停和/或做你想做的任何事情。如果要继续解析,只需返回Pause
函数。
答案 1 :(得分:0)
实际上暂停对我意味着“保持状态并完成yyparse”调用。例如,在我的gramar中,我会这样做:
rule:
SaveLine;
Pause;
然后控件返回到我的代码。我做我必须做的事情然后我打电话:
yyparse_resume();
并继续解析直到另一个暂停或EOF。