报告解析器的进度



我有一个大文件,我正在尝试用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());
}

相关内容

  • 没有找到相关文章

最新更新