expressir 1.2.3 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/rake.yml +30 -17
- data/.gitignore +1 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/CMakeLists.txt +30 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlr4cpp-vs2019.vcxproj +8 -0
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/project.pbxproj +31 -15
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4.xcscheme +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4_ios.xcscheme +1 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/antlrcpp.xcodeproj/xcshareddata/xcschemes/antlr4_static.xcscheme +1 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.cpp +1 -6
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRFileStream.h +9 -6
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.cpp +26 -12
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ANTLRInputStream.h +10 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/CommonTokenFactory.h +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/IntStream.h +7 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.cpp +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Lexer.h +23 -10
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.cpp +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ListTokenSource.h +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.cpp +4 -4
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Parser.h +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.cpp +3 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ParserRuleContext.h +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/ProxyErrorListener.cpp +4 -4
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Recognizer.h +8 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/RuntimeMetaData.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Token.h +39 -7
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenSource.h +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.cpp +5 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/TokenStreamRewriter.h +9 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.cpp +11 -19
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/Vocabulary.h +2 -3
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/antlr4-common.h +4 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.cpp +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATN.h +7 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.cpp +0 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNConfig.h +8 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.cpp +0 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNDeserializer.h +7 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNSerializer.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ATNState.h +9 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp +8 -10
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LL1Analyzer.h +7 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/LexerATNSimulator.h +9 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/ParserATNSimulator.cpp +6 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/atn/PredictionContext.h +14 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFA.cpp +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFASerializer.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/dfa/DFAState.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/IntervalSet.cpp +9 -9
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/misc/MurmurHash.h +7 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Any.h +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/Arrays.cpp +2 -2
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/CPPUtils.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.cpp +11 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/support/StringUtils.h +40 -18
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTree.h +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/ParseTreeWalker.h +29 -5
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/Trees.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/pattern/ParseTreePattern.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPath.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathRuleElement.cpp +1 -1
- data/ext/express-parser/antlr4-upstream/runtime/Cpp/runtime/src/tree/xpath/XPathTokenElement.cpp +1 -1
- data/ext/express-parser/express_parser.cpp +20 -164
- data/ext/express-parser/extconf.rb +3 -4
- data/lib/expressir/express/parser.rb +17 -14
- data/lib/expressir/express/visitor.rb +3 -1
- data/lib/expressir/version.rb +1 -1
- metadata +2 -2
|
@@ -18,20 +18,33 @@ namespace antlr4 {
|
|
|
18
18
|
/// of speed.
|
|
19
19
|
class ANTLR4CPP_PUBLIC Lexer : public Recognizer, public TokenSource {
|
|
20
20
|
public:
|
|
21
|
-
|
|
22
|
-
static
|
|
23
|
-
static
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
static
|
|
27
|
-
static
|
|
28
|
-
static
|
|
21
|
+
#if __cplusplus >= 201703L
|
|
22
|
+
static constexpr size_t DEFAULT_MODE = 0;
|
|
23
|
+
static constexpr size_t MORE = std::numeric_limits<size_t>::max() - 1;
|
|
24
|
+
static constexpr size_t SKIP = std::numeric_limits<size_t>::max() - 2;
|
|
25
|
+
|
|
26
|
+
static constexpr size_t DEFAULT_TOKEN_CHANNEL = Token::DEFAULT_CHANNEL;
|
|
27
|
+
static constexpr size_t HIDDEN = Token::HIDDEN_CHANNEL;
|
|
28
|
+
static constexpr size_t MIN_CHAR_VALUE = 0;
|
|
29
|
+
static constexpr size_t MAX_CHAR_VALUE = 0x10FFFF;
|
|
30
|
+
#else
|
|
31
|
+
enum : size_t {
|
|
32
|
+
DEFAULT_MODE = 0,
|
|
33
|
+
MORE = static_cast<size_t>(-2), // std::numeric_limits<size_t>::max() - 1; doesn't work in VS 2013
|
|
34
|
+
SKIP = static_cast<size_t>(-3), // std::numeric_limits<size_t>::max() - 2; doesn't work in VS 2013
|
|
35
|
+
|
|
36
|
+
DEFAULT_TOKEN_CHANNEL = Token::DEFAULT_CHANNEL,
|
|
37
|
+
HIDDEN = Token::HIDDEN_CHANNEL,
|
|
38
|
+
MIN_CHAR_VALUE = 0,
|
|
39
|
+
MAX_CHAR_VALUE = 0x10FFFF,
|
|
40
|
+
};
|
|
41
|
+
#endif
|
|
29
42
|
|
|
30
43
|
CharStream *_input; // Pure reference, usually from statically allocated instance.
|
|
31
44
|
|
|
32
45
|
protected:
|
|
33
46
|
/// How to create token objects.
|
|
34
|
-
|
|
47
|
+
TokenFactory<CommonToken> *_factory;
|
|
35
48
|
|
|
36
49
|
public:
|
|
37
50
|
/// The goal of all lexer rules/methods is to create a token object.
|
|
@@ -100,7 +113,7 @@ namespace antlr4 {
|
|
|
100
113
|
this->_factory = factory;
|
|
101
114
|
}
|
|
102
115
|
|
|
103
|
-
virtual
|
|
116
|
+
virtual TokenFactory<CommonToken>* getTokenFactory() override;
|
|
104
117
|
|
|
105
118
|
/// Set the char stream and reset the lexer
|
|
106
119
|
virtual void setInputStream(IntStream *input) override;
|
|
@@ -82,11 +82,11 @@ std::string ListTokenSource::getSourceName() {
|
|
|
82
82
|
return "List";
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
TokenFactory<CommonToken>* ListTokenSource::getTokenFactory() {
|
|
86
86
|
return _factory;
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
void ListTokenSource::InitializeInstanceFields() {
|
|
90
90
|
i = 0;
|
|
91
|
-
_factory = CommonTokenFactory::DEFAULT;
|
|
91
|
+
_factory = CommonTokenFactory::DEFAULT.get();
|
|
92
92
|
}
|
|
@@ -40,7 +40,7 @@ namespace antlr4 {
|
|
|
40
40
|
private:
|
|
41
41
|
/// This is the backing field for <seealso cref="#getTokenFactory"/> and
|
|
42
42
|
/// <seealso cref="setTokenFactory"/>.
|
|
43
|
-
|
|
43
|
+
TokenFactory<CommonToken> *_factory = CommonTokenFactory::DEFAULT.get();
|
|
44
44
|
|
|
45
45
|
public:
|
|
46
46
|
/// Constructs a new <seealso cref="ListTokenSource"/> instance from the specified
|
|
@@ -79,7 +79,7 @@ namespace antlr4 {
|
|
|
79
79
|
this->_factory = factory;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
virtual
|
|
82
|
+
virtual TokenFactory<CommonToken>* getTokenFactory() override;
|
|
83
83
|
|
|
84
84
|
private:
|
|
85
85
|
void InitializeInstanceFields();
|
|
@@ -190,7 +190,7 @@ void Parser::removeParseListeners() {
|
|
|
190
190
|
}
|
|
191
191
|
|
|
192
192
|
void Parser::triggerEnterRuleEvent() {
|
|
193
|
-
for (auto listener : _parseListeners) {
|
|
193
|
+
for (auto *listener : _parseListeners) {
|
|
194
194
|
listener->enterEveryRule(_ctx);
|
|
195
195
|
_ctx->enterRule(listener);
|
|
196
196
|
}
|
|
@@ -208,7 +208,7 @@ size_t Parser::getNumberOfSyntaxErrors() {
|
|
|
208
208
|
return _syntaxErrors;
|
|
209
209
|
}
|
|
210
210
|
|
|
211
|
-
|
|
211
|
+
TokenFactory<CommonToken>* Parser::getTokenFactory() {
|
|
212
212
|
return _input->getTokenSource()->getTokenFactory();
|
|
213
213
|
}
|
|
214
214
|
|
|
@@ -307,14 +307,14 @@ Token* Parser::consume() {
|
|
|
307
307
|
tree::ErrorNode *node = createErrorNode(o);
|
|
308
308
|
_ctx->addChild(node);
|
|
309
309
|
if (_parseListeners.size() > 0) {
|
|
310
|
-
for (auto listener : _parseListeners) {
|
|
310
|
+
for (auto *listener : _parseListeners) {
|
|
311
311
|
listener->visitErrorNode(node);
|
|
312
312
|
}
|
|
313
313
|
}
|
|
314
314
|
} else {
|
|
315
315
|
tree::TerminalNode *node = _ctx->addChild(createTerminalNode(o));
|
|
316
316
|
if (_parseListeners.size() > 0) {
|
|
317
|
-
for (auto listener : _parseListeners) {
|
|
317
|
+
for (auto *listener : _parseListeners) {
|
|
318
318
|
listener->visitTerminal(node);
|
|
319
319
|
}
|
|
320
320
|
}
|
|
@@ -193,7 +193,7 @@ namespace antlr4 {
|
|
|
193
193
|
/// <seealso cref= #notifyErrorListeners </seealso>
|
|
194
194
|
virtual size_t getNumberOfSyntaxErrors();
|
|
195
195
|
|
|
196
|
-
virtual
|
|
196
|
+
virtual TokenFactory<CommonToken>* getTokenFactory() override;
|
|
197
197
|
|
|
198
198
|
/// <summary>
|
|
199
199
|
/// Tell our token source and error strategy about a new way to create tokens. </summary>
|
|
@@ -38,8 +38,8 @@ void ParserRuleContext::copyFrom(ParserRuleContext *ctx) {
|
|
|
38
38
|
|
|
39
39
|
// copy any error nodes to alt label node
|
|
40
40
|
if (!ctx->children.empty()) {
|
|
41
|
-
for (auto child : ctx->children) {
|
|
42
|
-
auto errorNode = dynamic_cast<ErrorNode *>(child);
|
|
41
|
+
for (auto *child : ctx->children) {
|
|
42
|
+
auto *errorNode = dynamic_cast<ErrorNode *>(child);
|
|
43
43
|
if (errorNode != nullptr) {
|
|
44
44
|
errorNode->setParent(this);
|
|
45
45
|
children.push_back(errorNode);
|
|
@@ -82,7 +82,7 @@ tree::TerminalNode* ParserRuleContext::getToken(size_t ttype, size_t i) {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
size_t j = 0; // what token with ttype have we found?
|
|
85
|
-
for (auto o : children) {
|
|
85
|
+
for (auto *o : children) {
|
|
86
86
|
if (is<tree::TerminalNode *>(o)) {
|
|
87
87
|
tree::TerminalNode *tnode = dynamic_cast<tree::TerminalNode *>(o);
|
|
88
88
|
Token *symbol = tnode->getSymbol();
|
|
@@ -114,7 +114,7 @@ namespace antlr4 {
|
|
|
114
114
|
template<typename T>
|
|
115
115
|
std::vector<T *> getRuleContexts() {
|
|
116
116
|
std::vector<T *> contexts;
|
|
117
|
-
for (auto child : children) {
|
|
117
|
+
for (auto *child : children) {
|
|
118
118
|
if (antlrcpp::is<T *>(child)) {
|
|
119
119
|
contexts.push_back(dynamic_cast<T *>(child));
|
|
120
120
|
}
|
|
@@ -26,28 +26,28 @@ void ProxyErrorListener::removeErrorListeners() {
|
|
|
26
26
|
void ProxyErrorListener::syntaxError(Recognizer *recognizer, Token *offendingSymbol, size_t line,
|
|
27
27
|
size_t charPositionInLine, const std::string &msg, std::exception_ptr e) {
|
|
28
28
|
|
|
29
|
-
for (auto listener : _delegates) {
|
|
29
|
+
for (auto *listener : _delegates) {
|
|
30
30
|
listener->syntaxError(recognizer, offendingSymbol, line, charPositionInLine, msg, e);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
void ProxyErrorListener::reportAmbiguity(Parser *recognizer, const dfa::DFA &dfa, size_t startIndex, size_t stopIndex,
|
|
35
35
|
bool exact, const antlrcpp::BitSet &ambigAlts, atn::ATNConfigSet *configs) {
|
|
36
|
-
for (auto listener : _delegates) {
|
|
36
|
+
for (auto *listener : _delegates) {
|
|
37
37
|
listener->reportAmbiguity(recognizer, dfa, startIndex, stopIndex, exact, ambigAlts, configs);
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
void ProxyErrorListener::reportAttemptingFullContext(Parser *recognizer, const dfa::DFA &dfa, size_t startIndex,
|
|
42
42
|
size_t stopIndex, const antlrcpp::BitSet &conflictingAlts, atn::ATNConfigSet *configs) {
|
|
43
|
-
for (auto listener : _delegates) {
|
|
43
|
+
for (auto *listener : _delegates) {
|
|
44
44
|
listener->reportAttemptingFullContext(recognizer, dfa, startIndex, stopIndex, conflictingAlts, configs);
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
void ProxyErrorListener::reportContextSensitivity(Parser *recognizer, const dfa::DFA &dfa, size_t startIndex, size_t stopIndex,
|
|
49
49
|
size_t prediction, atn::ATNConfigSet *configs) {
|
|
50
|
-
for (auto listener : _delegates) {
|
|
50
|
+
for (auto *listener : _delegates) {
|
|
51
51
|
listener->reportContextSensitivity(recognizer, dfa, startIndex, stopIndex, prediction, configs);
|
|
52
52
|
}
|
|
53
53
|
}
|
|
@@ -11,7 +11,13 @@ namespace antlr4 {
|
|
|
11
11
|
|
|
12
12
|
class ANTLR4CPP_PUBLIC Recognizer {
|
|
13
13
|
public:
|
|
14
|
-
|
|
14
|
+
#if __cplusplus >= 201703L
|
|
15
|
+
static constexpr size_t EOF = std::numeric_limits<size_t>::max();
|
|
16
|
+
#else
|
|
17
|
+
enum : size_t {
|
|
18
|
+
EOF = static_cast<size_t>(-1), // std::numeric_limits<size_t>::max(); doesn't work in VS 2013.
|
|
19
|
+
};
|
|
20
|
+
#endif
|
|
15
21
|
|
|
16
22
|
Recognizer();
|
|
17
23
|
Recognizer(Recognizer const&) = delete;
|
|
@@ -138,7 +144,7 @@ namespace antlr4 {
|
|
|
138
144
|
|
|
139
145
|
virtual void setInputStream(IntStream *input) = 0;
|
|
140
146
|
|
|
141
|
-
virtual
|
|
147
|
+
virtual TokenFactory<CommonToken>* getTokenFactory() = 0;
|
|
142
148
|
|
|
143
149
|
template<typename T1>
|
|
144
150
|
void setTokenFactory(TokenFactory<T1> *input);
|
|
@@ -14,24 +14,50 @@ namespace antlr4 {
|
|
|
14
14
|
/// we obtained this token.
|
|
15
15
|
class ANTLR4CPP_PUBLIC Token {
|
|
16
16
|
public:
|
|
17
|
-
|
|
17
|
+
#if __cplusplus >= 201703L
|
|
18
|
+
static constexpr size_t INVALID_TYPE = 0;
|
|
19
|
+
#else
|
|
20
|
+
enum : size_t {
|
|
21
|
+
INVALID_TYPE = 0,
|
|
22
|
+
};
|
|
23
|
+
#endif
|
|
18
24
|
|
|
19
25
|
/// During lookahead operations, this "token" signifies we hit rule end ATN state
|
|
20
26
|
/// and did not follow it despite needing to.
|
|
21
|
-
|
|
22
|
-
static
|
|
23
|
-
static
|
|
27
|
+
#if __cplusplus >= 201703L
|
|
28
|
+
static constexpr size_t EPSILON = std::numeric_limits<size_t>::max() - 1;
|
|
29
|
+
static constexpr size_t MIN_USER_TOKEN_TYPE = 1;
|
|
30
|
+
static constexpr size_t EOF = IntStream::EOF;
|
|
31
|
+
#else
|
|
32
|
+
enum : size_t {
|
|
33
|
+
EPSILON = static_cast<size_t>(-2), // std::numeric_limits<size_t>::max() - 1; doesn't work in VS 2013
|
|
34
|
+
MIN_USER_TOKEN_TYPE = 1,
|
|
35
|
+
EOF = IntStream::EOF,
|
|
36
|
+
};
|
|
37
|
+
#endif
|
|
24
38
|
|
|
25
39
|
virtual ~Token();
|
|
26
40
|
|
|
27
41
|
/// All tokens go to the parser (unless skip() is called in that rule)
|
|
28
42
|
/// on a particular "channel". The parser tunes to a particular channel
|
|
29
43
|
/// so that whitespace etc... can go to the parser on a "hidden" channel.
|
|
30
|
-
|
|
44
|
+
#if __cplusplus >= 201703L
|
|
45
|
+
static constexpr size_t DEFAULT_CHANNEL = 0;
|
|
46
|
+
#else
|
|
47
|
+
enum : size_t {
|
|
48
|
+
DEFAULT_CHANNEL = 0,
|
|
49
|
+
};
|
|
50
|
+
#endif
|
|
31
51
|
|
|
32
52
|
/// Anything on different channel than DEFAULT_CHANNEL is not parsed
|
|
33
53
|
/// by parser.
|
|
34
|
-
|
|
54
|
+
#if __cplusplus >= 201703L
|
|
55
|
+
static constexpr size_t HIDDEN_CHANNEL = 1;
|
|
56
|
+
#else
|
|
57
|
+
enum : size_t {
|
|
58
|
+
HIDDEN_CHANNEL = 1,
|
|
59
|
+
};
|
|
60
|
+
#endif
|
|
35
61
|
|
|
36
62
|
/**
|
|
37
63
|
* This is the minimum constant value which can be assigned to a
|
|
@@ -44,7 +70,13 @@ namespace antlr4 {
|
|
|
44
70
|
*
|
|
45
71
|
* @see Token#getChannel()
|
|
46
72
|
*/
|
|
47
|
-
|
|
73
|
+
#if __cplusplus >= 201703L
|
|
74
|
+
static constexpr size_t MIN_USER_CHANNEL_VALUE = 2;
|
|
75
|
+
#else
|
|
76
|
+
enum : size_t {
|
|
77
|
+
MIN_USER_CHANNEL_VALUE = 2,
|
|
78
|
+
};
|
|
79
|
+
#endif
|
|
48
80
|
|
|
49
81
|
/// Get the text of the token.
|
|
50
82
|
virtual std::string getText() const = 0;
|
|
@@ -79,7 +79,7 @@ namespace antlr4 {
|
|
|
79
79
|
/// creating <seealso cref="Token"/> objects from the input.
|
|
80
80
|
/// </summary>
|
|
81
81
|
/// <returns> The <seealso cref="TokenFactory"/> currently used by this token source. </returns>
|
|
82
|
-
virtual
|
|
82
|
+
virtual TokenFactory<CommonToken>* getTokenFactory() = 0;
|
|
83
83
|
};
|
|
84
84
|
|
|
85
85
|
} // namespace antlr4
|
|
@@ -94,7 +94,7 @@ TokenStreamRewriter::TokenStreamRewriter(TokenStream *tokens_) : tokens(tokens_)
|
|
|
94
94
|
|
|
95
95
|
TokenStreamRewriter::~TokenStreamRewriter() {
|
|
96
96
|
for (auto program : _programs) {
|
|
97
|
-
for (auto operation : program.second) {
|
|
97
|
+
for (auto *operation : program.second) {
|
|
98
98
|
delete operation;
|
|
99
99
|
}
|
|
100
100
|
}
|
|
@@ -323,7 +323,7 @@ std::unordered_map<size_t, TokenStreamRewriter::RewriteOperation*> TokenStreamRe
|
|
|
323
323
|
|
|
324
324
|
// Wipe prior inserts within range
|
|
325
325
|
std::vector<InsertBeforeOp *> inserts = getKindOfOps<InsertBeforeOp>(rewrites, i);
|
|
326
|
-
for (auto iop : inserts) {
|
|
326
|
+
for (auto *iop : inserts) {
|
|
327
327
|
if (iop->index == rop->index) {
|
|
328
328
|
// E.g., insert before 2, delete 2..2; update replace
|
|
329
329
|
// text to include insert before, kill insert
|
|
@@ -339,7 +339,7 @@ std::unordered_map<size_t, TokenStreamRewriter::RewriteOperation*> TokenStreamRe
|
|
|
339
339
|
}
|
|
340
340
|
// Drop any prior replaces contained within
|
|
341
341
|
std::vector<ReplaceOp*> prevReplaces = getKindOfOps<ReplaceOp>(rewrites, i);
|
|
342
|
-
for (auto prevRop : prevReplaces) {
|
|
342
|
+
for (auto *prevRop : prevReplaces) {
|
|
343
343
|
if (prevRop->index >= rop->index && prevRop->lastIndex <= rop->lastIndex) {
|
|
344
344
|
// delete replace as it's a no-op.
|
|
345
345
|
delete rewrites[prevRop->instructionIndex];
|
|
@@ -373,7 +373,7 @@ std::unordered_map<size_t, TokenStreamRewriter::RewriteOperation*> TokenStreamRe
|
|
|
373
373
|
// combine current insert with prior if any at same index
|
|
374
374
|
|
|
375
375
|
std::vector<InsertBeforeOp *> prevInserts = getKindOfOps<InsertBeforeOp>(rewrites, i);
|
|
376
|
-
for (auto prevIop : prevInserts) {
|
|
376
|
+
for (auto *prevIop : prevInserts) {
|
|
377
377
|
if (prevIop->index == iop->index) { // combine objects
|
|
378
378
|
// convert to strings...we're in process of toString'ing
|
|
379
379
|
// whole token buffer so no lazy eval issue with any templates
|
|
@@ -385,7 +385,7 @@ std::unordered_map<size_t, TokenStreamRewriter::RewriteOperation*> TokenStreamRe
|
|
|
385
385
|
}
|
|
386
386
|
// look for replaces where iop.index is in range; error
|
|
387
387
|
std::vector<ReplaceOp*> prevReplaces = getKindOfOps<ReplaceOp>(rewrites, i);
|
|
388
|
-
for (auto rop : prevReplaces) {
|
|
388
|
+
for (auto *rop : prevReplaces) {
|
|
389
389
|
if (iop->index == rop->index) {
|
|
390
390
|
rop->text = catOpText(&iop->text, &rop->text);
|
|
391
391
|
delete rewrites[i];
|
|
@@ -86,8 +86,15 @@ namespace antlr4 {
|
|
|
86
86
|
class ANTLR4CPP_PUBLIC TokenStreamRewriter {
|
|
87
87
|
public:
|
|
88
88
|
static const std::string DEFAULT_PROGRAM_NAME;
|
|
89
|
-
|
|
90
|
-
static
|
|
89
|
+
#if __cplusplus >= 201703L
|
|
90
|
+
static constexpr size_t PROGRAM_INIT_SIZE = 100;
|
|
91
|
+
static constexpr size_t MIN_TOKEN_INDEX = 0;
|
|
92
|
+
#else
|
|
93
|
+
enum : size_t {
|
|
94
|
+
PROGRAM_INIT_SIZE = 100,
|
|
95
|
+
MIN_TOKEN_INDEX = 0,
|
|
96
|
+
};
|
|
97
|
+
#endif
|
|
91
98
|
|
|
92
99
|
TokenStreamRewriter(TokenStream *tokens);
|
|
93
100
|
virtual ~TokenStreamRewriter();
|
|
@@ -22,8 +22,7 @@ Vocabulary::Vocabulary(const std::vector<std::string> &literalNames,
|
|
|
22
22
|
// See note here on -1 part: https://github.com/antlr/antlr4/pull/1146
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
Vocabulary::~Vocabulary()
|
|
26
|
-
}
|
|
25
|
+
Vocabulary::~Vocabulary() = default;
|
|
27
26
|
|
|
28
27
|
Vocabulary Vocabulary::fromTokenNames(const std::vector<std::string> &tokenNames) {
|
|
29
28
|
if (tokenNames.empty()) {
|
|
@@ -34,25 +33,18 @@ Vocabulary Vocabulary::fromTokenNames(const std::vector<std::string> &tokenNames
|
|
|
34
33
|
std::vector<std::string> symbolicNames = tokenNames;
|
|
35
34
|
std::locale locale;
|
|
36
35
|
for (size_t i = 0; i < tokenNames.size(); i++) {
|
|
37
|
-
std::string tokenName = tokenNames[i];
|
|
38
|
-
if (tokenName
|
|
36
|
+
const std::string& tokenName = tokenNames[i];
|
|
37
|
+
if (tokenName.empty()) {
|
|
39
38
|
continue;
|
|
39
|
+
} else if (tokenName.front() == '\'') {
|
|
40
|
+
symbolicNames[i].clear();
|
|
41
|
+
} else if (std::isupper(tokenName.front(), locale)) {
|
|
42
|
+
literalNames[i].clear();
|
|
43
|
+
} else {
|
|
44
|
+
// wasn't a literal or symbolic name
|
|
45
|
+
literalNames[i].clear();
|
|
46
|
+
symbolicNames[i].clear();
|
|
40
47
|
}
|
|
41
|
-
|
|
42
|
-
if (!tokenName.empty()) {
|
|
43
|
-
char firstChar = tokenName[0];
|
|
44
|
-
if (firstChar == '\'') {
|
|
45
|
-
symbolicNames[i] = "";
|
|
46
|
-
continue;
|
|
47
|
-
} else if (std::isupper(firstChar, locale)) {
|
|
48
|
-
literalNames[i] = "";
|
|
49
|
-
continue;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// wasn't a literal or symbolic name
|
|
54
|
-
literalNames[i] = "";
|
|
55
|
-
symbolicNames[i] = "";
|
|
56
48
|
}
|
|
57
49
|
|
|
58
50
|
return Vocabulary(literalNames, symbolicNames, tokenNames);
|
|
@@ -14,9 +14,6 @@ namespace dfa {
|
|
|
14
14
|
/// interface.
|
|
15
15
|
class ANTLR4CPP_PUBLIC Vocabulary {
|
|
16
16
|
public:
|
|
17
|
-
Vocabulary(Vocabulary const&) = default;
|
|
18
|
-
virtual ~Vocabulary();
|
|
19
|
-
|
|
20
17
|
/// Gets an empty <seealso cref="Vocabulary"/> instance.
|
|
21
18
|
///
|
|
22
19
|
/// <para>
|
|
@@ -26,6 +23,8 @@ namespace dfa {
|
|
|
26
23
|
static const Vocabulary EMPTY_VOCABULARY;
|
|
27
24
|
|
|
28
25
|
Vocabulary() {}
|
|
26
|
+
Vocabulary(Vocabulary const&) = default;
|
|
27
|
+
virtual ~Vocabulary();
|
|
29
28
|
|
|
30
29
|
/// <summary>
|
|
31
30
|
/// Constructs a new instance of <seealso cref="Vocabulary"/> from the specified
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
#include <algorithm>
|
|
9
9
|
#include <assert.h>
|
|
10
10
|
#include <atomic>
|
|
11
|
-
#include <codecvt>
|
|
12
11
|
#include <chrono>
|
|
13
12
|
#include <fstream>
|
|
14
13
|
#include <iostream>
|
|
@@ -37,6 +36,10 @@
|
|
|
37
36
|
#include <condition_variable>
|
|
38
37
|
#include <functional>
|
|
39
38
|
|
|
39
|
+
#ifndef USE_UTF8_INSTEAD_OF_CODECVT
|
|
40
|
+
#include <codecvt>
|
|
41
|
+
#endif
|
|
42
|
+
|
|
40
43
|
// Defines for the Guid class and other platform dependent stuff.
|
|
41
44
|
#ifdef _WIN32
|
|
42
45
|
#ifdef _MSC_VER
|
|
@@ -183,7 +183,7 @@ std::string ATN::toString() const {
|
|
|
183
183
|
ss << "states (" << states.size() << ") {" << std::endl;
|
|
184
184
|
|
|
185
185
|
size_t index = 0;
|
|
186
|
-
for (auto state : states) {
|
|
186
|
+
for (auto *state : states) {
|
|
187
187
|
if (state == nullptr) {
|
|
188
188
|
ss << " " << index++ << ": nul" << std::endl;
|
|
189
189
|
} else {
|
|
@@ -193,7 +193,7 @@ std::string ATN::toString() const {
|
|
|
193
193
|
}
|
|
194
194
|
|
|
195
195
|
index = 0;
|
|
196
|
-
for (auto state : decisionToState) {
|
|
196
|
+
for (auto *state : decisionToState) {
|
|
197
197
|
if (state == nullptr) {
|
|
198
198
|
ss << " " << index++ << ": nul" << std::endl;
|
|
199
199
|
} else {
|
|
@@ -12,7 +12,13 @@ namespace atn {
|
|
|
12
12
|
|
|
13
13
|
class ANTLR4CPP_PUBLIC ATN {
|
|
14
14
|
public:
|
|
15
|
-
|
|
15
|
+
#if __cplusplus >= 201703L
|
|
16
|
+
static constexpr size_t INVALID_ALT_NUMBER = 0;
|
|
17
|
+
#else
|
|
18
|
+
enum : size_t {
|
|
19
|
+
INVALID_ALT_NUMBER = 0,
|
|
20
|
+
};
|
|
21
|
+
#endif
|
|
16
22
|
|
|
17
23
|
/// Used for runtime deserialization of ATNs from strings.
|
|
18
24
|
ATN();
|
|
@@ -11,8 +11,6 @@
|
|
|
11
11
|
|
|
12
12
|
using namespace antlr4::atn;
|
|
13
13
|
|
|
14
|
-
const size_t ATNConfig::SUPPRESS_PRECEDENCE_FILTER = 0x40000000;
|
|
15
|
-
|
|
16
14
|
ATNConfig::ATNConfig(ATNState *state_, size_t alt_, Ref<PredictionContext> const& context_)
|
|
17
15
|
: ATNConfig(state_, alt_, context_, SemanticContext::NONE) {
|
|
18
16
|
}
|
|
@@ -114,7 +114,13 @@ namespace atn {
|
|
|
114
114
|
* {@link #isPrecedenceFilterSuppressed} property as a bit within the
|
|
115
115
|
* existing {@link #reachesIntoOuterContext} field.
|
|
116
116
|
*/
|
|
117
|
-
|
|
117
|
+
#if __cplusplus >= 201703L
|
|
118
|
+
static constexpr size_t SUPPRESS_PRECEDENCE_FILTER = 0x40000000;
|
|
119
|
+
#else
|
|
120
|
+
enum : size_t {
|
|
121
|
+
SUPPRESS_PRECEDENCE_FILTER = 0x40000000,
|
|
122
|
+
};
|
|
123
|
+
#endif
|
|
118
124
|
};
|
|
119
125
|
|
|
120
126
|
} // namespace atn
|
|
@@ -139,7 +145,7 @@ namespace std {
|
|
|
139
145
|
size_t operator() (const std::vector<Ref<ATNConfig>> &vector) const
|
|
140
146
|
{
|
|
141
147
|
std::size_t seed = 0;
|
|
142
|
-
for (auto &config : vector) {
|
|
148
|
+
for (const auto &config : vector) {
|
|
143
149
|
seed ^= config->hashCode() + 0x9e3779b9 + (seed << 6) + (seed >> 2);
|
|
144
150
|
}
|
|
145
151
|
return seed;
|
|
@@ -13,7 +13,13 @@ namespace atn {
|
|
|
13
13
|
|
|
14
14
|
class ANTLR4CPP_PUBLIC ATNDeserializer {
|
|
15
15
|
public:
|
|
16
|
-
|
|
16
|
+
#if __cplusplus >= 201703L
|
|
17
|
+
static constexpr size_t SERIALIZED_VERSION = 3;
|
|
18
|
+
#else
|
|
19
|
+
enum : size_t {
|
|
20
|
+
SERIALIZED_VERSION = 3,
|
|
21
|
+
};
|
|
22
|
+
#endif
|
|
17
23
|
|
|
18
24
|
/// This is the current serialized UUID.
|
|
19
25
|
// ml: defined as function to avoid the “static initialization order fiasco”.
|
|
@@ -166,7 +166,7 @@ std::vector<size_t> ATNSerializer::serialize() {
|
|
|
166
166
|
}
|
|
167
167
|
|
|
168
168
|
data.push_back(containsEof ? 1 : 0);
|
|
169
|
-
for (auto &interval : set.getIntervals()) {
|
|
169
|
+
for (const auto &interval : set.getIntervals()) {
|
|
170
170
|
if (interval.a == -1) {
|
|
171
171
|
if (interval.b == -1) {
|
|
172
172
|
continue;
|
|
@@ -81,8 +81,15 @@ namespace atn {
|
|
|
81
81
|
|
|
82
82
|
ATNState& operator=(ATNState const&) = delete;
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
static
|
|
84
|
+
#if __cplusplus >= 201703L
|
|
85
|
+
static constexpr size_t INITIAL_NUM_TRANSITIONS = 4;
|
|
86
|
+
static constexpr size_t INVALID_STATE_NUMBER = std::numeric_limits<size_t>::max();
|
|
87
|
+
#else
|
|
88
|
+
enum : size_t {
|
|
89
|
+
INITIAL_NUM_TRANSITIONS = 4,
|
|
90
|
+
INVALID_STATE_NUMBER = static_cast<size_t>(-1), // std::numeric_limits<size_t>::max(); doesn't work in VS 2013
|
|
91
|
+
};
|
|
92
|
+
#endif
|
|
86
93
|
|
|
87
94
|
enum {
|
|
88
95
|
ATN_INVALID_TYPE = 0,
|
|
@@ -100,18 +100,16 @@ void LL1Analyzer::_LOOK(ATNState *s, ATNState *stopState, Ref<PredictionContext>
|
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
if (ctx != PredictionContext::EMPTY) {
|
|
103
|
-
|
|
103
|
+
bool removed = calledRuleStack.test(s->ruleIndex);
|
|
104
|
+
calledRuleStack[s->ruleIndex] = false;
|
|
105
|
+
auto onExit = finally([removed, &calledRuleStack, s] {
|
|
106
|
+
if (removed) {
|
|
107
|
+
calledRuleStack.set(s->ruleIndex);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
// run thru all possible stack tops in ctx
|
|
104
111
|
for (size_t i = 0; i < ctx->size(); i++) {
|
|
105
112
|
ATNState *returnState = _atn.states[ctx->getReturnState(i)];
|
|
106
|
-
|
|
107
|
-
bool removed = calledRuleStack.test(returnState->ruleIndex);
|
|
108
|
-
auto onExit = finally([removed, &calledRuleStack, returnState] {
|
|
109
|
-
if (removed) {
|
|
110
|
-
calledRuleStack.set(returnState->ruleIndex);
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
calledRuleStack[returnState->ruleIndex] = false;
|
|
115
113
|
_LOOK(returnState, stopState, ctx->getParent(i), look, lookBusy, calledRuleStack, seeThruPreds, addEOF);
|
|
116
114
|
}
|
|
117
115
|
return;
|
|
@@ -17,7 +17,13 @@ namespace atn {
|
|
|
17
17
|
public:
|
|
18
18
|
/// Special value added to the lookahead sets to indicate that we hit
|
|
19
19
|
/// a predicate during analysis if {@code seeThruPreds==false}.
|
|
20
|
-
|
|
20
|
+
#if __cplusplus >= 201703L
|
|
21
|
+
static constexpr size_t HIT_PRED = Token::INVALID_TYPE;
|
|
22
|
+
#else
|
|
23
|
+
enum : size_t {
|
|
24
|
+
HIT_PRED = Token::INVALID_TYPE,
|
|
25
|
+
};
|
|
26
|
+
#endif
|
|
21
27
|
|
|
22
28
|
const atn::ATN &_atn;
|
|
23
29
|
|