コード例 #1
0
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
コード例 #2
0
 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
コード例 #3
0
ファイル: Trees.py プロジェクト: BurtHarris/antlr4
 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
コード例 #4
0
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()
コード例 #5
0
 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
コード例 #6
0
ファイル: parse_helper.py プロジェクト: andromed2/dynamod
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()
コード例 #7
0
ファイル: Trees.py プロジェクト: BurtHarris/antlr4
 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()
コード例 #8
0
ファイル: Trees.py プロジェクト: GorNishanov/antlr4-python3
 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())
コード例 #9
0
ファイル: Trees.py プロジェクト: ProjectYB/CFlat
 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()
コード例 #10
0
 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())
コード例 #11
0
 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()
コード例 #12
0
 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
コード例 #13
0
ファイル: _visitors.py プロジェクト: fugue-project/fugue
 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)
コード例 #14
0
ファイル: Trees.py プロジェクト: BurtHarris/antlr4
 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())
コード例 #15
0
ファイル: Trees.py プロジェクト: ProjectYB/CFlat
 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())
コード例 #16
0
ファイル: Trees.py プロジェクト: BurtHarris/antlr4
 def getChildren(cls, t:Tree):
     return [ t.getChild(i) for i in range(0, t.getChildCount()) ]
コード例 #17
0
 def getChildren(cls, t: Tree):
     return [t.getChild(i) for i in range(0, t.getChildCount())]