source: proto/pablo/src/compiler/backend/CodeGenerator.java @ 2710

Last change on this file since 2710 was 2710, checked in by ksherdy, 6 years ago

General refactoring.

File size: 3.2 KB
Line 
1package compiler.backend;
2
3import compiler.backend.visitors.*;
4import compiler.lang.carryset.CarrySet2Lang;
5import compiler.lang.pablo.Builtins2Lang;
6
7import ast.ASTNode;
8
9public class CodeGenerator {
10
11        private ASTNode root;
12        private boolean ciMode;
13        private boolean coMode;
14       
15        private Builtins2Lang builtins2Lang;
16        private CarrySet2Lang carrySet2Lang;
17       
18        private boolean addDumpStmts;
19        private boolean addAssertBitBlockAlignStmts;
20       
21       
22        //////////////////////////////////////////////////////////////
23        // static interface
24               
25        public static ASTNode analyze(ASTNode root, Builtins2Lang builtins2Lang, CarrySet2Lang carrySet2Lang) {
26                CodeGenerator analyzer = new CodeGenerator(root, builtins2Lang, carrySet2Lang);         
27                return analyzer.generate();
28        }       
29       
30        //////////////////////////////////////////////////////////////
31        // constructor and helpers
32       
33        public CodeGenerator(ASTNode root, Builtins2Lang builtins2Lang, CarrySet2Lang carrySet2Lang) {         
34                this.root = root;               
35                this.setAddDumpStmts(false);
36                this.setAddAssertBitBlockAlignStmts(false);
37                this.setBuiltins2Lang(builtins2Lang);
38                this.setCarrySet2Lang(carrySet2Lang);
39        }       
40       
41        //////////////////////////////////////////////////////////////
42        // analysis
43        public ASTNode generate() {
44               
45            AdvanceCombinerXFormer advanceCombiner = new AdvanceCombinerXFormer(root);
46            advanceCombiner.XForm();
47                               
48            AugAssignXFormer AugAssign = new AugAssignXFormer(root);
49                AugAssign.XForm();
50               
51                CarryIntroXFormer carryQIntro = new CarryIntroXFormer(root, getCarrySet2Lang()); 
52                carryQIntro.XForm(/*ciMode , coMode */);
53
54                AssertZeroXFormer assertZeroXFormer = new AssertZeroXFormer(root, getBuiltins2Lang());
55                assertZeroXFormer.XForm();             
56           
57                Bitwise2IDISAXFormer bitwiseToIDISA = new Bitwise2IDISAXFormer(root); 
58                bitwiseToIDISA.XForm();
59
60                if(isAddDumpStmts()) {
61                        DumpAssignStmtsXFormer dumpAssignStmtsXFormer = new DumpAssignStmtsXFormer(root, getBuiltins2Lang()); 
62                        dumpAssignStmtsXFormer.XForm();
63                }
64               
65                if(isAddAssertBitBlockAlignStmts()) {
66                        AssertBitBlockAlignStmtsXFormer assertBitBlockAlignStmtsXFormer = new AssertBitBlockAlignStmtsXFormer(root, getBuiltins2Lang(), getCarrySet2Lang()); 
67                        assertBitBlockAlignStmtsXFormer.XForm();
68                }                                                       
69               
70                return root;
71        }
72
73        public boolean isAddDumpStmts() {
74                return addDumpStmts;
75        }
76
77        public void setAddDumpStmts(boolean addDumpStmts) {
78                this.addDumpStmts = addDumpStmts;
79        }
80
81        public boolean isAddAssertBitBlockAlignStmts() {
82                return addAssertBitBlockAlignStmts;
83        }
84
85        public void setAddAssertBitBlockAlignStmts(boolean addAssertBitBlockAlignStmts) {
86                this.addAssertBitBlockAlignStmts = addAssertBitBlockAlignStmts;
87        }
88
89        private Builtins2Lang getBuiltins2Lang() {
90                return builtins2Lang;
91        }
92
93        private void setBuiltins2Lang(Builtins2Lang builtins2Lang) {
94                this.builtins2Lang = builtins2Lang;
95        }
96
97        private CarrySet2Lang getCarrySet2Lang() {
98                return carrySet2Lang;
99        }
100
101        private void setCarrySet2Lang(CarrySet2Lang carrySet2Lang) {
102                this.carrySet2Lang = carrySet2Lang;
103        }       
104       
105        private boolean isCiMode() {
106                return ciMode;
107        }
108
109        private void setCiMode(boolean ciMode) {
110                this.ciMode = ciMode;
111        }
112
113        private boolean isCoMode() {
114                return coMode;
115        }
116
117        private void setCoMode(boolean coMode) {
118                this.coMode = coMode;
119        }
120       
121}               
122
Note: See TracBrowser for help on using the repository browser.