2

我有一个大文件,我试图用 Java 中的 Antlr 解析,我想展示一下进度。

看起来可以执行以下操作:

CommonTokenStream tokens = new CommonTokenStream(lexer);
int maxTokenIndex = tokens.size();

然后maxTokenIndex在 aParseTreeListener中使用:

public void exitMyRule(MyRuleContext context) {
    int tokenIndex = context.start.getTokenIndex();
    myReportProgress(tokenIndex, maxTokenIndex);
}

后半部分似乎奏效了。我得到不断增加的价值tokenIndex。但是,tokens.size()返回 0。这使得无法衡量我取得了多少进展。

有什么好方法可以估计我走了多远?

4

1 回答 1

2

以下似乎有效。

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());
}
于 2013-11-12T15:41:32.127 回答