mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	This script demonstrates use of the visitor interface of the compiler
package.
This commit is contained in:
		
							parent
							
								
									9f2550f581
								
							
						
					
					
						commit
						ffe968b8fe
					
				
					 1 changed files with 38 additions and 0 deletions
				
			
		
							
								
								
									
										38
									
								
								Tools/compiler/demo.py
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										38
									
								
								Tools/compiler/demo.py
									
										
									
									
									
										Executable file
									
								
							|  | @ -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:]) | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jeremy Hylton
						Jeremy Hylton