Taddeüs Kroes пре 14 година
родитељ
комит
ab89115ade
3 измењених фајлова са 31 додато и 1 уклоњено
  1. 6 1
      src/optimize.py
  2. 1 0
      src/parser.py
  3. 24 0
      src/writer.py

+ 6 - 1
src/optimize.py

@@ -1,6 +1,7 @@
 #!/usr/bin/python
 from parser import parse_file
 from basic_block import find_basic_blocks
+from writer import write_statements
 
 if __name__ == '__main__':
     from sys import argv, exit
@@ -11,12 +12,16 @@ if __name__ == '__main__':
 
     statements = parse_file(argv[1])
     blocks = find_basic_blocks(statements)
+    out = write_statements(statements)
 
     statement_no = 1
 
     for i, block in enumerate(blocks):
-        print '\nbasic block %d:' % i
+        print 'basic block %d:' % i
 
         for statement in block:
             print statement_no, statement
             statement_no += 1
+
+    print '\nOut:'
+    print out

+ 1 - 0
src/parser.py

@@ -22,6 +22,7 @@ def t_COMMA(t):
 
 def t_COMMENT(t):
     r'\#.*'
+    t.value = t.value[1:]
     return t
 
 def t_DIRECTIVE(t):

+ 24 - 0
src/writer.py

@@ -0,0 +1,24 @@
+def write_statements(statements):
+    s = '';
+
+    for i, statement in enumerate(statements):
+        statement_type, name, args = statement
+        newline = '\n' if i else ''
+
+        if statement_type == 'label':
+            line = name + ':'
+        elif statement_type == 'comment':
+            line = '#' + name
+
+            if args['inline']:
+                newline = '\t\t'
+        elif statement_type == 'directive':
+            line = '\t' + name
+        elif statement_type == 'command':
+            line = '\t' + name + '\t' + ','.join(args['args'])
+        else:
+            raise Exception('Unsupported statement type "%s"' % statement_type)
+
+        s += newline + line
+
+    return s