Beispiel #1
0
 def evaluate(self, t: ParseTree):
     # return all children of t that match nodeName
     return [
         c for c in Trees.getChildren(t)
         if isinstance(c, TerminalNode) and (
             c.symbol.type == self.tokenType) == (not self.invert)
     ]
Beispiel #2
0
 def evaluate(self, t: ParseTree):
     # return all children of t that match nodeName
     return [
         c for c in Trees.getChildren(t)
         if isinstance(c, ParserRuleContext) and (
             c.ruleIndex == self.ruleIndex) == (not self.invert)
     ]
Beispiel #3
0
 def evaluate(self, t:ParseTree):
     # return all children of t that match nodeName
     nodes = []
     for c in Trees.getChildren(t):
         if isinstance(c, ParserRuleContext ):
             if (c.ruleIndex == self.ruleIndex ) == (not self.invert):
                 nodes.append(c)
     return nodes
Beispiel #4
0
 def evaluate(self, t: ParseTree):
     # return all children of t that match nodeName
     nodes = []
     for c in Trees.getChildren(t):
         if isinstance(c, TerminalNode):
             if (c.symbol.type == self.tokenType) == (not self.invert):
                 nodes.append(c)
     return nodes
Beispiel #5
0
 def evaluate(self, t):
     # return all children of t that match nodeName
     nodes = []
     for c in Trees.getChildren(t):
         if isinstance(c, TerminalNode):
             if (c.symbol.type == self.tokenType) == (not self.invert):
                 nodes.append(c)
     return nodes
Beispiel #6
0
 def evaluate(self, t: ParseTree):
     # return all children of t that match nodeName
     nodes = []
     for c in Trees.getChildren(t):
         if isinstance(c, ParserRuleContext):
             if (c.ruleIndex == self.ruleIndex) == (not self.invert):
                 nodes.append(c)
     return nodes
Beispiel #7
0
    def generate_tree(cls, code_line):
        tree, parser = get_grammar_tree(code_text=code_line)
        test_tree = Trees.getChildren(tree)[0]

        string_tree = Trees.toStringTree(test_tree, recog=parser)
        string_tree = string_tree.replace('( (', '[ (').replace(') )', ') ]')

        return Tree.fromstring(string_tree)
Beispiel #8
0
 def traverse(self, tree):
     parent_label = Trees.getNodeText(tree, self.parser.ruleNames)
     self.nodes.append((self.stack[-1], parent_label))
     for child in Trees.getChildren(tree):
         self.cnt += 1
         self.edges.append((self.stack[-1], self.cnt))
         self.stack.append(self.cnt)
         self.traverse(child)
         self.stack.pop()
Beispiel #9
0
def traverse(tree: Tree, file, dot, node_name):
    children = Trees.getChildren(tree)
    for child in children:
        node = Trees.getNodeText(tree, DbQlGrammarParser.ruleNames)
        child_node = Trees.getNodeText(child, DbQlGrammarParser.ruleNames)
        child_name = get_node_name()

        dot.node(node_name, node)
        dot.node(child_name, child_node)

        dot.edge(node_name, child_name)
        traverse(child, file, dot, child_name)
    def __traverse(self, tree, counter):
        root = Trees.getNodeText(tree, DbQLGrammarParser.ruleNames)
        root_name = str(counter)

        for child in Trees.getChildren(tree):
            child_node = Trees.getNodeText(child, DbQLGrammarParser.ruleNames)
            new_counter = counter + 1
            child_name = str(new_counter)
            
            self.dot.node(root_name, root)
            self.dot.node(child_name, child_node)
            self.dot.edge(root_name, child_name)
            
            counter = self.__traverse(child, new_counter)
        
        return counter
Beispiel #11
0
 def evaluate(self, t:ParseTree):
     if self.invert:
         return list() # !* is weird but valid (empty)
     else:
         return Trees.getChildren(t)
Beispiel #12
0
 def evaluate(self, t:ParseTree):
     # return all children of t that match nodeName
     return [c for c in Trees.getChildren(t) if isinstance(c, ParserRuleContext) and (c.ruleIndex == self.ruleIndex) == (not self.invert)]
Beispiel #13
0
 def evaluate(self, t: ParseTree):
     # return all TerminalNode children of t that match tokenType (or do not match if inverted)
     return filter(
         lambda c: isinstance(c, TerminalNode) and
         (self.invert ^ (c.symbol.type == self.tokenType)),
         Trees.getChildren(t))
Beispiel #14
0
 def evaluate(self, t: ParseTree):
     # return all ParserRuleContext children of t that match ruleIndex (or do not match if inverted)
     return filter(
         lambda c: isinstance(c, ParserRuleContext) and
         (self.invert ^ (c.getRuleIndex() == self.ruleIndex)),
         Trees.getChildren(t))
Beispiel #15
0
 def evaluate(self, t):
     # return all children of t that match nodeName
     return [c for c in Trees.getChildren(t) if isinstance(c, TerminalNode) and (c.symbol.type == self.tokenType) == (not self.invert)]
Beispiel #16
0
    result.append(res)

    return result


if __name__ == '__main__':
    tree, parser = get_grammar_tree(
        file_path="D:\Study\Diploma\\test_save.sol")

    from antlr4.tree.Trees import Trees
    from antlr4.Utils import escapeWhitespace

    # from analyzer.solParser import solParser

    results = []
    test_tree = list(Trees.getChildren(tree))[6:7][0]
    builded = build_tree(Trees, test_tree, parser)
    print(builded)

    for line in list(Trees.getChildren(tree))[6:7]:
        res = child_pairs(line)
        res_pairs = [('program', 'line')]
        for r in res:
            if escapeWhitespace(Trees.getNodeText(r[1], None, recog=parser),
                                False) == '\\r\\n':
                continue

            parent = escapeWhitespace(
                Trees.getNodeText(r[0], None, recog=parser), False)
            child = escapeWhitespace(
                Trees.getNodeText(r[1], None, recog=parser), False)