public ProfileStats getReport() { // TokenStream input = parser.getTokenStream(); // for (int i=0; i<input.size()&& lastRealTokenTouchedInDecision !=null&&i<= // lastRealTokenTouchedInDecision.getTokenIndex(); i++) { // Token t = input.get(i); // if ( t.getChannel()!=Token.DEFAULT_CHANNEL ) { // stats.numHiddenTokens++; // stats.numHiddenCharsMatched += t.getText().length(); // } // } stats.Version = Version; stats.name = parser.getClass().getName(); stats.numUniqueRulesInvoked = uniqueRules.size(); // stats.numCharsMatched = lastTokenConsumed.getStopIndex() + 1; return stats; }
public void enterRule(String grammarFileName, String ruleName) { // System.out.println("enterRule "+grammarFileName+":"+ruleName); ruleLevel++; stats.numRuleInvocations++; uniqueRules.add(grammarFileName + ":" + ruleName); stats.maxRuleInvocationDepth = Math.max(stats.maxRuleInvocationDepth, ruleLevel); currentGrammarFileName.push(grammarFileName); currentRuleName.push(ruleName); }
public void terminate() { for (DecisionEvent e : decisionEvents) { // System.out.println("decision "+e.decision.decision+": k="+e.k); e.decision.avgk += e.k; stats.avgkPerDecisionEvent += e.k; if (e.backtracks) { // doesn't count gated syn preds on DFA edges stats.avgkPerBacktrackingDecisionEvent += e.k; } } stats.averageDecisionPercentBacktracks = 0.0f; for (DecisionDescriptor d : decisions.values()) { stats.numDecisionsCovered++; d.avgk /= (double) d.n; if (d.couldBacktrack) { stats.numDecisionsThatPotentiallyBacktrack++; float percentBacktracks = d.numBacktrackOccurrences / (float) d.n; // System.out.println("dec "+d.decision+" backtracks "+percentBacktracks*100+"%"); stats.averageDecisionPercentBacktracks += percentBacktracks; } // ignore rules that backtrack along gated DFA edges if (d.numBacktrackOccurrences > 0) { stats.numDecisionsThatDoBacktrack++; } } stats.averageDecisionPercentBacktracks /= stats.numDecisionsThatPotentiallyBacktrack; stats.averageDecisionPercentBacktracks *= 100; // it's a percentage stats.avgkPerDecisionEvent /= stats.numDecisionEvents; stats.avgkPerBacktrackingDecisionEvent /= (double) stats.numBacktrackOccurrences; System.err.println(toString()); System.err.println(getDecisionStatsDump()); // String stats = toNotifyString(); // try { // Stats.writeReport(RUNTIME_STATS_FILENAME,stats); // } // catch (IOException ioe) { // System.err.println(ioe); // ioe.printStackTrace(System.err); // } }