diff options
author | Jeremy Hylton <jeremy@alum.mit.edu> | 2000-07-25 16:43:23 (GMT) |
---|---|---|
committer | Jeremy Hylton <jeremy@alum.mit.edu> | 2000-07-25 16:43:23 (GMT) |
commit | ffe968b8fe4e4e29c0681256a476d6040be30d6e (patch) | |
tree | a12c3e9b30ef42687b128e1951a4aa4324551b6e | |
parent | 9f2550f58166679a04b651f3d96748b1c9607497 (diff) | |
download | cpython-ffe968b8fe4e4e29c0681256a476d6040be30d6e.zip cpython-ffe968b8fe4e4e29c0681256a476d6040be30d6e.tar.gz cpython-ffe968b8fe4e4e29c0681256a476d6040be30d6e.tar.bz2 |
This script demonstrates use of the visitor interface of the compiler
package.
-rwxr-xr-x | Tools/compiler/demo.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/Tools/compiler/demo.py b/Tools/compiler/demo.py new file mode 100755 index 0000000..e9ada5a --- /dev/null +++ b/Tools/compiler/demo.py @@ -0,0 +1,38 @@ +#! /usr/bin/env python + +"""Print names of all methods defined in module + +This script demonstrates use of the visitor interface of the compiler +package. +""" + +import compiler + +class MethodFinder: + """Print the names of all the methods + + Each visit method takes two arguments, the node and its current + scope. The scope is the name of the current class or None. + """ + + def visitClass(self, node, scope=None): + self.visit(node.code, node.name) + + def visitFunction(self, node, scope=None): + if scope is not None: + print "%s.%s" % (scope, node.name) + self.visit(node.code, None) + +def main(files): + mf = MethodFinder() + for file in files: + f = open(file) + buf = f.read() + f.close() + ast = compiler.parse(buf) + compiler.walk(ast, mf) + +if __name__ == "__main__": + import sys + + main(sys.argv[1:]) |