From: <bl...@us...> - 2003-08-26 18:01:42
|
Update of /cvsroot/cpptool/rfta/src/pyrfta/test In directory sc8-pr-cvs1:/tmp/cvs-serv2688 Added Files: cppastdump.py Log Message: * a directory is specified in the command instead of a single file. --- NEW FILE: cppastdump.py --- # parser C++ file and dump AST to output from rfta.parser import grammar from rfta.parser import tokenizer import glob import sys import os.path def dumpAST( input_file_name ): file_in = file(input_file_name, 'rt') text = file_in.read() file_in.close() tokens = tokenizer.CppScanner().tokenize( text ) scanner = grammar.TokenProvider( tokens, grammar.StructuredTokenStream(), None ) match = grammar.translation_unit_pi.parse( scanner ) if not match: print 'Failed to parse file %s' % input_file_name sys.exit(1) root_node = scanner.getStructuredTokenStream().makeNodeTree() output_file_name = input_file_name + '.txt' file_out = file( output_file_name, 'wt' ) print >>file_out, 'Successfully parsed %s:' % input_file_name print >>file_out, text print >>file_out print >>file_out, 'Produced AST:' print >>file_out, root_node.getPrettyString() file_out.close() if len(sys.argv) != 2: print 'Usage: cppastdump.py directory' print 'The program will parse all .cpp and .h files contained in the specified directory.' print 'AST will be output in the same directory, in a file .txt extension.' sys.exit(2) input_directory = sys.argv[1] filenames = glob.glob(os.path.join(input_directory, '*.cpp' )) filenames.extend( glob.glob(os.path.join(input_directory, '*.h' )) ) for filename in filenames: print 'Parsing', filename dumpAST( filename ) |