def LOOK(self, s, stopState=None, ctx=None): r = IntervalSet() seeThruPreds = True # ignore preds; get all lookahead lookContext = PredictionContextFromRuleContext( s.atn, ctx) if ctx is not None else None self._LOOK(s, stopState, lookContext, r, set(), set(), seeThruPreds, True) return r
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 __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 getErrorRecoverySet(self, recognizer: Parser): atn = recognizer._interp.atn ctx = recognizer._ctx recoverSet = IntervalSet() while ctx is not None and ctx.invokingState >= 0: # compute what follows who invoked us invokingState = atn.states[ctx.invokingState] rt = invokingState.transitions[0] follow = atn.nextTokens(rt.followState) recoverSet.addSet(follow) ctx = ctx.parentCtx recoverSet.removeOne(Token.EPSILON) return recoverSet
def getExpectedTokens(self, stateNumber: int, ctx: RuleContext): if stateNumber < 0 or stateNumber >= len(self.states): raise Exception("Invalid state number.") s = self.states[stateNumber] following = self.nextTokens(s) if Token.EPSILON not in following: return following expected = IntervalSet() expected.addSet(following) expected.removeOne(Token.EPSILON) while (ctx != None and ctx.invokingState >= 0 and Token.EPSILON in following): invokingState = self.states[ctx.invokingState] rt = invokingState.transitions[0] following = self.nextTokens(rt.followState) expected.addSet(following) expected.removeOne(Token.EPSILON) ctx = ctx.parentCtx if Token.EPSILON in following: expected.addOne(Token.EOF) return expected
def getControlRecoverySet(self, recognizer: Parser): ctx = recognizer._ctx recoverSet = IntervalSet() while ctx is not None and ctx.invokingState >= 0: # If statement (for Else we only want EndIf): if isinstance( ctx, (wizardParser.IfStmtContext, wizardParser.ElifStmtContext)): recoverSet.addOne(wizardLexer.Elif) recoverSet.addOne(wizardLexer.Else) recoverSet.addOne(wizardLexer.EndIf) elif isinstance(ctx, wizardParser.ElseStmtContext): recoverSet.addOne(wizardLexer.EndIf) # For/While statement: elif isinstance(ctx, wizardParser.ForStmtContext): recoverSet.addOne(wizardLexer.EndFor) elif isinstance(ctx, wizardParser.WhileStmtContext): recoverSet.addOne(wizardLexer.EndWhile) # Case/Default context: elif isinstance( ctx, (wizardParser.CaseStmtContext, wizardParser.DefaultStmtContext), ): recoverSet.addOne(wizardLexer.Break) # Select context: elif isinstance(ctx, wizardParser.SelectStmtContext): recoverSet.addOne(wizardLexer.EndSelect) ctx = ctx.parentCtx recoverSet.removeOne(Token.EPSILON) return recoverSet
def makeLabel(self): s = IntervalSet() s.addOne(self.label_) return s
def makeLabel(self): s = IntervalSet() s.addRange(range(self.start, self.stop + 1)) return s