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