summaryrefslogtreecommitdiff
path: root/deps/v8/third_party/antlr4/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/third_party/antlr4/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp')
-rw-r--r--deps/v8/third_party/antlr4/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp173
1 files changed, 0 insertions, 173 deletions
diff --git a/deps/v8/third_party/antlr4/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp b/deps/v8/third_party/antlr4/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp
deleted file mode 100644
index ce823b3f92..0000000000
--- a/deps/v8/third_party/antlr4/runtime/Cpp/runtime/src/atn/LL1Analyzer.cpp
+++ /dev/null
@@ -1,173 +0,0 @@
-/* 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/ATNConfig.h"
-#include "atn/AbstractPredicateTransition.h"
-#include "atn/EmptyPredictionContext.h"
-#include "atn/NotSetTransition.h"
-#include "atn/RuleStopState.h"
-#include "atn/RuleTransition.h"
-#include "atn/SingletonPredictionContext.h"
-#include "atn/Transition.h"
-#include "atn/WildcardTransition.h"
-#include "misc/IntervalSet.h"
-
-#include "support/CPPUtils.h"
-
-#include "atn/LL1Analyzer.h"
-
-using namespace antlr4;
-using namespace antlr4::atn;
-using namespace antlrcpp;
-
-LL1Analyzer::LL1Analyzer(const ATN& atn) : _atn(atn) {}
-
-LL1Analyzer::~LL1Analyzer() {}
-
-std::vector<misc::IntervalSet> LL1Analyzer::getDecisionLookahead(
- ATNState* s) const {
- std::vector<misc::IntervalSet> look;
-
- if (s == nullptr) {
- return look;
- }
-
- look.resize(s->transitions.size()); // Fills all interval sets with defaults.
- for (size_t alt = 0; alt < s->transitions.size(); alt++) {
- bool seeThruPreds = false; // fail to get lookahead upon pred
-
- ATNConfig::Set lookBusy;
- antlrcpp::BitSet callRuleStack;
- _LOOK(s->transitions[alt]->target, nullptr, PredictionContext::EMPTY,
- look[alt], lookBusy, callRuleStack, seeThruPreds, false);
-
- // Wipe out lookahead for this alternative if we found nothing
- // or we had a predicate when we !seeThruPreds
- if (look[alt].size() == 0 || look[alt].contains(HIT_PRED)) {
- look[alt].clear();
- }
- }
- return look;
-}
-
-misc::IntervalSet LL1Analyzer::LOOK(ATNState* s, RuleContext* ctx) const {
- return LOOK(s, nullptr, ctx);
-}
-
-misc::IntervalSet LL1Analyzer::LOOK(ATNState* s, ATNState* stopState,
- RuleContext* ctx) const {
- misc::IntervalSet r;
- bool seeThruPreds = true; // ignore preds; get all lookahead
- Ref<PredictionContext> lookContext =
- ctx != nullptr ? PredictionContext::fromRuleContext(_atn, ctx) : nullptr;
-
- ATNConfig::Set lookBusy;
- antlrcpp::BitSet callRuleStack;
- _LOOK(s, stopState, lookContext, r, lookBusy, callRuleStack, seeThruPreds,
- true);
-
- return r;
-}
-
-void LL1Analyzer::_LOOK(ATNState* s, ATNState* stopState,
- Ref<PredictionContext> const& ctx,
- misc::IntervalSet& look, ATNConfig::Set& lookBusy,
- antlrcpp::BitSet& calledRuleStack, bool seeThruPreds,
- bool addEOF) const {
- Ref<ATNConfig> c = std::make_shared<ATNConfig>(s, 0, ctx);
-
- if (lookBusy.count(c) > 0) // Keep in mind comparison is based on members of
- // the class, not the actual instance.
- return;
-
- lookBusy.insert(c);
-
- // ml: s can never be null, hence no need to check if stopState is != null.
- if (s == stopState) {
- if (ctx == nullptr) {
- look.add(Token::EPSILON);
- return;
- } else if (ctx->isEmpty() && addEOF) {
- look.add(Token::EOF);
- return;
- }
- }
-
- if (s->getStateType() == ATNState::RULE_STOP) {
- if (ctx == nullptr) {
- look.add(Token::EPSILON);
- return;
- } else if (ctx->isEmpty() && addEOF) {
- look.add(Token::EOF);
- return;
- }
-
- if (ctx != PredictionContext::EMPTY) {
- // run thru all possible stack tops in ctx
- for (size_t i = 0; i < ctx->size(); i++) {
- ATNState* returnState = _atn.states[ctx->getReturnState(i)];
-
- bool removed = calledRuleStack.test(returnState->ruleIndex);
- auto onExit = finally([removed, &calledRuleStack, returnState] {
- if (removed) {
- calledRuleStack.set(returnState->ruleIndex);
- }
- });
-
- calledRuleStack[returnState->ruleIndex] = false;
- _LOOK(returnState, stopState, ctx->getParent(i), look, lookBusy,
- calledRuleStack, seeThruPreds, addEOF);
- }
- return;
- }
- }
-
- size_t n = s->transitions.size();
- for (size_t i = 0; i < n; i++) {
- Transition* t = s->transitions[i];
-
- if (t->getSerializationType() == Transition::RULE) {
- if (calledRuleStack[(static_cast<RuleTransition*>(t))
- ->target->ruleIndex]) {
- continue;
- }
-
- Ref<PredictionContext> newContext = SingletonPredictionContext::create(
- ctx, (static_cast<RuleTransition*>(t))->followState->stateNumber);
- auto onExit = finally([t, &calledRuleStack] {
- calledRuleStack[(static_cast<RuleTransition*>(t))->target->ruleIndex] =
- false;
- });
-
- calledRuleStack.set((static_cast<RuleTransition*>(t))->target->ruleIndex);
- _LOOK(t->target, stopState, newContext, look, lookBusy, calledRuleStack,
- seeThruPreds, addEOF);
-
- } else if (is<AbstractPredicateTransition*>(t)) {
- if (seeThruPreds) {
- _LOOK(t->target, stopState, ctx, look, lookBusy, calledRuleStack,
- seeThruPreds, addEOF);
- } else {
- look.add(HIT_PRED);
- }
- } else if (t->isEpsilon()) {
- _LOOK(t->target, stopState, ctx, look, lookBusy, calledRuleStack,
- seeThruPreds, addEOF);
- } else if (t->getSerializationType() == Transition::WILDCARD) {
- look.addAll(misc::IntervalSet::of(
- Token::MIN_USER_TOKEN_TYPE, static_cast<ssize_t>(_atn.maxTokenType)));
- } else {
- misc::IntervalSet set = t->label();
- if (!set.isEmpty()) {
- if (is<NotSetTransition*>(t)) {
- set = set.complement(
- misc::IntervalSet::of(Token::MIN_USER_TOKEN_TYPE,
- static_cast<ssize_t>(_atn.maxTokenType)));
- }
- look.addAll(set);
- }
- }
- }
-}