def cat(filename, tokenizer, patterns, writer): """Parses file, then applies patterns on parsetree root before passing it to writer.""" ## Parsing: root = parsetree.fromfile(filename, tokenizer, attr_type=dict) ## Applying patterns: if patterns: for node in root.preorder(): for pattern in patterns: pattern.match(node) ## Writing: writer.write_node(root)
from ptTools.patterns import AnyPattern as Any from ptTools.patterns import LiteralPattern as Lit from ptTools.patterns import TuplePattern from ptTools.patterns import TuplePattern as Tup from prettify import patterns as prettify if __name__ == '__main__': print(__doc__) ## Initializing writer for printing ParseTreeNodes: writer = AnsiParseTreeWriter(sys.stdout) ## Creating a ParseTreeNode from this very file: root = parsetree.fromfile(__file__, attr_type=dict) ## Creating a pattern that matches itself in this file: _ = Any() captures = [] X = _%captures.append pattern = Tup(symbol.expr_stmt, Tup(Lit(symbol.testlist_star_expr) >> (token.NAME, 'pattern')), (token.EQUAL, '='), X) ## Matches parse tree node described by: ## ## (expr.stmt ## (testlist_star_expr ## (.. (NAME, 'pattern')), ## (EQUAL '='),