| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| from antlr4.RuleContext import RuleContext |
| from antlr4.Token import Token |
| from antlr4.tree.Tree import ParseTreeListener, ParseTree, TerminalNodeImpl, ErrorNodeImpl, TerminalNode, \ |
| INVALID_INTERVAL |
|
|
| |
| ParserRuleContext = None |
|
|
| class ParserRuleContext(RuleContext): |
| __slots__ = ('children', 'start', 'stop', 'exception') |
| def __init__(self, parent:ParserRuleContext = None, invokingStateNumber:int = None ): |
| super().__init__(parent, invokingStateNumber) |
| |
| |
| |
| |
| |
| |
| self.children = None |
| self.start = None |
| self.stop = None |
| |
| |
| self.exception = None |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| def copyFrom(self, ctx:ParserRuleContext): |
| |
| self.parentCtx = ctx.parentCtx |
| self.invokingState = ctx.invokingState |
| self.children = None |
| self.start = ctx.start |
| self.stop = ctx.stop |
|
|
| |
| if ctx.children is not None: |
| self.children = [] |
| |
| for child in ctx.children: |
| if isinstance(child, ErrorNodeImpl): |
| self.children.append(child) |
| child.parentCtx = self |
|
|
| |
| def enterRule(self, listener:ParseTreeListener): |
| pass |
|
|
| def exitRule(self, listener:ParseTreeListener): |
| pass |
|
|
| |
| def addChild(self, child:ParseTree): |
| if self.children is None: |
| self.children = [] |
| self.children.append(child) |
| return child |
|
|
| |
| |
| |
| |
| def removeLastChild(self): |
| if self.children is not None: |
| del self.children[len(self.children)-1] |
|
|
| def addTokenNode(self, token:Token): |
| node = TerminalNodeImpl(token) |
| self.addChild(node) |
| node.parentCtx = self |
| return node |
|
|
| def addErrorNode(self, badToken:Token): |
| node = ErrorNodeImpl(badToken) |
| self.addChild(node) |
| node.parentCtx = self |
| return node |
|
|
| def getChild(self, i:int, ttype:type = None): |
| if ttype is None: |
| return self.children[i] if len(self.children)>i else None |
| else: |
| for child in self.getChildren(): |
| if not isinstance(child, ttype): |
| continue |
| if i==0: |
| return child |
| i -= 1 |
| return None |
|
|
| def getChildren(self, predicate = None): |
| if self.children is not None: |
| for child in self.children: |
| if predicate is not None and not predicate(child): |
| continue |
| yield child |
|
|
| def getToken(self, ttype:int, i:int): |
| for child in self.getChildren(): |
| if not isinstance(child, TerminalNode): |
| continue |
| if child.symbol.type != ttype: |
| continue |
| if i==0: |
| return child |
| i -= 1 |
| return None |
|
|
| def getTokens(self, ttype:int ): |
| if self.getChildren() is None: |
| return [] |
| tokens = [] |
| for child in self.getChildren(): |
| if not isinstance(child, TerminalNode): |
| continue |
| if child.symbol.type != ttype: |
| continue |
| tokens.append(child) |
| return tokens |
|
|
| def getTypedRuleContext(self, ctxType:type, i:int): |
| return self.getChild(i, ctxType) |
|
|
| def getTypedRuleContexts(self, ctxType:type): |
| children = self.getChildren() |
| if children is None: |
| return [] |
| contexts = [] |
| for child in children: |
| if not isinstance(child, ctxType): |
| continue |
| contexts.append(child) |
| return contexts |
|
|
| def getChildCount(self): |
| return len(self.children) if self.children else 0 |
|
|
| def getSourceInterval(self): |
| if self.start is None or self.stop is None: |
| return INVALID_INTERVAL |
| else: |
| return (self.start.tokenIndex, self.stop.tokenIndex) |
|
|
|
|
| RuleContext.EMPTY = ParserRuleContext() |
|
|
| class InterpreterRuleContext(ParserRuleContext): |
|
|
| def __init__(self, parent:ParserRuleContext, invokingStateNumber:int, ruleIndex:int): |
| super().__init__(parent, invokingStateNumber) |
| self.ruleIndex = ruleIndex |
|
|