/*
* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
* Use of this file is governed by the BSD 3-clause license that
* can be found in the LICENSE.txt file in the project root.
*/
package org.antlr.v4.runtime.atn;
import org.antlr.v4.runtime.dfa.DFA;
import java.util.ArrayList;
import java.util.List;
This class provides access to specific and aggregate statistics gathered
during profiling of a parser.
Since: 4.3
/**
* This class provides access to specific and aggregate statistics gathered
* during profiling of a parser.
*
* @since 4.3
*/
public class ParseInfo {
protected final ProfilingATNSimulator atnSimulator;
public ParseInfo(ProfilingATNSimulator atnSimulator) {
this.atnSimulator = atnSimulator;
}
Gets an array of DecisionInfo
instances containing the profiling information gathered for each decision in the ATN. Returns: An array of DecisionInfo
instances, indexed by decision number.
/**
* Gets an array of {@link DecisionInfo} instances containing the profiling
* information gathered for each decision in the ATN.
*
* @return An array of {@link DecisionInfo} instances, indexed by decision
* number.
*/
public DecisionInfo[] getDecisionInfo() {
return atnSimulator.getDecisionInfo();
}
Gets the decision numbers for decisions that required one or more full-context predictions during parsing. These are decisions for which DecisionInfo.LL_Fallback
is non-zero. Returns: A list of decision numbers which required one or more
full-context predictions during parsing.
/**
* Gets the decision numbers for decisions that required one or more
* full-context predictions during parsing. These are decisions for which
* {@link DecisionInfo#LL_Fallback} is non-zero.
*
* @return A list of decision numbers which required one or more
* full-context predictions during parsing.
*/
public List<Integer> getLLDecisions() {
DecisionInfo[] decisions = atnSimulator.getDecisionInfo();
List<Integer> LL = new ArrayList<Integer>();
for (int i=0; i<decisions.length; i++) {
long fallBack = decisions[i].LL_Fallback;
if ( fallBack>0 ) LL.add(i);
}
return LL;
}
Gets the total time spent during prediction across all decisions made during parsing. This value is the sum of DecisionInfo.timeInPrediction
for all decisions. /**
* Gets the total time spent during prediction across all decisions made
* during parsing. This value is the sum of
* {@link DecisionInfo#timeInPrediction} for all decisions.
*/
public long getTotalTimeInPrediction() {
DecisionInfo[] decisions = atnSimulator.getDecisionInfo();
long t = 0;
for (int i=0; i<decisions.length; i++) {
t += decisions[i].timeInPrediction;
}
return t;
}
Gets the total number of SLL lookahead operations across all decisions made during parsing. This value is the sum of DecisionInfo.SLL_TotalLook
for all decisions. /**
* Gets the total number of SLL lookahead operations across all decisions
* made during parsing. This value is the sum of
* {@link DecisionInfo#SLL_TotalLook} for all decisions.
*/
public long getTotalSLLLookaheadOps() {
DecisionInfo[] decisions = atnSimulator.getDecisionInfo();
long k = 0;
for (int i = 0; i < decisions.length; i++) {
k += decisions[i].SLL_TotalLook;
}
return k;
}
Gets the total number of LL lookahead operations across all decisions made during parsing. This value is the sum of DecisionInfo.LL_TotalLook
for all decisions. /**
* Gets the total number of LL lookahead operations across all decisions
* made during parsing. This value is the sum of
* {@link DecisionInfo#LL_TotalLook} for all decisions.
*/
public long getTotalLLLookaheadOps() {
DecisionInfo[] decisions = atnSimulator.getDecisionInfo();
long k = 0;
for (int i = 0; i < decisions.length; i++) {
k += decisions[i].LL_TotalLook;
}
return k;
}
Gets the total number of ATN lookahead operations for SLL prediction
across all decisions made during parsing.
/**
* Gets the total number of ATN lookahead operations for SLL prediction
* across all decisions made during parsing.
*/
public long getTotalSLLATNLookaheadOps() {
DecisionInfo[] decisions = atnSimulator.getDecisionInfo();
long k = 0;
for (int i = 0; i < decisions.length; i++) {
k += decisions[i].SLL_ATNTransitions;
}
return k;
}
Gets the total number of ATN lookahead operations for LL prediction
across all decisions made during parsing.
/**
* Gets the total number of ATN lookahead operations for LL prediction
* across all decisions made during parsing.
*/
public long getTotalLLATNLookaheadOps() {
DecisionInfo[] decisions = atnSimulator.getDecisionInfo();
long k = 0;
for (int i = 0; i < decisions.length; i++) {
k += decisions[i].LL_ATNTransitions;
}
return k;
}
Gets the total number of ATN lookahead operations for SLL and LL
prediction across all decisions made during parsing.
This value is the sum of getTotalSLLATNLookaheadOps
and getTotalLLATNLookaheadOps
.
/**
* Gets the total number of ATN lookahead operations for SLL and LL
* prediction across all decisions made during parsing.
*
* <p>
* This value is the sum of {@link #getTotalSLLATNLookaheadOps} and
* {@link #getTotalLLATNLookaheadOps}.</p>
*/
public long getTotalATNLookaheadOps() {
DecisionInfo[] decisions = atnSimulator.getDecisionInfo();
long k = 0;
for (int i = 0; i < decisions.length; i++) {
k += decisions[i].SLL_ATNTransitions;
k += decisions[i].LL_ATNTransitions;
}
return k;
}
Gets the total number of DFA states stored in the DFA cache for all
decisions in the ATN.
/**
* Gets the total number of DFA states stored in the DFA cache for all
* decisions in the ATN.
*/
public int getDFASize() {
int n = 0;
DFA[] decisionToDFA = atnSimulator.decisionToDFA;
for (int i = 0; i < decisionToDFA.length; i++) {
n += getDFASize(i);
}
return n;
}
Gets the total number of DFA states stored in the DFA cache for a
particular decision.
/**
* Gets the total number of DFA states stored in the DFA cache for a
* particular decision.
*/
public int getDFASize(int decision) {
DFA decisionToDFA = atnSimulator.decisionToDFA[decision];
return decisionToDFA.states.size();
}
}