|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from antlr4.atn.Transition import Transition |
|
|
|
INITIAL_NUM_TRANSITIONS = 4 |
|
|
|
class ATNState(object): |
|
__slots__ = ( |
|
'atn', 'stateNumber', 'stateType', 'ruleIndex', 'epsilonOnlyTransitions', |
|
'transitions', 'nextTokenWithinRule', |
|
) |
|
|
|
|
|
INVALID_TYPE = 0 |
|
BASIC = 1 |
|
RULE_START = 2 |
|
BLOCK_START = 3 |
|
PLUS_BLOCK_START = 4 |
|
STAR_BLOCK_START = 5 |
|
TOKEN_START = 6 |
|
RULE_STOP = 7 |
|
BLOCK_END = 8 |
|
STAR_LOOP_BACK = 9 |
|
STAR_LOOP_ENTRY = 10 |
|
PLUS_LOOP_BACK = 11 |
|
LOOP_END = 12 |
|
|
|
serializationNames = [ |
|
"INVALID", |
|
"BASIC", |
|
"RULE_START", |
|
"BLOCK_START", |
|
"PLUS_BLOCK_START", |
|
"STAR_BLOCK_START", |
|
"TOKEN_START", |
|
"RULE_STOP", |
|
"BLOCK_END", |
|
"STAR_LOOP_BACK", |
|
"STAR_LOOP_ENTRY", |
|
"PLUS_LOOP_BACK", |
|
"LOOP_END" ] |
|
|
|
INVALID_STATE_NUMBER = -1 |
|
|
|
def __init__(self): |
|
|
|
self.atn = None |
|
self.stateNumber = ATNState.INVALID_STATE_NUMBER |
|
self.stateType = None |
|
self.ruleIndex = 0 |
|
self.epsilonOnlyTransitions = False |
|
|
|
self.transitions = [] |
|
|
|
self.nextTokenWithinRule = None |
|
|
|
def __hash__(self): |
|
return self.stateNumber |
|
|
|
def __eq__(self, other): |
|
return isinstance(other, ATNState) and self.stateNumber==other.stateNumber |
|
|
|
def onlyHasEpsilonTransitions(self): |
|
return self.epsilonOnlyTransitions |
|
|
|
def isNonGreedyExitState(self): |
|
return False |
|
|
|
def __str__(self): |
|
return str(self.stateNumber) |
|
|
|
def addTransition(self, trans:Transition, index:int=-1): |
|
if len(self.transitions)==0: |
|
self.epsilonOnlyTransitions = trans.isEpsilon |
|
elif self.epsilonOnlyTransitions != trans.isEpsilon: |
|
self.epsilonOnlyTransitions = False |
|
|
|
if index==-1: |
|
self.transitions.append(trans) |
|
else: |
|
self.transitions.insert(index, trans) |
|
|
|
class BasicState(ATNState): |
|
|
|
def __init__(self): |
|
super().__init__() |
|
self.stateType = self.BASIC |
|
|
|
|
|
class DecisionState(ATNState): |
|
__slots__ = ('decision', 'nonGreedy') |
|
def __init__(self): |
|
super().__init__() |
|
self.decision = -1 |
|
self.nonGreedy = False |
|
|
|
|
|
class BlockStartState(DecisionState): |
|
__slots__ = 'endState' |
|
|
|
def __init__(self): |
|
super().__init__() |
|
self.endState = None |
|
|
|
class BasicBlockStartState(BlockStartState): |
|
|
|
def __init__(self): |
|
super().__init__() |
|
self.stateType = self.BLOCK_START |
|
|
|
|
|
class BlockEndState(ATNState): |
|
__slots__ = 'startState' |
|
|
|
def __init__(self): |
|
super().__init__() |
|
self.stateType = self.BLOCK_END |
|
self.startState = None |
|
|
|
|
|
|
|
|
|
|
|
|
|
class RuleStopState(ATNState): |
|
|
|
def __init__(self): |
|
super().__init__() |
|
self.stateType = self.RULE_STOP |
|
|
|
class RuleStartState(ATNState): |
|
__slots__ = ('stopState', 'isPrecedenceRule') |
|
|
|
def __init__(self): |
|
super().__init__() |
|
self.stateType = self.RULE_START |
|
self.stopState = None |
|
self.isPrecedenceRule = False |
|
|
|
|
|
|
|
|
|
class PlusLoopbackState(DecisionState): |
|
|
|
def __init__(self): |
|
super().__init__() |
|
self.stateType = self.PLUS_LOOP_BACK |
|
|
|
|
|
|
|
|
|
|
|
|
|
class PlusBlockStartState(BlockStartState): |
|
__slots__ = 'loopBackState' |
|
|
|
def __init__(self): |
|
super().__init__() |
|
self.stateType = self.PLUS_BLOCK_START |
|
self.loopBackState = None |
|
|
|
|
|
class StarBlockStartState(BlockStartState): |
|
|
|
def __init__(self): |
|
super().__init__() |
|
self.stateType = self.STAR_BLOCK_START |
|
|
|
class StarLoopbackState(ATNState): |
|
|
|
def __init__(self): |
|
super().__init__() |
|
self.stateType = self.STAR_LOOP_BACK |
|
|
|
|
|
class StarLoopEntryState(DecisionState): |
|
__slots__ = ('loopBackState', 'isPrecedenceDecision') |
|
|
|
def __init__(self): |
|
super().__init__() |
|
self.stateType = self.STAR_LOOP_ENTRY |
|
self.loopBackState = None |
|
|
|
self.isPrecedenceDecision = None |
|
|
|
|
|
class LoopEndState(ATNState): |
|
__slots__ = 'loopBackState' |
|
|
|
def __init__(self): |
|
super().__init__() |
|
self.stateType = self.LOOP_END |
|
self.loopBackState = None |
|
|
|
|
|
class TokensStartState(DecisionState): |
|
|
|
def __init__(self): |
|
super().__init__() |
|
self.stateType = self.TOKEN_START |
|
|