add antlr
This commit is contained in:
76
lib/antlr4/include/atn/Transition.h
Normal file
76
lib/antlr4/include/atn/Transition.h
Normal file
@@ -0,0 +1,76 @@
|
||||
/* 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.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "misc/IntervalSet.h"
|
||||
|
||||
namespace antlr4 {
|
||||
namespace atn {
|
||||
|
||||
/// <summary>
|
||||
/// An ATN transition between any two ATN states. Subclasses define
|
||||
/// atom, set, epsilon, action, predicate, rule transitions.
|
||||
/// <p/>
|
||||
/// This is a one way link. It emanates from a state (usually via a list of
|
||||
/// transitions) and has a target state.
|
||||
/// <p/>
|
||||
/// Since we never have to change the ATN transitions once we construct it,
|
||||
/// we can fix these transitions as specific classes. The DFA transitions
|
||||
/// on the other hand need to update the labels as it adds transitions to
|
||||
/// the states. We'll use the term Edge for the DFA to distinguish them from
|
||||
/// ATN transitions.
|
||||
/// </summary>
|
||||
class ANTLR4CPP_PUBLIC Transition {
|
||||
public:
|
||||
// constants for serialization
|
||||
enum SerializationType {
|
||||
EPSILON = 1,
|
||||
RANGE = 2,
|
||||
RULE = 3,
|
||||
PREDICATE = 4, // e.g., {isType(input.LT(1))}?
|
||||
ATOM = 5,
|
||||
ACTION = 6,
|
||||
SET = 7, // ~(A|B) or ~atom, wildcard, which convert to next 2
|
||||
NOT_SET = 8,
|
||||
WILDCARD = 9,
|
||||
PRECEDENCE = 10,
|
||||
};
|
||||
|
||||
static const std::vector<std::string> serializationNames;
|
||||
|
||||
/// The target of this transition.
|
||||
// ml: this is a reference into the ATN.
|
||||
ATNState *target;
|
||||
|
||||
virtual ~Transition();
|
||||
|
||||
protected:
|
||||
Transition(ATNState *target);
|
||||
|
||||
public:
|
||||
virtual SerializationType getSerializationType() const = 0;
|
||||
|
||||
/**
|
||||
* Determines if the transition is an "epsilon" transition.
|
||||
*
|
||||
* <p>The default implementation returns {@code false}.</p>
|
||||
*
|
||||
* @return {@code true} if traversing this transition in the ATN does not
|
||||
* consume an input symbol; otherwise, {@code false} if traversing this
|
||||
* transition consumes (matches) an input symbol.
|
||||
*/
|
||||
virtual bool isEpsilon() const;
|
||||
virtual misc::IntervalSet label() const;
|
||||
virtual bool matches(size_t symbol, size_t minVocabSymbol, size_t maxVocabSymbol) const = 0;
|
||||
|
||||
virtual std::string toString() const;
|
||||
|
||||
Transition(Transition const&) = delete;
|
||||
Transition& operator=(Transition const&) = delete;
|
||||
};
|
||||
|
||||
} // namespace atn
|
||||
} // namespace antlr4
|
Reference in New Issue
Block a user