Changeset 785 for proto/Compiler


Ignore:
Timestamp:
Dec 6, 2010, 3:17:54 PM (9 years ago)
Author:
ksherdy
Message:

Use the optparse module to handle command line argument parsing.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • proto/Compiler/compiler2.py

    r779 r785  
    88#
    99
     10import optparse,os
    1011import ast, pablo, string, sys, copy
    1112
     
    5556        return s
    5657
    57 OPTION_TEMPLATE_NAME = '-t'
    58 
    59 
    60 def read_flags (params):
    61     flags = []
    62     non_flags = []
    63     last_one_continues = False
    64     l = len(params)
    65     for i in range(l):
    66         if params[i][0] == '-' or last_one_continues:
    67             flags.append(params[i])
    68             if params[i]  == OPTION_TEMPLATE_NAME:
    69                 last_one_continues = True
    70             else:
    71                 last_one_continues = False
    72         else:
    73             non_flags.append(params[i])
    74 
    75     return flags, non_flags
    76 
    77 def option_template(flags):
    78     t_name = "template.c"
    79     l = len(flags)
    80     for i in range(l):
    81         if flags[i] == '-t':
    82             if len(flags) == i+1:
    83                 print flags
    84                 print "WARNING: -t flag used but no template name is given. Default name is used."
    85             else:
    86                 t_name = flags[i+1]
    87                 return t_name, i
    88 
    89     return t_name, -1
    90 
    91 def read_input(inp_file_name):
    92     mycode = ""
    93     inp_file = open(non_flags[1])
    94     for line in inp_file:
    95         mycode += line
    96     inp_file.close()
    97     return mycode
    98 
    99 def read_options(flags):
    100     template_name, index = option_template(flags)
    101     if index >= 0:
    102         del flags[index+1]
    103         del flags[index]
    104    
    105     if len(flags) > 0:
    106         print "WARNING: Unrecognized/duplicated options found!"
    107    
    108     return template_name
    109 ###############################################################
     58def readfile(filename):
     59        f = open(filename, 'r')
     60        contents = f.read()
     61        f.close()
     62        return contents
    11063
    11164if __name__ == '__main__':
    112         if len(sys.argv) < 2:
    113             print "Usage: python bitstream_compiler.py <input file> [output file] options"
    114             #exit()
     65 
     66        # optparse
     67        parser = optparse.OptionParser(usage='python %prog [options] <input file>',
     68                                        version='1.0',
     69                                        )
     70       
     71        # Argument definitions
     72        parser.add_option('-t', '--template',
     73                          dest='template_filename',
     74                          type='string',
     75                          default='template.c',
     76                          help='default:template.c'
     77                          )
    11578
    116         flags, non_flags = read_flags(sys.argv)
    117         print non_flags
    118         last_slash = non_flags[1].rfind("/")
    119         file_path = non_flags[1][:last_slash+1]
    120        
    121         out_file = "code.c"
    122         if len(non_flags) >= 3:
    123             out_file = non_flags[2]
    124        
    125         template_name = read_options(flags)
    126        
    127         s = Program(out_file, template_name).generate_code(read_input(non_flags[1]), file_path)
     79        parser.add_option('-o', '--output',
     80                          dest='output_filename',
     81                          type='string',
     82                          default='code.c',
     83                          help='default:code.c',
     84                          )
     85                         
     86        options, args = parser.parse_args()
     87
     88        # Positional arguments
     89        if len(args) != 1:
     90          parser.print_usage()
     91
     92        input_longpath = args[0]
     93        input_dirname =  os.path.dirname(input_longpath)
     94        input_content = readfile(input_longpath)
     95
     96        # Optional arguments
     97        output_filename = options.output_filename
     98        template_filename = options.template_filename
     99
     100        s = Program(output_filename, template_filename).generate_code(input_content, input_dirname)
Note: See TracChangeset for help on using the changeset viewer.