def _to_tokens(node: Tree) -> Iterable[Token]: if isinstance(node, TerminalNode): yield node.getSymbol() else: for i in range(node.getChildCount()): for x in _to_tokens(node.getChild(i)): yield x
def getAncestors(cls, t: Tree): ancestors = [] t = t.getParent() while t is not None: ancestors.insert(0, t) # insert at start t = t.getParent() return ancestors
def getAncestors(cls, t:Tree): ancestors = [] t = t.getParent() while t is not None: ancestors.insert(0, t) # insert at start t = t.getParent() return ancestors
def toListStringTree(t: Tree, ruleNames: list = None, recog: Parser = None, indent=" ", separateEnding=False, level=0): if recog is not None: ruleNames = recog.ruleNames nodeText, terminal = getNodeText(t, ruleNames) s = escapeWhitespace(nodeText, False) if t.getChildCount() == 0: if s[0] == "'": return "\n" + indent * level + escapeInnerSingleQuotes(s) with StringIO() as buf: if level > 0: buf.write("\n" + indent * level) buf.write("[" + s) numChilds = t.getChildCount() for i in range(numChilds): sep = ',' if i < numChilds - 1 else '' buf.write( toLispStringTree(t.getChild(i), ruleNames, recog, indent, separateEnding, level + 1) + sep) if level > 0 and separateEnding: buf.write("\n" + indent * level) buf.write("]") return buf.getvalue()
def collectChildren(self, node: Tree, tp: Type) -> List[Any]: result: List[Any] = [] n = node.getChildCount() for i in range(n): c = node.getChild(i) if isinstance(c, tp): result.append(c.accept(self)) return result
def treeDesc(t: Tree, p, indent=0): ruleNames = p.ruleNames s = escapeWhitespace(Trees.getNodeText(t, ruleNames), False) if t.getChildCount() == 0: return s with StringIO() as buf: buf.write(s + "\n") indent += 2 for i in range(0, t.getChildCount()): buf.write(' ' * indent) buf.write(treeDesc(t.getChild(i), p, indent) + "\n") return buf.getvalue()
def toStringTree(cls, t:Tree, ruleNames:list=None, recog:Parser=None): if recog is not None: ruleNames = recog.ruleNames s = escapeWhitespace(cls.getNodeText(t, ruleNames), False) if t.getChildCount()==0: return s with StringIO() as buf: buf.write("(") buf.write(s) buf.write(' ') for i in range(0, t.getChildCount()): if i > 0: buf.write(' ') buf.write(cls.toStringTree(t.getChild(i), ruleNames)) buf.write(")") return buf.getvalue()
def getNodeText(cls, t:Tree, ruleNames:list=None, recog:Parser=None): if recog is not None: ruleNames = recog.ruleNames if ruleNames is not None: if isinstance(t, RuleNode): return ruleNames[t.getRuleContext().getRuleIndex()] elif isinstance( t, ErrorNode): return str(t) elif isinstance(t, TerminalNode): if t.symbol is not None: return t.symbol.text # no recog for rule names payload = t.getPayload() if isinstance(payload, Token ): return payload.text return str(t.getPayload())
def getNodeText(cls, t: Tree, ruleNames: list = None, recog: Parser = None): if recog is not None: ruleNames = recog.ruleNames if ruleNames is not None: if isinstance(t, RuleNode): return ruleNames[t.getRuleContext().getRuleIndex()] elif isinstance(t, ErrorNode): return str(t) elif isinstance(t, TerminalNode): if t.symbol is not None: return t.symbol.text # no recog for rule names payload = t.getPayload() if isinstance(payload, Token): return payload.text return str(t.getPayload())
def subJsonStringTree(t: Tree, ruleNames: list, indent, level=0, inArray=True): nodeText, terminal = getNodeText(t, ruleNames) s = escapeWhitespace(nodeText, False) numChilds = t.getChildCount() with StringIO() as buf: tab = indent * level if inArray: buf.write('\n' + tab) if numChilds == 0 and terminal: s = escapeInnerDoubleQuotes(s) s = s[1:-1] #un-single-quote buf.write('"' + s + '"') else: tab2 = indent * (level + 1) if numChilds == 1: buf.write('{\n' + tab2 + '"' + s + '": ') buf.write( subJsonStringTree(t.getChild(0), ruleNames, indent, level + 1, False)) buf.write('\n' + tab + "}") else: buf.write('{\n' + tab2 + '"' + s + '": [') if numChilds == 0: buf.write("]") else: for i in range(numChilds): sep = ',' if i < numChilds - 1 else '' buf.write( subJsonStringTree(t.getChild(i), ruleNames, indent, level + 2, True) + sep) buf.write('\n' + tab2 + "]") buf.write('\n' + tab + "}") return buf.getvalue()
def _get_query_elements(self, node: Tree) -> Iterable[Any]: # noqa: C901 if node is None: return if isinstance(node, TerminalNode): token = node.getSymbol() yield self.sql.raw_code[token.start : token.stop + 1] for i in range(node.getChildCount()): n = node.getChild(i) if isinstance(n, fp.TableNameContext): for x in self.visitTableName(n): yield x elif isinstance(n, fp.AliasedFugueNestedContext): for x in self.visitAliasedFugueNested(n): yield x elif isinstance(n, fp.QueryContext): for x in self.visitQuery(n): yield x elif isinstance(n, fp.OptionalFromClauseContext): for x in self.visitOptionalFromClause(n): yield x else: for x in self._get_query_elements(n): yield x
def _get_query_elements(self, node: Tree) -> Iterable[Any]: # noqa: C901 if node is None: return if isinstance(node, CommonToken): yield self.sql.raw_code[node.start:node.stop + 1] return if isinstance(node, TerminalNode): token = node.getSymbol() yield self.sql.raw_code[token.start:token.stop + 1] for i in range(node.getChildCount()): n = node.getChild(i) if isinstance(n, fp.TableNameContext): yield from self.visitTableName(n) elif isinstance(n, fp.OptionalFromClauseContext): yield from self.visitOptionalFromClause(n) elif isinstance(n, fp.FugueTermContext): yield from self.visitFugueTerm(n) elif isinstance(n, fp.AliasedQueryContext): yield from self.visitAliasedQuery(n) elif isinstance(n, fp.SetOperationContext): yield from self.visitSetOperation(n) else: yield from self._get_query_elements(n)
def getNodeText(cls, t:Tree, ruleNames:list=None, recog:Parser=None): if recog is not None: ruleNames = recog.ruleNames if ruleNames is not None: if isinstance(t, RuleNode): if t.getAltNumber()!=0: # should use ATN.INVALID_ALT_NUMBER but won't compile return ruleNames[t.getRuleIndex()]+":"+str(t.getAltNumber()) return ruleNames[t.getRuleIndex()] elif isinstance( t, ErrorNode): return str(t) elif isinstance(t, TerminalNode): if t.symbol is not None: return t.symbol.text # no recog for rule names payload = t.getPayload() if isinstance(payload, Token ): return payload.text return str(t.getPayload())
def getChildren(cls, t:Tree): return [ t.getChild(i) for i in range(0, t.getChildCount()) ]
def getChildren(cls, t: Tree): return [t.getChild(i) for i in range(0, t.getChildCount())]