diff options
Diffstat (limited to 'contrib/llvm/utils/DSAextract.py')
-rw-r--r-- | contrib/llvm/utils/DSAextract.py | 111 |
1 files changed, 0 insertions, 111 deletions
diff --git a/contrib/llvm/utils/DSAextract.py b/contrib/llvm/utils/DSAextract.py deleted file mode 100644 index 134e945..0000000 --- a/contrib/llvm/utils/DSAextract.py +++ /dev/null @@ -1,111 +0,0 @@ -#! /usr/bin/python - -#this is a script to extract given named nodes from a dot file, with -#the associated edges. An edge is kept iff for edge x -> y -# x and y are both nodes specified to be kept. - -#known issues: if a line contains '->' and is not an edge line -#problems will occur. If node labels do not begin with -#Node this also will not work. Since this is designed to work -#on DSA dot output and not general dot files this is ok. -#If you want to use this on other files rename the node labels -#to Node[.*] with a script or something. This also relies on -#the length of a node name being 13 characters (as it is in all -#DSA dot output files) - -#Note that the name of the node can be any substring of the actual -#name in the dot file. Thus if you say specify COLLAPSED -#as a parameter this script will pull out all COLLAPSED -#nodes in the file - -#Specifying escape characters in the name like \n also will not work, -#as Python -#will make it \\n, I'm not really sure how to fix this - -#currently the script prints the names it is searching for -#to STDOUT, so you can check to see if they are what you intend - -import re -import string -import sys - - -if len(sys.argv) < 3: - print 'usage is ./DSAextract <dot_file_to_modify> \ - <output_file> [list of nodes to extract]' - -#open the input file -input = open(sys.argv[1], 'r') - -#construct a set of node names -node_name_set = set() -for name in sys.argv[3:]: - node_name_set |= set([name]) - -#construct a list of compiled regular expressions from the -#node_name_set -regexp_list = [] -for name in node_name_set: - regexp_list.append(re.compile(name)) - -#used to see what kind of line we are on -nodeexp = re.compile('Node') -#used to check to see if the current line is an edge line -arrowexp = re.compile('->') - -node_set = set() - -#read the file one line at a time -buffer = input.readline() -while buffer != '': - #filter out the unecessary checks on all the edge lines - if not arrowexp.search(buffer): - #check to see if this is a node we are looking for - for regexp in regexp_list: - #if this name is for the current node, add the dot variable name - #for the node (it will be Node(hex number)) to our set of nodes - if regexp.search(buffer): - node_set |= set([re.split('\s+',buffer,2)[1]]) - break - buffer = input.readline() - - -#test code -#print '\n' - -print node_name_set - -#print node_set - - -#open the output file -output = open(sys.argv[2], 'w') -#start the second pass over the file -input = open(sys.argv[1], 'r') - -buffer = input.readline() -while buffer != '': - #there are three types of lines we are looking for - #1) node lines, 2) edge lines 3) support lines (like page size, etc) - - #is this an edge line? - #note that this is no completely robust, if a none edge line - #for some reason contains -> it will be missidentified - #hand edit the file if this happens - if arrowexp.search(buffer): - #check to make sure that both nodes are in the node list - #if they are print this to output - nodes = arrowexp.split(buffer) - nodes[0] = string.strip(nodes[0]) - nodes[1] = string.strip(nodes[1]) - if nodes[0][:13] in node_set and \ - nodes[1][:13] in node_set: - output.write(buffer) - elif nodeexp.search(buffer): #this is a node line - node = re.split('\s+', buffer,2)[1] - if node in node_set: - output.write(buffer) - else: #this is a support line - output.write(buffer) - buffer = input.readline() - |