Exemple #1
0
 /**
  * Track backtracking decisions. You'll see a fixed or cyclic decision and then a backtrack.
  *
  * <p>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;
   }
 }
Exemple #2
0
 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);
   }
 }
Exemple #3
0
  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
  }
Exemple #4
0
  public void enterDecision(int decisionNumber, boolean couldBacktrack) {
    lastRealTokenTouchedInDecision = null;
    stats.numDecisionEvents++;
    int startingLookaheadIndex = parser.getTokenStream().index();
    TokenStream input = parser.getTokenStream();
    if (dump)
      System.out.println(
          "enterDecision canBacktrack="
              + couldBacktrack
              + " "
              + decisionNumber
              + " backtrack depth "
              + backtrackDepth
              + " @ "
              + input.get(input.index())
              + " rule "
              + locationDescription());
    String g = (String) currentGrammarFileName.peek();
    DecisionDescriptor descriptor = decisions.get(g, decisionNumber);
    if (descriptor == null) {
      descriptor = new DecisionDescriptor();
      decisions.put(g, decisionNumber, descriptor);
      descriptor.decision = decisionNumber;
      descriptor.fileName = (String) currentGrammarFileName.peek();
      descriptor.ruleName = (String) currentRuleName.peek();
      descriptor.line = (Integer) currentLine.peek();
      descriptor.pos = (Integer) currentPos.peek();
      descriptor.couldBacktrack = couldBacktrack;
    }
    descriptor.n++;

    DecisionEvent d = new DecisionEvent();
    decisionStack.push(d);
    d.decision = descriptor;
    d.startTime = System.currentTimeMillis();
    d.startIndex = startingLookaheadIndex;
  }