2013-10-24 41 views
1

我有一个很大的文件,我试图用Java中的Antlr解析,我想显示进度。解析器的报告进度

它看起来像可以做到以下几点:

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

,然后用maxTokenIndexParseTreeListener这样:

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

的是,下半年似乎工作。我获得了tokenIndex的增加值。但是,tokens.size()正在返回0.这使得我无法衡量我已经取得了多大进展。

有没有很好的方法来估计我有多远?

回答

1

以下显示工作。

File file = getFile(); 
ANTLRInputStream input = new ANTLRInputStream(new FileReader(file)); 
ProgressMonitor progress = new ProgressMonitor(null, 
               "Loading " + file.getName(), 
               null, 
               0, 
               input.size()); 

然后用

@Override 
public void exitMyRule(MyRuleContext context) { 
    progress.setProgress(context.stop.getStopIndex()); 
} 
延伸 MyGrammarBaseListener