2013-10-24 3 views
1

У меня есть большой файл, который я пытаюсь проанализировать с помощью Antlr в Java, и я хотел бы показать прогресс.Отчет о прогрессе анализатора

Похоже, могли бы сделать следующее:

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

Возможно, работает следующее.

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()); 
} 
Смежные вопросы