/* 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.
*/
#pragma once
#include "atn/ContextSensitivityInfo.h"
#include "atn/AmbiguityInfo.h"
#include "atn/PredicateEvalInfo.h"
#include "atn/ErrorInfo.h"
namespace antlr4 {
namespace atn {
class LookaheadEventInfo;
///
/// This class contains profiling gathered for a particular decision.
///
///
/// Parsing performance in ANTLR 4 is heavily influenced by both static factors
/// (e.g. the form of the rules in the grammar) and dynamic factors (e.g. the
/// choice of input and the state of the DFA cache at the time profiling
/// operations are started). For best results, gather and use aggregate
/// statistics from a large sample of inputs representing the inputs expected in
/// production before using the results to make changes in the grammar.
///
/// @since 4.3
///
class ANTLR4CPP_PUBLIC DecisionInfo {
public:
///
/// The decision number, which is an index into .
///
const size_t decision;
///
/// The total number of times was
/// invoked for this decision.
///
long long invocations = 0;
///
/// The total time spent in for
/// this decision, in nanoseconds.
///
///
/// The value of this field contains the sum of differential results obtained
/// by , and is not adjusted to compensate for JIT
/// and/or garbage collection overhead. For best accuracy, use a modern JVM
/// implementation that provides precise results from
/// , and perform profiling in a separate process
/// which is warmed up by parsing the input prior to profiling. If desired,
/// call to reset the DFA cache to its initial
/// state before starting the profiling measurement pass.
///
long long timeInPrediction = 0;
///
/// The sum of the lookahead required for SLL prediction for this decision.
/// Note that SLL prediction is used before LL prediction for performance
/// reasons even when or
/// is used.
///
long long SLL_TotalLook = 0;
///
/// Gets the minimum lookahead required for any single SLL prediction to
/// complete for this decision, by reaching a unique prediction, reaching an
/// SLL conflict state, or encountering a syntax error.
///
long long SLL_MinLook = 0;
///
/// Gets the maximum lookahead required for any single SLL prediction to
/// complete for this decision, by reaching a unique prediction, reaching an
/// SLL conflict state, or encountering a syntax error.
///
long long SLL_MaxLook = 0;
/// Gets the associated with the event where the
/// value was set.
Ref SLL_MaxLookEvent;
///
/// The sum of the lookahead required for LL prediction for this decision.
/// Note that LL prediction is only used when SLL prediction reaches a
/// conflict state.
///
long long LL_TotalLook = 0;
///
/// Gets the minimum lookahead required for any single LL prediction to
/// complete for this decision. An LL prediction completes when the algorithm
/// reaches a unique prediction, a conflict state (for
/// , an ambiguity state (for
/// , or a syntax error.
///
long long LL_MinLook = 0;
///
/// Gets the maximum lookahead required for any single LL prediction to
/// complete for this decision. An LL prediction completes when the algorithm
/// reaches a unique prediction, a conflict state (for
/// , an ambiguity state (for
/// , or a syntax error.
///
long long LL_MaxLook = 0;
///
/// Gets the associated with the event where the
/// value was set.
///
Ref LL_MaxLookEvent;
///
/// A collection of instances describing the
/// context sensitivities encountered during LL prediction for this decision.
///
///
std::vector contextSensitivities;
///
/// A collection of instances describing the parse errors
/// identified during calls to for
/// this decision.
///
///
std::vector errors;
///
/// A collection of instances describing the
/// ambiguities encountered during LL prediction for this decision.
///
///
std::vector ambiguities;
///
/// A collection of instances describing the
/// results of evaluating individual predicates during prediction for this
/// decision.
///
///
std::vector predicateEvals;
///
/// The total number of ATN transitions required during SLL prediction for
/// this decision. An ATN transition is determined by the number of times the
/// DFA does not contain an edge that is required for prediction, resulting
/// in on-the-fly computation of that edge.
///
///
/// If DFA caching of SLL transitions is employed by the implementation, ATN
/// computation may cache the computed edge for efficient lookup during
/// future parsing of this decision. Otherwise, the SLL parsing algorithm
/// will use ATN transitions exclusively.
///
///
///
///
long long SLL_ATNTransitions = 0;
///
/// The total number of DFA transitions required during SLL prediction for
/// this decision.
///
/// If the ATN simulator implementation does not use DFA caching for SLL
/// transitions, this value will be 0.
///
///
///
long long SLL_DFATransitions = 0;
///
/// Gets the total number of times SLL prediction completed in a conflict
/// state, resulting in fallback to LL prediction.
///
/// Note that this value is not related to whether or not
/// may be used successfully with a particular
/// grammar. If the ambiguity resolution algorithm applied to the SLL
/// conflicts for this decision produce the same result as LL prediction for
/// this decision, would produce the same overall
/// parsing result as .
///
long long LL_Fallback = 0;
///
/// The total number of ATN transitions required during LL prediction for
/// this decision. An ATN transition is determined by the number of times the
/// DFA does not contain an edge that is required for prediction, resulting
/// in on-the-fly computation of that edge.
///
///
/// If DFA caching of LL transitions is employed by the implementation, ATN
/// computation may cache the computed edge for efficient lookup during
/// future parsing of this decision. Otherwise, the LL parsing algorithm will
/// use ATN transitions exclusively.
///
///
///
///
long long LL_ATNTransitions = 0;
///
/// The total number of DFA transitions required during LL prediction for
/// this decision.
///
/// If the ATN simulator implementation does not use DFA caching for LL
/// transitions, this value will be 0.
///
///
///
long long LL_DFATransitions = 0;
///
/// Constructs a new instance of the class to contain
/// statistics for a particular decision.
///
/// The decision number
DecisionInfo(size_t decision);
std::string toString() const;
};
} // namespace atn
} // namespace antlr4