报告解析器的进度

时间:2013-10-24 16:28:29

标签: java antlr progress antlr4

我有一个大文件,我试图用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.这使我无法估计我取得了多少进展。

有没有一种好方法可以估算出我的距离?

1 个答案:

答案 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());
}