class SetTransition(Transition): def __init__(self, target, set): super(SetTransition, self).__init__(target) self.serializationType = self.SET if set is not None: self.label = set else: self.label = IntervalSet() self.label.addRange(Interval(Token.INVALID_TYPE, Token.INVALID_TYPE + 1)) def matches(self, symbol, minVocabSymbol, maxVocabSymbol): return symbol in self.label def __unicode__(self): return unicode(self.label)
class SetTransition(Transition): def __init__(self, target: ATNState, set: IntervalSet): super().__init__(target) self.serializationType = self.SET if set is not None: self.label = set else: self.label = IntervalSet() self.label.addRange( range(Token.INVALID_TYPE, Token.INVALID_TYPE + 1)) def matches(self, symbol: int, minVocabSymbol: int, maxVocabSymbol: int): return symbol in self.label def __str__(self): return str(self.label)
class SetTransition(Transition): def __init__(self, target:ATNState, set:IntervalSet): super().__init__(target) self.serializationType = self.SET if set is not None: self.label = set else: self.label = IntervalSet() self.label.addRange(range(Token.INVALID_TYPE, Token.INVALID_TYPE + 1)) def matches( self, symbol:int, minVocabSymbol:int, maxVocabSymbol:int): return symbol in self.label def __str__(self): return str(self.label)
class SetTransition(Transition): def __init__(self, target, set): super(SetTransition, self).__init__(target) self.serializationType = self.SET if set is not None: self.label = set else: self.label = IntervalSet() self.label.addRange( Interval(Token.INVALID_TYPE, Token.INVALID_TYPE + 1)) def matches(self, symbol, minVocabSymbol, maxVocabSymbol): return symbol in self.label def __unicode__(self): return unicode(self.label)
def makeLabel(self): s = IntervalSet() s.addRange(range(self.start, self.stop + 1)) return s
def _LOOK(self, s:ATNState, stopState:ATNState , ctx:PredictionContext, look:IntervalSet, lookBusy:set, calledRuleStack:set, seeThruPreds:bool, addEOF:bool): c = ATNConfig(s, 0, ctx) if c in lookBusy: return lookBusy.add(c) if s == stopState: if ctx is None: look.addOne(Token.EPSILON) return elif ctx.isEmpty() and addEOF: look.addOne(Token.EOF) return if isinstance(s, RuleStopState ): if ctx is None: look.addOne(Token.EPSILON) return elif ctx.isEmpty() and addEOF: look.addOne(Token.EOF) return if ctx != PredictionContext.EMPTY: # run thru all possible stack tops in ctx for i in range(0, len(ctx)): returnState = self.atn.states[ctx.getReturnState(i)] removed = returnState.ruleIndex in calledRuleStack try: calledRuleStack.discard(returnState.ruleIndex) self._LOOK(returnState, stopState, ctx.getParent(i), look, lookBusy, calledRuleStack, seeThruPreds, addEOF) finally: if removed: calledRuleStack.add(returnState.ruleIndex) return for t in s.transitions: if type(t) == RuleTransition: if t.target.ruleIndex in calledRuleStack: continue newContext = SingletonPredictionContext.create(ctx, t.followState.stateNumber) try: calledRuleStack.add(t.target.ruleIndex) self._LOOK(t.target, stopState, newContext, look, lookBusy, calledRuleStack, seeThruPreds, addEOF) finally: calledRuleStack.remove(t.target.ruleIndex) elif isinstance(t, AbstractPredicateTransition ): if seeThruPreds: self._LOOK(t.target, stopState, ctx, look, lookBusy, calledRuleStack, seeThruPreds, addEOF) else: look.addOne(self.HIT_PRED) elif t.isEpsilon: self._LOOK(t.target, stopState, ctx, look, lookBusy, calledRuleStack, seeThruPreds, addEOF) elif type(t) == WildcardTransition: look.addRange( range(Token.MIN_USER_TOKEN_TYPE, self.atn.maxTokenType + 1) ) else: set_ = t.label if set_ is not None: if isinstance(t, NotSetTransition): set_ = set_.complement(Token.MIN_USER_TOKEN_TYPE, self.atn.maxTokenType) look.addSet(set_)
def _LOOK(self, s: ATNState, stopState: ATNState, ctx: PredictionContext, look: IntervalSet, lookBusy: set, calledRuleStack: set, seeThruPreds: bool, addEOF: bool): c = ATNConfig(s, 0, ctx) if c in lookBusy: return lookBusy.add(c) if s == stopState: if ctx is None: look.addOne(Token.EPSILON) return elif ctx.isEmpty() and addEOF: look.addOne(Token.EOF) return if isinstance(s, RuleStopState): if ctx is None: look.addOne(Token.EPSILON) return elif ctx.isEmpty() and addEOF: look.addOne(Token.EOF) return if ctx != PredictionContext.EMPTY: removed = s.ruleIndex in calledRuleStack try: calledRuleStack.discard(s.ruleIndex) # run thru all possible stack tops in ctx for i in range(0, len(ctx)): returnState = self.atn.states[ctx.getReturnState(i)] self._LOOK(returnState, stopState, ctx.getParent(i), look, lookBusy, calledRuleStack, seeThruPreds, addEOF) finally: if removed: calledRuleStack.add(s.ruleIndex) return for t in s.transitions: if type(t) == RuleTransition: if t.target.ruleIndex in calledRuleStack: continue newContext = SingletonPredictionContext.create( ctx, t.followState.stateNumber) try: calledRuleStack.add(t.target.ruleIndex) self._LOOK(t.target, stopState, newContext, look, lookBusy, calledRuleStack, seeThruPreds, addEOF) finally: calledRuleStack.remove(t.target.ruleIndex) elif isinstance(t, AbstractPredicateTransition): if seeThruPreds: self._LOOK(t.target, stopState, ctx, look, lookBusy, calledRuleStack, seeThruPreds, addEOF) else: look.addOne(self.HIT_PRED) elif t.isEpsilon: self._LOOK(t.target, stopState, ctx, look, lookBusy, calledRuleStack, seeThruPreds, addEOF) elif type(t) == WildcardTransition: look.addRange( range(Token.MIN_USER_TOKEN_TYPE, self.atn.maxTokenType + 1)) else: set_ = t.label if set_ is not None: if isinstance(t, NotSetTransition): set_ = set_.complement(Token.MIN_USER_TOKEN_TYPE, self.atn.maxTokenType) look.addSet(set_)