|
|
@@ -4,24 +4,44 @@ from sys import argv, exit
|
|
|
from src.parser import parse_file
|
|
|
|
|
|
|
|
|
-verbose_level = 2
|
|
|
+options = {'-v': 1}
|
|
|
|
|
|
|
|
|
# Parse arguments
|
|
|
-if len(argv) < 2:
|
|
|
- print 'Usage: python %s SOURCE_FILE [ OUT_FILE [ SOURCE_OUT_FILE ] ]' \
|
|
|
- % argv[0]
|
|
|
+def exit_with_usage():
|
|
|
+ print 'Usage: python %s [ options ] SOURCE_FILE' % argv[0]
|
|
|
+ print 'options: -i SOURCE_OUT_FILE | -o OUT_FILE | -v VERBOSE_LEVEL'
|
|
|
exit(1)
|
|
|
|
|
|
|
|
|
+if len(argv) % 2:
|
|
|
+ exit_with_usage()
|
|
|
+elif len(argv) > 2:
|
|
|
+ values = argv[2:-1:2]
|
|
|
+
|
|
|
+ if argv[1][0] != '-':
|
|
|
+ exit_with_usage()
|
|
|
+
|
|
|
+ for i, option in enumerate(argv[1:-1:2]):
|
|
|
+ if option not in ['-i', '-o', '-v']:
|
|
|
+ print 'unknown option "%s"' % option
|
|
|
+ exit(1)
|
|
|
+
|
|
|
+ if i >= len(values):
|
|
|
+ print 'No value given for option "%s"' % option
|
|
|
+ exit(1)
|
|
|
+
|
|
|
+ options[option] = values[i]
|
|
|
+
|
|
|
+
|
|
|
# Parse file
|
|
|
-program = parse_file(argv[1])
|
|
|
-program.verbose = verbose_level
|
|
|
+program = parse_file(argv[-1])
|
|
|
+program.verbose = int(options['-v'])
|
|
|
|
|
|
|
|
|
# Save input assembly in new file for easy comparison
|
|
|
-if len(argv) > 3:
|
|
|
- program.save(argv[3])
|
|
|
+if '-i' in options:
|
|
|
+ program.save(options['-i'])
|
|
|
|
|
|
|
|
|
# Perform optimizations
|
|
|
@@ -29,5 +49,5 @@ program.optimize()
|
|
|
|
|
|
|
|
|
# Save output assembly
|
|
|
-if len(argv) > 2:
|
|
|
- program.save(argv[2])
|
|
|
+if '-o' in options:
|
|
|
+ program.save(options['-o'])
|