source: proto/pablo/src/application/ApplicationGenerator.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.9 KB
Line 
1package application;
2
3//import ast.StartSymbolNode;
4import ast.ASTNode;
5import ast.ProgramNode;
6import compiler.codeGenerator.CodeGenerator;
7import compiler.codeGenerator.visitors.CPPUnparser;
8import compiler.codeGenerator.visitors.Unparser;
9import compiler.lang.pablo.*;
10import compiler.lang.carryset.*;
11import compiler.semanticAnalyzer.SemanticAnalyzer;
12import compiler.syntacticAnalyzer.SyntacticAnalysisFailedException;
13import compiler.syntacticAnalyzer.SyntacticAnalyzer;
14
15import tokens.Tokens;
16
17public class ApplicationGenerator { 
18       
19        public final static String generatedCodeWarning = "// DO NOT MODIFY\n//\n// PabloJ generated code.\n// Modifications will be lost with the next compiler run.\n//\n";
20       
21//  private static final String LOGGING_DIRECTORY          = "logging";
22    private static final String APPLICATIONS_DIRECTORY     = "applications"; 
23       
24    private ApplicationConfig applicationConfig;
25   
26        //////////////////////////////////////////////////////////////////////////////////
27        // construction
28       
29        public ApplicationGenerator(ApplicationConfig applicationConfiguration) {
30                Tokens.setPrintLevel(Tokens.Level.FULL);
31                this.applicationConfig = applicationConfiguration;
32                OutputCodeFolder.setWarningMessage(generatedCodeWarning);
33        }
34       
35        //////////////////////////////////////////////////////////////////////////////////
36        // code generation
37       
38//      private void generateLoggingPackage() {
39//              LoggingPackageGenerator logging = new LoggingPackageGenerator(root, outputDirectory, LOGGING_DIRECTORY);
40//              logging.generate();
41//      }
42               
43        public void generate() throws SyntacticAnalysisFailedException {
44
45//              OutputCodeFolder parser = new OutputCodeFolder(outputDirectory, srcDirectory);         
46
47                // Target Lang
48                Builtins2Lang builtins2Lang = null;
49                CarrySet2Lang carrySet2Lang = null;
50                Unparser unparser = null;
51               
52                if(applicationConfig.targetLang.contentEquals(ApplicationConfig.CLANG)) {
53                        //builtins2Lang = new Builtins2C();
54                        //carrySet2Lang = new CarrySet2C();     
55                        //unparser = new CUnparser();
56                } else {
57                        builtins2Lang = new Builtins2CPP();
58                        carrySet2Lang = new CarrySet2CPP();
59                        unparser = new CPPUnparser();
60                }
61               
62                // Transformation Mode ci/co, ci
63               
64                ASTNode syntaxTree = SyntacticAnalyzer.parse(applicationConfig.inputFile);
65               
66                                               
67                /*
68               
69                // Analyze and transform the AST
70                SemanticAnalyzer semanticAnalyzer = new SemanticAnalyzer(syntaxTree);
71                semanticAnalyzer.setTargetLang();
72                semanticAnalzyer.setMode();
73                ASTNode decorateCiCoTree = semanticAnalyzer.analyze();
74
75                //
76                ASTNode syntaxTree = SyntacticAnalyzer.parse(applicationConfig.inputFile);
77                       
78                SemanticAnalyzer semanticAnalyzer = new SemanticAnalyzer(syntaxTree);
79                semanticAnalyzer.setTargetLang();
80                semanticAnalzyer.setMode();
81                ASTNode decorateCoTree = semanticAnalyzer.analyze();
82               
83                ASTNode syntaxTree = SyntacticAnalyzer.parse(applicationConfig.inputFile);
84               
85                ASTNode SyntaxTree = SyntacticAnalyzer.parse(applicationConfig.inputFile);
86                semanticAnalyzer.setTargetLang();
87                semanticAnalzyer.setMode();
88                SemanticAnalyzer semanticAnalyzer = new SemanticAnalyzer(syntaxTree, builtins2Lang,     carrySet2Lang);
89                */
90                // Generate
91                                       
92                /*
93                String global = CodeGenerator.makeStructDecls((ProgramNode)syntaxTree, unparser);
94               
95                global +=  CodeGenerator.makeStreamFuncDecls((ProgramNode)syntaxTree, unparser);
96               
97                System.out.print(global);
98               
99                String temp = CodeGenerator.makeStructDefs((ProgramNode)syntaxTree, unparser);
100               
101                System.out.print(temp);
102                */     
103                                       
104//              parser.generateFile(new TemplateContentsGenerator(this.root, srcDirectory), "Parser.java"); // "Parser.java"
105//              parser.copyTemplate("ReverseAccessibleArrayList");
106//              parser.copyTemplate("RevList");
107               
108                // Fill Template
109               
110                printCompletionMessage();
111        }
112       
113        private void printCompletionMessage() {
114                System.out.println("Application generation complete.");
115        }
116       
117}
Note: See TracBrowser for help on using the repository browser.