我有一个大文件,我正在尝试用Java中的Antlr解析,我想显示进度。
看起来可以执行以下操作:
CommonTokenStream tokens = new CommonTokenStream(lexer);
int maxTokenIndex = tokens.size();
然后在ParseTreeListener
中使用maxTokenIndex
,如下所示:
public void exitMyRule(MyRuleContext context) {
int tokenIndex = context.start.getTokenIndex();
myReportProgress(tokenIndex, maxTokenIndex);
}
后半部分似乎奏效了。 我得到tokenIndex
的价值不断增加。 但是,tokens.size()
返回 0。 这使得我无法衡量我取得了多大的进步。
有没有一个好方法可以估计我走了多远?
以下方法似乎有效。
File file = getFile();
ANTLRInputStream input = new ANTLRInputStream(new FileReader(file));
ProgressMonitor progress = new ProgressMonitor(null,
"Loading " + file.getName(),
null,
0,
input.size());
然后扩展MyGrammarBaseListener
@Override
public void exitMyRule(MyRuleContext context) {
progress.setProgress(context.stop.getStopIndex());
}