]> gitweb.ps.run Git - toc/blob - antlr4-cpp-runtime-4.9.2-source/runtime/src/FailedPredicateException.cpp
add antlr source code and ReadMe
[toc] / antlr4-cpp-runtime-4.9.2-source / runtime / src / FailedPredicateException.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/ParserATNSimulator.h"
7 #include "Parser.h"
8 #include "atn/PredicateTransition.h"
9 #include "atn/ATN.h"
10 #include "atn/ATNState.h"
11 #include "support/CPPUtils.h"
12
13 #include "FailedPredicateException.h"
14
15 using namespace antlr4;
16 using namespace antlrcpp;
17
18 FailedPredicateException::FailedPredicateException(Parser *recognizer) : FailedPredicateException(recognizer, "", "") {
19 }
20
21 FailedPredicateException::FailedPredicateException(Parser *recognizer, const std::string &predicate): FailedPredicateException(recognizer, predicate, "") {
22 }
23
24 FailedPredicateException::FailedPredicateException(Parser *recognizer, const std::string &predicate, const std::string &message)
25   : RecognitionException(!message.empty() ? message : "failed predicate: " + predicate + "?", recognizer,
26                          recognizer->getInputStream(), recognizer->getContext(), recognizer->getCurrentToken()) {
27
28   atn::ATNState *s = recognizer->getInterpreter<atn::ATNSimulator>()->atn.states[recognizer->getState()];
29   atn::Transition *transition = s->transitions[0];
30   if (is<atn::PredicateTransition*>(transition)) {
31     _ruleIndex = static_cast<atn::PredicateTransition *>(transition)->ruleIndex;
32     _predicateIndex = static_cast<atn::PredicateTransition *>(transition)->predIndex;
33   } else {
34     _ruleIndex = 0;
35     _predicateIndex = 0;
36   }
37
38   _predicate = predicate;
39 }
40
41 size_t FailedPredicateException::getRuleIndex() {
42   return _ruleIndex;
43 }
44
45 size_t FailedPredicateException::getPredIndex() {
46   return _predicateIndex;
47 }
48
49 std::string FailedPredicateException::getPredicate() {
50   return _predicate;
51 }