source: proto/pabloj/trunk/src/compilers/pabloS/semanticAnalyzer/visitors/PabloSTransformer.java @ 2952

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

Restructed PabloJ compile to provide clear separation between PabloS and PabloB.

File size: 3.9 KB
Line 
1package compilers.pabloS.semanticAnalyzer.visitors;
2
3//
4// Deep copies AST.
5// Decorates AST copy.
6// Static interface decorates AST in default mode only.
7// TODO - Add a method to sync/set defaults with the configuration object
8//
9// Use PabloSTransformer instance to set non-defaults.
10//
11
12import compilers.pabloS.lang.*;
13
14public class PabloSTransformer {
15       
16        private pabloS.ast.ASTNode ASTTree;
17       
18        //private SymbolTable symbolTable;
19       
20        private compilers.pabloS.lang.Builtins2Lang builtins2Lang;
21        private compilers.pabloB.lang.carry.CarryBuiltins2Lang carrySet2Lang;
22        private boolean finalBlockMode;
23       
24        private boolean addDumpStmts;
25        private boolean addAssertBitBlockAlignStmts;
26       
27        //////////////////////////////////////////////////////////////
28        // static interface - transforms AST in default mode only
29        //
30        public static pabloS.ast.ASTNode analyze(pabloS.ast.ASTNode root) {
31                PabloSTransformer analyzer = new PabloSTransformer(root);               
32                return analyzer.xForm();
33        }       
34       
35        //////////////////////////////////////////////////////////////
36        // constructor and helpers
37        public PabloSTransformer(pabloS.ast.ASTNode ASTTree) {
38               
39                this.ASTTree = ASTTree;         
40                initDefaults();
41                // this.symbolTable = symbolTable;
42        }       
43       
44        private void initDefaults() {
45                this.setBuiltins2Lang(new PabloSBuiltins2CPP());
46                this.setCarrySet2Lang(new compilers.pabloB.lang.carry.CarryBuiltins2CPP());
47               
48                this.setAddDumpStmts(false);
49                this.setAddAssertBitBlockAlignStmts(false);
50                this.setFinalBlockMode(false);
51        }
52       
53        //////////////////////////////////////////////////////////////
54        // analysis
55        public pabloS.ast.ASTNode xForm() {
56               
57                pabloS.ast.ASTNode decoratedTree = ASTTree.deepCopy();
58
59                if(isAddDumpStmts()) {
60                        DumpAssignStmtsXFormer dumpAssignStmtsXFormer = new DumpAssignStmtsXFormer(decoratedTree, getBuiltins2Lang()); 
61                        dumpAssignStmtsXFormer.XForm();
62                }
63               
64                if(isAddAssertBitBlockAlignStmts()) {
65                        AssertBitBlockAlignStmtsXFormer assertBitBlockAlignStmtsXFormer = new AssertBitBlockAlignStmtsXFormer(decoratedTree, getBuiltins2Lang()); 
66                        assertBitBlockAlignStmtsXFormer.XForm();
67                }                       
68               
69            AugAssignXFormer AugAssign = new AugAssignXFormer(decoratedTree); 
70                AugAssign.XForm();             
71           
72            AssertZeroXFormer assertZeroXFormer = new AssertZeroXFormer(decoratedTree, getBuiltins2Lang());
73                assertZeroXFormer.XForm();                             
74
75            AdvanceCombinerXFormer advanceCombiner = new AdvanceCombinerXFormer(decoratedTree);
76            advanceCombiner.XForm();
77
78   
79           
80            CarryIntroXFormer carryQIntro = new CarryIntroXFormer(decoratedTree, getBuiltins2Lang(), getCarrySet2Lang()); 
81                carryQIntro.XForm(finalBlockMode);             
82
83                Bitwise2IDISAXFormer bitwiseToIDISA = new Bitwise2IDISAXFormer(decoratedTree); 
84                bitwiseToIDISA.XForm();                 
85                // Dependency on CarryIntroXFormer to count PabloS builtins that produce carry values.
86                //Pablo2CarryXFormer pablo2CarryXFormer = new Pablo2CarryXFormer(decoratedTree, getBuiltins2Lang(), getCarrySet2Lang());
87                //pablo2CarryXFormer.XForm(finalBlockMode);                         
88                                                                               
89                return decoratedTree;
90               
91        }
92
93        public boolean isAddDumpStmts() {
94                return addDumpStmts;
95        }
96
97        public void setAddDumpStmts(boolean addDumpStmts) {
98                this.addDumpStmts = addDumpStmts;
99        }
100
101        public boolean isAddAssertBitBlockAlignStmts() {
102                return addAssertBitBlockAlignStmts;
103        }
104
105        public void setAddAssertBitBlockAlignStmts(boolean addAssertBitBlockAlignStmts) {
106                this.addAssertBitBlockAlignStmts = addAssertBitBlockAlignStmts;
107        }
108
109        public Builtins2Lang getBuiltins2Lang() {
110                return this.builtins2Lang;
111        }
112
113        public void setBuiltins2Lang(Builtins2Lang builtins2Lang) {
114                this.builtins2Lang = builtins2Lang;
115        }
116
117        public compilers.pabloB.lang.carry.CarryBuiltins2Lang getCarrySet2Lang() {
118                return carrySet2Lang;
119        }
120
121        public void setCarrySet2Lang(compilers.pabloB.lang.carry.CarryBuiltins2Lang carrySet2Lang) {
122                this.carrySet2Lang = carrySet2Lang;
123        }
124
125        public boolean isFinalBlockMode() {
126                return finalBlockMode;
127        }
128
129        public void setFinalBlockMode(boolean finalBlockMode) {
130                this.finalBlockMode = finalBlockMode;
131        }       
132       
133}               
134
Note: See TracBrowser for help on using the repository browser.