1#----------------------------------------------------------------- 2# pycparser: func_defs.py 3# 4# Using pycparser for printing out all the functions defined in a 5# C file. 6# 7# This is a simple example of traversing the AST generated by 8# pycparser. Call it from the root directory of pycparser. 9# 10# Eli Bendersky [https://eli.thegreenplace.net/] 11# License: BSD 12#----------------------------------------------------------------- 13from __future__ import print_function 14import sys 15 16# This is not required if you've installed pycparser into 17# your site-packages/ with setup.py 18sys.path.extend(['.', '..']) 19 20from pycparser import c_parser, c_ast, parse_file 21 22 23# A simple visitor for FuncDef nodes that prints the names and 24# locations of function definitions. 25class FuncDefVisitor(c_ast.NodeVisitor): 26 def visit_FuncDef(self, node): 27 print('%s at %s' % (node.decl.name, node.decl.coord)) 28 29 30def show_func_defs(filename): 31 # Note that cpp is used. Provide a path to your own cpp or 32 # make sure one exists in PATH. 33 ast = parse_file(filename, use_cpp=True, 34 cpp_args=r'-Iutils/fake_libc_include') 35 36 v = FuncDefVisitor() 37 v.visit(ast) 38 39 40if __name__ == "__main__": 41 if len(sys.argv) > 1: 42 filename = sys.argv[1] 43 else: 44 filename = 'examples/c_files/memmgr.c' 45 46 show_func_defs(filename) 47