Mercurial > hg > CbC > old > CbC_scripts
view context_creator/context_creator.py @ 14:af04833f7667
context_creator: create UniqueData ID
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 06 Oct 2015 18:49:20 +0900 |
parents | 9bea91fdd283 |
children |
line wrap: on
line source
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys import argparse import re # parse arguments and return arguments list. def get_args(): parser = argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter, description="""\ Create Context for CbC code. Default output is stdout. """) parser.add_argument('input_file',\ nargs=None,\ type=str,\ help='input file path.') parser.add_argument('-o', dest='output',\ nargs=1,\ type=str,\ metavar='<file>',\ help='write output to <file>') return parser.parse_args() # parse input file and create context def create_context(lines, file): code_list = [] data_list = [] for l in lines: # allocate code segment and data segment ID except for stub and meta if re.search(r"^ *__code",l) is not None: regexed_l = re.search(r"[a-zA-Z0-9_]+ *\(",l) cs_name = regexed_l.group(0).rstrip('(') if re.search(r"^ *meta_*|stub$",cs_name) is None: code_list.append(cs_name.capitalize()) args = l.split('(')[1].rsplit(')')[0].strip().split(',') for arg in args: a = arg.split() aset = [a[0].strip(' *'),a[1].strip(' *')] if a[-1].strip() != 'context' and aset not in data_list: data_list.append(aset) write_context(code_list, data_list, file) def write_context(code_list, data_list, file): file.write('/*-- created by script --*/\n') file.write('enum Code {\n') for c in code_list: file.write(' {0:s},\n'.format(c)) file.write(' Exit,\n') file.write('};\n') file.write('eunm UniqueData {\n') for d in data_list: file.write(' {0:s},\n'.format(d[1].capitalize())) file.write('};\n') def main(): args = get_args() output = sys.stdout try: f = open(args.input_file,'r') except IOError: print("cannot open file %s" % input_file) if args.output is not None: try: output = open(args.output[0],'w') except IOError: print("cannot open file %s" % args.output) lines = f.readlines() connect_list = create_context(lines, output) main()