我试图使用Bison/Yacc解析文件,但我想暂停解析一段时间。我想这样做的原因是,我想按顺序处理一个巨大的文件,并使用hasNext()和next()方法模拟java迭代器。如何让yacc/bison和lex/flex暂停文件扫描?
一个简单的例子是,使用YACC,所以我可以调用由线分割的文件:
while(myYaccObj.hasNext())
{
std::string line = myYaccObj.next()
}
我找不到如何“暂停”的文件扫描。有没有办法做到这一点?
由于[过度渴望的元用户决定](http://meta.stackexchange.com/questions/23959/whats-this-about-labelled-tags),[flex]标签表示Adobe产品对于词法分析器生成器,您需要使用错误的[gnu-flex]。 – dmckee 2010-11-08 16:46:50
什么哟意味着“暂停”扫描!当你调用这个函数时,Flex会生成一个函数(或方法:yylex()),它将读取** ONE **标记(lexeme)然后返回。 – 2010-11-08 19:27:53
我怀疑问题是Tlol没有直接使用Flex,@Martin。相反,他使用的是Bison,而Bison在需要的时候隐式地调用'yylex'。常见的Bison用法是调用'yyparse'来产生一个大的AST。我想Tlol想知道如何递增地解析文件,而不是在一个'yyparse'调用中。 – 2010-11-08 19:56:12