source: proto/Compiler/compiler2.py @ 810

Last change on this file since 810 was 810, checked in by cameron, 9 years ago

SIMD register dump facility for debugging.

File size: 2.6 KB
Line 
1# -*- coding: utf-8 -*-
2# bitstream_compiler.py - compile unbounded bitstreams code into
3#   equivalent block-by-block code in C.
4#
5# (c) 2010 Robert D. Cameron, Ehsan Amiri, Ken Herdy
6# All rights reserved.
7# Licensed to International Characters, Inc. under Academic Free License 3.0
8#
9
10import config, optparse
11import ast, pablo, string, sys, copy, os
12
13class Program:
14    def __init__(self, output_file, template_file = "template.c"):
15        pass
16        self.template_file = template_file
17        self.output_file = output_file
18
19    def output(self, decl, stream_stmts , block_stmts, any_carry_expr, template_string):
20        template_string = string.replace(template_string, '@decl', decl)
21        template_string = string.replace(template_string, '@stream_stmts', stream_stmts)
22        template_string = string.replace(template_string, '@block_stmts', block_stmts)
23        template_string = string.replace(template_string, '@any_carry', any_carry_expr)
24        return template_string
25
26    def read_template(self):
27        f=open(self.template_file)
28        inp = ""
29        for line in f:
30            inp += line
31        f.close()
32        return inp
33
34    def write_final_code(self, code):
35        f=open(self.output_file, 'w')
36        f.write(code)
37        f.close()
38
39    def generate_code(self, input_string, options):
40        # FRONT END
41        s = ast.parse(input_string)
42        # Analysis and Transformation
43        xfrmr = pablo.MainLoopTransformer(s, "carryQ")
44        xfrmr.gen_declarations()
45        xfrmr.gen_initializations()
46        xfrmr.xfrm_block_stmts(options.add_dump_stmts)     
47        xfrmr.add_loop_carryQ_adjust()
48        # BACK END
49        template_contents = self.read_template()
50        template_contents = self.output(xfrmr.getCdecls(), 
51                            xfrmr.getCinits(), 
52                            xfrmr.getCstmts(),
53                            xfrmr.any_carry_expr(), 
54                            template_contents)
55        self.write_final_code(template_contents)
56        return s
57
58def readfile(filename):
59        f = open(filename, 'r')
60        contents = f.read() 
61        f.close()
62        return contents
63
64if __name__ == '__main__':
65 
66        option_parser = config.get_option_parser() 
67        options, args = option_parser.parse_args(sys.argv[1:])
68
69        # Positional arguments
70        if len(args) != 1:
71          parser.print_usage()
72
73        input_file = args[0]
74        input_string = readfile(input_file)
75               
76        # Compiler modes
77        if options.struct_decs:
78                print pablo.StreamStructGen().gen(ast.parse(input_string))
79               
80        elif options.func_defs:
81                print pablo.FunctionXformer().xlat(ast.parse(input_string))
82               
83        else:
84                s = Program(options.output_filename, options.template_filename).generate_code(input_string, options)
Note: See TracBrowser for help on using the repository browser.