我試圖使用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