source: proto/pablo/src/compiler/codeGenerator/CodeGenerator.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: 4.3 KB
Line 
1package compiler.codeGenerator;
2
3import java.util.List;
4
5import compiler.ast.Accessors;
6import compiler.ast.Generators;
7import compiler.codeGenerator.visitors.CPPUnparser;
8import compiler.codeGenerator.visitors.Unparser;
9import compiler.codeGenerator.visitors.helpers.CodeStore;
10import compiler.codeGenerator.visitors.helpers.UnparserUtil;
11import compiler.lang.carryset.CarrySet2Lang;
12import compiler.lang.pablo.Builtins2Lang;
13import compiler.semanticAnalyzer.visitors.*;
14
15import ast.*;
16
17// Code Generator - Two Trees (i) do_block (ii) do_final_block
18
19// 1. do_block_code.
20// 2. do_final_block_code
21// 3.
22
23public class CodeGenerator {
24
25        //private ASTNode cicoDecoratedASTTree;
26        //private ASTNode coDecoratedASTTree;   
27       
28        //////////////////////////////////////////////////////////////
29        // static interface
30       
31        public static String makeStreamFuncDecls(ASTNode cicoASTTree, ASTNode coASTTree, Unparser unparser) {
32               
33                StringBuilder builder = new StringBuilder();
34                List<FuncDefNode> cicoFuncDefs = Accessors.funcDefs((ProgramNode)cicoASTTree);
35               
36                for(FuncDefNode funcDef: cicoFuncDefs) {
37                        builder.append(unparser.getCode(funcDef));
38                }       
39               
40                return builder.toString();
41        }       
42
43        //////////////////////////////////////////////////////////////
44        // constructor and helpers
45       
46        /*
47        public static String makeStructDecls(ProgramNode node, Unparser unparser) {
48                String code = new String();
49                List<StructTypeNode> structDecls = Accessors.structTypeDecls(node);
50                for(StructTypeNode structDecl: structDecls) {
51                        code += unparser.getCode(structDecl);
52                }       
53                return code;
54        }       
55               
56        public static String makeStructDefs(ProgramNode node, Unparser unparser) {
57                return unparser.getStructDefs(node, 0);
58        }
59       
60        //////////////////////////////////////////////////////////////
61        //
62        public String makeStructDefs(ProgramNode node, int indent) {
63                StringBuilder builder = new StringBuilder();
64                List<StructTypeNode> structDecls = Accessors.structTypeDecls(node);
65                for(StructTypeNode structDecl: structDecls) {
66                        String name = Accessors.structName(structDecl);
67                        CodeStore.addIndentation(builder, indent);
68                        builder.append(Generators.capitalize(name));    // TODO - hack replace with 'real' stream kernels
69                        builder.append(" ");
70                        builder.append(Generators.unCapitalize(name));  // TODO - hack
71                        builder.append(";");
72                        builder.append(CodeStore.NEWLINE);
73                }
74                return builder.toString();
75        }
76       
77        public String makeFuncDefs(ProgramNode node, int indent) {
78                StringBuilder builder = new StringBuilder();
79                List<FuncDefNode> funcDefs = Accessors.funcDefs(node);
80                for(FuncDefNode funcDef: funcDefs) {
81                        String name = Accessors.funcName(funcDef);
82                        CodeStore.addIndentation(builder, indent);
83                        builder.append(Generators.capitalize(name));    // TODO - hack replace with 'real' stream kernels
84                        builder.append(" ");
85                        builder.append(Generators.unCapitalize(name));  // TODO - hack
86                        builder.append(";");
87                        builder.append(CodeStore.NEWLINE);                     
88                }       
89               
90                return builder.toString();
91        }
92       
93        public String makeDoBlocks(ProgramNode node, int indent) {
94                StringBuilder builder = new StringBuilder();
95                List<FuncDefNode> funcDefs = Accessors.funcDefs(node);
96                for(FuncDefNode funcDef: funcDefs) {
97                        String name = Accessors.funcName(funcDef);
98                        CodeStore.addIndentation(builder, indent);
99                        builder.append(Generators.unCapitalize(name));  // TODO - hack
100                        builder.append(".doBlock();");
101                }
102                return null;
103        }
104
105        public String makeDoFinalBlocks(ProgramNode node, int indent) {
106                StringBuilder builder = new StringBuilder();
107                List<FuncDefNode> funcDefs = Accessors.funcDefs(node);
108                for(FuncDefNode funcDef: funcDefs) {
109                        String name = Accessors.funcName(funcDef);
110                        CodeStore.addIndentation(builder, indent);
111                        builder.append(Generators.unCapitalize(name));  // TODO - hack
112                        builder.append(".doFinalBlock();");
113                }
114                return null;
115        }
116        */
117       
118        /*
119        public static String makeDoFinalBlockFinal(ASTNode root, Unparser unparser) {
120                CodeGenerator generator = new CodeGenerator(root, unparser);           
121                return generator.makeDoFinalBlock();
122        }
123        */             
124       
125        /*
126        public static String makeStreamStructDecls(ASTNode root, Unparser unparser) {
127                CodeGenerator generator = new CodeGenerator(root, unparser);           
128                return generator.makeStreamStructDecls();
129        }
130        */             
131       
132        /*
133        public static String makeStreamFuncDefs(ASTNode root, Unparser unparser) {
134                CodeGenerator generator = new CodeGenerator(root, unparser);           
135                return generator.makeStreamFuncDefs();
136        }
137        */     
138       
139}               
140
Note: See TracBrowser for help on using the repository browser.