source: proto/pablo/src/compiler/semanticAnalyzer/SemanticAnalyzer.java @ 2702

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

General refactoring (variable names). Added final block XFormer. Move final block operations atEOF/inFile out of carry intro transformer to final block transformer.

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