@Override public void semanticPredicate(boolean result, String predicate) { stats.numSemanticPredicates++; if ( inDecision() ) { DecisionEvent d = currentDecision(); d.evalSemPred = true; d.decision.numSemPredEvals++; if (dump) System.out.println("eval "+predicate+" in "+d.decision.ruleName+"-"+ d.decision.decision); } }
protected String locationDescription() { return locationDescription( currentGrammarFileName.peek(), currentRuleName.peek(), currentLine.peek(), currentPos.peek()); }
@Override public void consumeToken(Token token) { if (dump) System.out.println("consume token "+token); if ( !inDecision() ) { stats.numTokens++; return; } if ( lastRealTokenTouchedInDecision==null || lastRealTokenTouchedInDecision.getTokenIndex() < token.getTokenIndex() ) { lastRealTokenTouchedInDecision = token; } DecisionEvent d = currentDecision(); // compute lookahead depth int thisRefIndex = token.getTokenIndex(); int numHidden = getNumberOfHiddenTokens(d.startIndex, thisRefIndex); int depth = thisRefIndex - d.startIndex - numHidden + 1; // +1 counts consuming start token as 1 //d.maxk = Math.max(d.maxk, depth); if (dump) System.out.println("consume "+thisRefIndex+" "+depth+" tokens ahead in "+ d.decision.ruleName+"-"+d.decision.decision+" start index "+d.startIndex); }
stats.avgkPerBacktrackingDecisionEvent /= (double)stats.numBacktrackOccurrences; System.err.println(toString()); System.err.println(getDecisionStatsDump());
/** Track backtracking decisions. You'll see a fixed or cyclic decision * and then a backtrack. * * enter rule * ... * enter decision * LA and possibly consumes (for cyclic DFAs) * begin backtrack level * mark m * rewind m * end backtrack level, success * exit decision * ... * exit rule */ @Override public void beginBacktrack(int level) { if (dump) System.out.println("enter backtrack "+level); backtrackDepth++; DecisionEvent e = currentDecision(); if ( e.decision.couldBacktrack ) { stats.numBacktrackOccurrences++; e.decision.numBacktrackOccurrences++; e.backtracks = true; } }
@Override public void consumeHiddenToken(Token token) { //System.out.println("consume hidden token "+token); if ( !inDecision() ) stats.numHiddenTokens++; }
public void exitDecision(int decisionNumber) { DecisionEvent d = decisionStack.pop(); d.stopTime = System.currentTimeMillis(); int lastTokenIndex = lastRealTokenTouchedInDecision.getTokenIndex(); int numHidden = getNumberOfHiddenTokens(d.startIndex, lastTokenIndex); int depth = lastTokenIndex - d.startIndex - numHidden + 1; // +1 counts consuming start token as 1 d.k = depth; d.decision.maxk = Math.max(d.decision.maxk, depth); if (dump) System.out.println("exitDecision "+decisionNumber+" in "+d.decision.ruleName+ " lookahead "+d.k +" max token "+lastRealTokenTouchedInDecision); decisionEvents.add(d); // done with decision; track all }
public void consumeToken(Token token) { if (dump) System.out.println("consume token "+token); if ( !inDecision() ) { stats.numTokens++; return; } if ( lastRealTokenTouchedInDecision==null || lastRealTokenTouchedInDecision.getTokenIndex() < token.getTokenIndex() ) { lastRealTokenTouchedInDecision = token; } DecisionEvent d = currentDecision(); // compute lookahead depth int thisRefIndex = token.getTokenIndex(); int numHidden = getNumberOfHiddenTokens(d.startIndex, thisRefIndex); int depth = thisRefIndex - d.startIndex - numHidden + 1; // +1 counts consuming start token as 1 //d.maxk = Math.max(d.maxk, depth); if (dump) System.out.println("consume "+thisRefIndex+" "+depth+" tokens ahead in "+ d.decision.ruleName+"-"+d.decision.decision+" start index "+d.startIndex); }
stats.avgkPerBacktrackingDecisionEvent /= (double)stats.numBacktrackOccurrences; System.err.println(toString()); System.err.println(getDecisionStatsDump());
/** Track backtracking decisions. You'll see a fixed or cyclic decision * and then a backtrack. * * enter rule * ... * enter decision * LA and possibly consumes (for cyclic DFAs) * begin backtrack level * mark m * rewind m * end backtrack level, success * exit decision * ... * exit rule */ public void beginBacktrack(int level) { if (dump) System.out.println("enter backtrack "+level); backtrackDepth++; DecisionEvent e = currentDecision(); if ( e.decision.couldBacktrack ) { stats.numBacktrackOccurrences++; e.decision.numBacktrackOccurrences++; e.backtracks = true; } }
@Override public void consumeHiddenToken(Token token) { //System.out.println("consume hidden token "+token); if ( !inDecision() ) stats.numHiddenTokens++; }
@Override public void exitDecision(int decisionNumber) { DecisionEvent d = decisionStack.pop(); d.stopTime = System.currentTimeMillis(); int lastTokenIndex = lastRealTokenTouchedInDecision.getTokenIndex(); int numHidden = getNumberOfHiddenTokens(d.startIndex, lastTokenIndex); int depth = lastTokenIndex - d.startIndex - numHidden + 1; // +1 counts consuming start token as 1 d.k = depth; d.decision.maxk = Math.max(d.decision.maxk, depth); if (dump) System.out.println("exitDecision "+decisionNumber+" in "+d.decision.ruleName+ " lookahead "+d.k +" max token "+lastRealTokenTouchedInDecision); decisionEvents.add(d); // done with decision; track all }
@Override public void consumeToken(Token token) { if (dump) System.out.println("consume token "+token); if ( !inDecision() ) { stats.numTokens++; return; } if ( lastRealTokenTouchedInDecision==null || lastRealTokenTouchedInDecision.getTokenIndex() < token.getTokenIndex() ) { lastRealTokenTouchedInDecision = token; } DecisionEvent d = currentDecision(); // compute lookahead depth int thisRefIndex = token.getTokenIndex(); int numHidden = getNumberOfHiddenTokens(d.startIndex, thisRefIndex); int depth = thisRefIndex - d.startIndex - numHidden + 1; // +1 counts consuming start token as 1 //d.maxk = Math.max(d.maxk, depth); if (dump) System.out.println("consume "+thisRefIndex+" "+depth+" tokens ahead in "+ d.decision.ruleName+"-"+d.decision.decision+" start index "+d.startIndex); }
@Override public void semanticPredicate(boolean result, String predicate) { stats.numSemanticPredicates++; if ( inDecision() ) { DecisionEvent d = currentDecision(); d.evalSemPred = true; d.decision.numSemPredEvals++; if (dump) System.out.println("eval "+predicate+" in "+d.decision.ruleName+"-"+ d.decision.decision); } }
stats.avgkPerBacktrackingDecisionEvent /= (double)stats.numBacktrackOccurrences; System.err.println(toString()); System.err.println(getDecisionStatsDump());
protected String locationDescription() { return locationDescription( currentGrammarFileName.peek(), currentRuleName.peek(), currentLine.peek(), currentPos.peek()); }
/** Track backtracking decisions. You'll see a fixed or cyclic decision * and then a backtrack. * * enter rule * ... * enter decision * LA and possibly consumes (for cyclic DFAs) * begin backtrack level * mark m * rewind m * end backtrack level, success * exit decision * ... * exit rule */ @Override public void beginBacktrack(int level) { if (dump) System.out.println("enter backtrack "+level); backtrackDepth++; DecisionEvent e = currentDecision(); if ( e.decision.couldBacktrack ) { stats.numBacktrackOccurrences++; e.decision.numBacktrackOccurrences++; e.backtracks = true; } }
@Override public void consumeHiddenToken(Token token) { //System.out.println("consume hidden token "+token); if ( !inDecision() ) stats.numHiddenTokens++; }