]> gitweb.ps.run Git - toc/blob - antlr4-cpp-runtime-4.9.2-source/runtime/src/atn/ParseInfo.cpp
add antlr source code and ReadMe
[toc] / antlr4-cpp-runtime-4.9.2-source / runtime / src / atn / ParseInfo.cpp
1 /* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
2  * Use of this file is governed by the BSD 3-clause license that
3  * can be found in the LICENSE.txt file in the project root.
4  */
5
6 #include "atn/ProfilingATNSimulator.h"
7 #include "dfa/DFA.h"
8
9 #include "atn/ParseInfo.h"
10
11 using namespace antlr4::atn;
12
13 ParseInfo::ParseInfo(ProfilingATNSimulator *atnSimulator) : _atnSimulator(atnSimulator) {
14 }
15
16 ParseInfo::~ParseInfo() {
17 }
18
19 std::vector<DecisionInfo> ParseInfo::getDecisionInfo() {
20   return _atnSimulator->getDecisionInfo();
21 }
22
23 std::vector<size_t> ParseInfo::getLLDecisions() {
24   std::vector<DecisionInfo> decisions = _atnSimulator->getDecisionInfo();
25   std::vector<size_t> LL;
26   for (size_t i = 0; i < decisions.size(); ++i) {
27     long long fallBack = decisions[i].LL_Fallback;
28     if (fallBack > 0) {
29       LL.push_back(i);
30     }
31   }
32   return LL;
33 }
34
35 long long ParseInfo::getTotalTimeInPrediction() {
36   std::vector<DecisionInfo> decisions = _atnSimulator->getDecisionInfo();
37   long long t = 0;
38   for (size_t i = 0; i < decisions.size(); ++i) {
39     t += decisions[i].timeInPrediction;
40   }
41   return t;
42 }
43
44 long long ParseInfo::getTotalSLLLookaheadOps() {
45   std::vector<DecisionInfo> decisions = _atnSimulator->getDecisionInfo();
46   long long k = 0;
47   for (size_t i = 0; i < decisions.size(); ++i) {
48     k += decisions[i].SLL_TotalLook;
49   }
50   return k;
51 }
52
53 long long ParseInfo::getTotalLLLookaheadOps() {
54   std::vector<DecisionInfo> decisions = _atnSimulator->getDecisionInfo();
55   long long k = 0;
56   for (size_t i = 0; i < decisions.size(); i++) {
57     k += decisions[i].LL_TotalLook;
58   }
59   return k;
60 }
61
62 long long ParseInfo::getTotalSLLATNLookaheadOps() {
63   std::vector<DecisionInfo> decisions = _atnSimulator->getDecisionInfo();
64   long long k = 0;
65   for (size_t i = 0; i < decisions.size(); ++i) {
66     k += decisions[i].SLL_ATNTransitions;
67   }
68   return k;
69 }
70
71 long long ParseInfo::getTotalLLATNLookaheadOps() {
72   std::vector<DecisionInfo> decisions = _atnSimulator->getDecisionInfo();
73   long long k = 0;
74   for (size_t i = 0; i < decisions.size(); ++i) {
75     k += decisions[i].LL_ATNTransitions;
76   }
77   return k;
78 }
79
80 long long ParseInfo::getTotalATNLookaheadOps() {
81   std::vector<DecisionInfo> decisions = _atnSimulator->getDecisionInfo();
82   long long k = 0;
83   for (size_t i = 0; i < decisions.size(); ++i) {
84     k += decisions[i].SLL_ATNTransitions;
85     k += decisions[i].LL_ATNTransitions;
86   }
87   return k;
88 }
89
90 size_t ParseInfo::getDFASize() {
91   size_t n = 0;
92   std::vector<dfa::DFA> &decisionToDFA = _atnSimulator->decisionToDFA;
93   for (size_t i = 0; i < decisionToDFA.size(); ++i) {
94     n += getDFASize(i);
95   }
96   return n;
97 }
98
99 size_t ParseInfo::getDFASize(size_t decision) {
100   dfa::DFA &decisionToDFA = _atnSimulator->decisionToDFA[decision];
101   return decisionToDFA.states.size();
102 }