/* 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. */ #include "atn/ProfilingATNSimulator.h" #include "dfa/DFA.h" #include "atn/ParseInfo.h" using namespace antlr4::atn; ParseInfo::ParseInfo(ProfilingATNSimulator *atnSimulator) : _atnSimulator(atnSimulator) { } ParseInfo::~ParseInfo() { } std::vector ParseInfo::getDecisionInfo() { return _atnSimulator->getDecisionInfo(); } std::vector ParseInfo::getLLDecisions() { std::vector decisions = _atnSimulator->getDecisionInfo(); std::vector LL; for (size_t i = 0; i < decisions.size(); ++i) { long long fallBack = decisions[i].LL_Fallback; if (fallBack > 0) { LL.push_back(i); } } return LL; } long long ParseInfo::getTotalTimeInPrediction() { std::vector decisions = _atnSimulator->getDecisionInfo(); long long t = 0; for (size_t i = 0; i < decisions.size(); ++i) { t += decisions[i].timeInPrediction; } return t; } long long ParseInfo::getTotalSLLLookaheadOps() { std::vector decisions = _atnSimulator->getDecisionInfo(); long long k = 0; for (size_t i = 0; i < decisions.size(); ++i) { k += decisions[i].SLL_TotalLook; } return k; } long long ParseInfo::getTotalLLLookaheadOps() { std::vector decisions = _atnSimulator->getDecisionInfo(); long long k = 0; for (size_t i = 0; i < decisions.size(); i++) { k += decisions[i].LL_TotalLook; } return k; } long long ParseInfo::getTotalSLLATNLookaheadOps() { std::vector decisions = _atnSimulator->getDecisionInfo(); long long k = 0; for (size_t i = 0; i < decisions.size(); ++i) { k += decisions[i].SLL_ATNTransitions; } return k; } long long ParseInfo::getTotalLLATNLookaheadOps() { std::vector decisions = _atnSimulator->getDecisionInfo(); long long k = 0; for (size_t i = 0; i < decisions.size(); ++i) { k += decisions[i].LL_ATNTransitions; } return k; } long long ParseInfo::getTotalATNLookaheadOps() { std::vector decisions = _atnSimulator->getDecisionInfo(); long long k = 0; for (size_t i = 0; i < decisions.size(); ++i) { k += decisions[i].SLL_ATNTransitions; k += decisions[i].LL_ATNTransitions; } return k; } size_t ParseInfo::getDFASize() { size_t n = 0; std::vector &decisionToDFA = _atnSimulator->decisionToDFA; for (size_t i = 0; i < decisionToDFA.size(); ++i) { n += getDFASize(i); } return n; } size_t ParseInfo::getDFASize(size_t decision) { dfa::DFA &decisionToDFA = _atnSimulator->decisionToDFA[decision]; return decisionToDFA.states.size(); }