我有一个大文件,我试图用Java中的Antlr解析,我想展示进展。
看起来可以做到以下几点:
CommonTokenStream tokens = new CommonTokenStream(lexer);
int maxTokenIndex = tokens.size();
然后在maxTokenIndex
中使用ParseTreeListener
:
public void exitMyRule(MyRuleContext context) {
int tokenIndex = context.start.getTokenIndex();
myReportProgress(tokenIndex, maxTokenIndex);
}
下半部分似乎有效。我的tokenIndex
价值越来越高。但是,tokens.size()
返回0.这使我无法估计我取得了多少进展。
有没有一种好方法可以估算出我的距离?
答案 0 :(得分:1)
以下似乎有效。
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());
}