Mercurial > hg > CbC > old > CbC_scripts
diff meta_connector/meta_connector_name.py @ 5:7af72e3e4b62
add name base meta connector
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 10 Aug 2015 21:45:18 +0900 |
parents | |
children | d9f74f325135 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meta_connector/meta_connector_name.py Mon Aug 10 21:45:18 2015 +0900 @@ -0,0 +1,77 @@ +#!/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="""\ +Parse meta connect syntax. Default output is stdout. + +sample) + goto meta_code1|code1(arg1, arg2, ...); + \t| + \tV + goto meta_code1(context, arg1, arg2, ..., Code1); + """) + 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 meta connection list +def parse_meta_syntax(lines,file): + comment_out = False + target_cs = False + caller_name = '' + isMeta = False + for i,l in enumerate(lines): + + regexed_l = re.search(r"[a-zA-Z0-9_]+ *\(",l) + + # get caller code segment name + if re.search(r"^ *__code",l) is not None: + caller_name = regexed_l.group(0).rstrip('(') + if re.search(r"^ *meta_*",caller_name) is not None: + isMeta = True + else: + isMeta = False + file.write(l) + elif not isMeta and regexed_l is not None and re.search(r"^ *goto",l): + callee_name = regexed_l.group(0).rstrip('(') + file.write("/*-- connected by script */\n") + file.write('// '+l) + file.write("goto {0:s}(context, {1:s}, {2:s});\n".format('meta_'+caller_name,\ + l.split('(')[1].rsplit(')')[0],\ + callee_name.capitalize())) + else: + file.write(l) + +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 = parse_meta_syntax(lines, output) + +main()