|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | from antlr4.atn.ATNState import StarLoopEntryState | 
					
						
						|  |  | 
					
						
						|  | from antlr4.atn.ATNConfigSet import ATNConfigSet | 
					
						
						|  | from antlr4.atn.ATNState import DecisionState | 
					
						
						|  | from antlr4.dfa.DFAState import DFAState | 
					
						
						|  | from antlr4.error.Errors import IllegalStateException | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | class DFA(object): | 
					
						
						|  | __slots__ = ('atnStartState', 'decision', '_states', 's0', 'precedenceDfa') | 
					
						
						|  |  | 
					
						
						|  | def __init__(self, atnStartState:DecisionState, decision:int=0): | 
					
						
						|  |  | 
					
						
						|  | self.atnStartState = atnStartState | 
					
						
						|  | self.decision = decision | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | self._states = dict() | 
					
						
						|  | self.s0 = None | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | self.precedenceDfa = False | 
					
						
						|  |  | 
					
						
						|  | if isinstance(atnStartState, StarLoopEntryState): | 
					
						
						|  | if atnStartState.isPrecedenceDecision: | 
					
						
						|  | self.precedenceDfa = True | 
					
						
						|  | precedenceState = DFAState(configs=ATNConfigSet()) | 
					
						
						|  | precedenceState.edges = [] | 
					
						
						|  | precedenceState.isAcceptState = False | 
					
						
						|  | precedenceState.requiresFullContext = False | 
					
						
						|  | self.s0 = precedenceState | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | def getPrecedenceStartState(self, precedence:int): | 
					
						
						|  | if not self.precedenceDfa: | 
					
						
						|  | raise IllegalStateException("Only precedence DFAs may contain a precedence start state.") | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | if precedence < 0 or precedence >= len(self.s0.edges): | 
					
						
						|  | return None | 
					
						
						|  | return self.s0.edges[precedence] | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | def setPrecedenceStartState(self, precedence:int, startState:DFAState): | 
					
						
						|  | if not self.precedenceDfa: | 
					
						
						|  | raise IllegalStateException("Only precedence DFAs may contain a precedence start state.") | 
					
						
						|  |  | 
					
						
						|  | if precedence < 0: | 
					
						
						|  | return | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | if precedence >= len(self.s0.edges): | 
					
						
						|  | ext = [None] * (precedence + 1 - len(self.s0.edges)) | 
					
						
						|  | self.s0.edges.extend(ext) | 
					
						
						|  | self.s0.edges[precedence] = startState | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | def setPrecedenceDfa(self, precedenceDfa:bool): | 
					
						
						|  | if self.precedenceDfa != precedenceDfa: | 
					
						
						|  | self._states = dict() | 
					
						
						|  | if precedenceDfa: | 
					
						
						|  | precedenceState = DFAState(configs=ATNConfigSet()) | 
					
						
						|  | precedenceState.edges = [] | 
					
						
						|  | precedenceState.isAcceptState = False | 
					
						
						|  | precedenceState.requiresFullContext = False | 
					
						
						|  | self.s0 = precedenceState | 
					
						
						|  | else: | 
					
						
						|  | self.s0 = None | 
					
						
						|  | self.precedenceDfa = precedenceDfa | 
					
						
						|  |  | 
					
						
						|  | @property | 
					
						
						|  | def states(self): | 
					
						
						|  | return self._states | 
					
						
						|  |  | 
					
						
						|  |  | 
					
						
						|  | def sortedStates(self): | 
					
						
						|  | return sorted(self._states.keys(), key=lambda state: state.stateNumber) | 
					
						
						|  |  | 
					
						
						|  | def __str__(self): | 
					
						
						|  | return self.toString(None) | 
					
						
						|  |  | 
					
						
						|  | def toString(self, literalNames:list=None, symbolicNames:list=None): | 
					
						
						|  | if self.s0 is None: | 
					
						
						|  | return "" | 
					
						
						|  | from antlr4.dfa.DFASerializer import DFASerializer | 
					
						
						|  | serializer = DFASerializer(self,literalNames,symbolicNames) | 
					
						
						|  | return str(serializer) | 
					
						
						|  |  | 
					
						
						|  | def toLexerString(self): | 
					
						
						|  | if self.s0 is None: | 
					
						
						|  | return "" | 
					
						
						|  | from antlr4.dfa.DFASerializer import LexerDFASerializer | 
					
						
						|  | serializer = LexerDFASerializer(self) | 
					
						
						|  | return str(serializer) | 
					
						
						|  |  |