AST

This file defines classes for different kinds of nodes of an Abstract Syntax Tree. In general, you will have a different AST node for each kind of grammar rule.

This file has a small bit of metaprogramming to simplify specification and to perform some validation steps.

class scim2_filter_parser.ast.NodeVisitor

Class for visiting nodes of the parse tree. This is modeled after a similar class in the standard library ast.NodeVisitor. For each node, the visit(node) method calls a method visit_NodeName(node) which should be implemented in subclasses. The generic_visit() method is called for all nodes where there is no matching visit_NodeName() method.

Here is a example of a visitor that examines binary operators:

class VisitOps(NodeVisitor):
    visit_BinOp(self,node):
        print('Binary operator', node.op)
        self.visit(node.left)
        self.visit(node.right)
    visit_UnaryOp(self,node):
        print('Unary operator', node.op)
        self.visit(node.expr)

tree = parse(txt)
VisitOps().visit(tree)
generic_visit(node)

Method executed if no applicable visit_ method can be found. This examines the node to see if it has _fields, is a list, or can be further traversed.

visit(node)

Execute a method of the form visit_NodeName(node) where NodeName is the name of the class of a particular node.

class scim2_filter_parser.ast.VisitDict
scim2_filter_parser.ast.flatten(top)

Flatten the entire parse tree into a list for the purposes of debugging and testing. This returns a list of tuples of the form (depth, node) where depth is an integer representing the parse tree depth and node is the associated AST node.