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 )
|