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) ]
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) ]
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
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
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
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
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)
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()
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
def evaluate(self, t:ParseTree): if self.invert: return list() # !* is weird but valid (empty) else: return Trees.getChildren(t)
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)]
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))
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))
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)]
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)