Changeset 2789 for proto


Ignore:
Timestamp:
Dec 18, 2012, 2:03:35 AM (7 years ago)
Author:
ksherdy
Message:

Initial templating implemented. Current approach implemented following a 'callback' style. Additional compiler framework refactoring needed to simplify the control flow.

Location:
proto/pablo
Files:
3 added
8 edited

Legend:

Unmodified
Added
Removed
  • proto/pablo/src/applicationGenerator/ApplicationGenerator.java

    r2788 r2789  
    4040        // code generation
    4141       
    42 //      private void generateLoggingPackage() {
    43 //              LoggingPackageGenerator logging = new LoggingPackageGenerator(root, outputDirectory, LOGGING_DIRECTORY);
    44 //              logging.generate();
    45 //      }
     42        //      private void generateLoggingPackage() {
     43        //              LoggingPackageGenerator logging = new LoggingPackageGenerator(root, outputDirectory, LOGGING_DIRECTORY);
     44        //              logging.generate();
     45        //      }
    4646               
    4747        public void generate() throws SyntacticAnalysisFailedException {
    48 
    49                 // OutputCodeFolder parser = new OutputCodeFolder(outputDirectory, srcDirectory);               
    5048
    5149                // Transformation configuration
     
    6664                pabloS.ast.ASTNode syntaxTree = SyntacticAnalyzer.parse(compilerConfig.inputFile);
    6765
    68                 // Build Carry Information Set symbol table // TODO - Update - carry_count, advance_n_count only
     66                // Build Carry Information Set symbol table
     67                //
     68                // TODO - carry_count, advance_n_count, add symbol table to root node
     69                //
    6970                SymbolTable symbolTable = new SymbolTable();
    7071               
     
    8788                pabloB.ast.ASTNode pabloBASTTree = pabloS2PabloBXFormer.XForm(decoratedTree, optDecoratedTree);
    8889               
    89                 // Generate code
    90                 unparser = new CPPUnparser(symbolTable);
    91                 String code = unparser.getCode(pabloBASTTree);
    92                 //System.out.print(code);
     90
    9391                               
    9492                // Fill template               
     
    9896               
    9997                HeaderTemplateContentsGenerator contentsGenerator =
    100                                 new HeaderTemplateContentsGenerator(pabloBASTTree, outputDirectory, templateFile);     
     98                                new HeaderTemplateContentsGenerator(pabloBASTTree, symbolTable, outputDirectory, templateFile);
    10199               
    102                 PrintStream out = new PrintStream(System.out);
    103                
    104                 contentsGenerator.generate(out, code);
     100                contentsGenerator.generate();
    105101               
    106102                /*
     
    130126                }
    131127        }
    132        
     128               
    133129}
  • proto/pablo/src/applicationGenerator/CompilerConfig.java

    r2788 r2789  
    33public class CompilerConfig {
    44
     5        // Warning Message
     6        public static final String WARNING_MESSAGE = "GENERATED CODE. DO NOT MODIFY.";
     7       
    58        // Directory structure
    6         public static final String OUTPUT_BASE = "output/";
    7         public static final String TEMPLATES_BASE = "src/applicationGenerator/templates/";
     9        public static final String OUTPUT_DIRECTORY = "output/";
     10        public static final String TEMPLATES_DIRECTORY = "src/applicationGenerator/templates/";
    811       
    912        // Options
  • proto/pablo/src/applicationGenerator/CompilerConfigFactory.java

    r2788 r2789  
    2020        // target lang specific defaults
    2121        compilerConfig.targetLang = cli.getOptionValue("x", CompilerConfig.CPPLANG);
    22         compilerConfig.outputDirectory = cli.getOptionValue("O", CompilerConfig.OUTPUT_BASE);
     22        compilerConfig.outputDirectory = cli.getOptionValue("O", CompilerConfig.OUTPUT_DIRECTORY);
    2323       
    2424        if (compilerConfig.targetLang.equals(CompilerConfig.CLANG)) { // C
    2525                compilerConfig.templateFile = cli.getOptionValue("t", "header.template");
    26                 compilerConfig.templateDirectory = cli.getOptionValue("T", CompilerConfig.TEMPLATES_BASE + "C" + File.separator);
     26                compilerConfig.templateDirectory = cli.getOptionValue("T", CompilerConfig.TEMPLATES_DIRECTORY + "C" + File.separator);
    2727                compilerConfig.outputFile = cli.getOptionValue("o", "code.c");
    2828                //compilerConfig.targetDirectory = cli.getOptionValue("O", CompilerConfig.CLANG);
    2929        } else { // CPP
    3030                compilerConfig.templateFile = cli.getOptionValue("t", "header.template");
    31                 compilerConfig.templateDirectory = cli.getOptionValue("T", CompilerConfig.TEMPLATES_BASE + "CPP" + File.separator);
     31                compilerConfig.templateDirectory = cli.getOptionValue("T", CompilerConfig.TEMPLATES_DIRECTORY + "CPP" + File.separator);
    3232                compilerConfig.outputFile = cli.getOptionValue("o", "code.cpp");
    3333                //compilerConfig.targetDirectory = cli.getOptionValue("O", CompilerConfig.CPPLANG);
  • proto/pablo/src/applicationGenerator/HeaderTemplateContentsGenerator.java

    r2788 r2789  
    11package applicationGenerator;
     2
     3import pabloB.ast.*;
     4
     5import compiler.codeGenerator.visitors.CPPUnparser;
     6import compiler.symbols.SymbolTable;
     7import compiler.template.FileTemplate;
     8import compiler.template.MemoryTemplate;
     9import compiler.template.Template;
    210
    311import java.io.File;
    412import java.io.PrintStream;
    513
    6 import pabloB.ast.*;
    7 //import compiler.codeGenerator.helpers.UnparserUtil;
    8 import compiler.template.Template;
    9 
    10 //import symbols.Symbol;
    11 //import symbols.SymbolTable;
    12 
    1314public class HeaderTemplateContentsGenerator extends TemplateContentsGenerator {
    1415   
    15         private ASTNode ASTTree;
    16        
    17         public HeaderTemplateContentsGenerator(ASTNode ASTTree,
     16        public HeaderTemplateContentsGenerator(ASTNode ASTTree,
     17                        SymbolTable symbolTable,
    1818                        String outputDirectory,
    1919                        String templateFile) {
    20                 super(ASTTree, outputDirectory, templateFile);
     20                super(ASTTree, symbolTable, outputDirectory, templateFile);
    2121        }
    2222
    23         public void generate(PrintStream out, String code) {
     23        public void generate() {
     24               
     25                 OutputCodeDirectory outputCodeDirectory = new OutputCodeDirectory(outputDirectory);
     26                 String targetFile = replaceFileNameExtension(new File(templateFile).getName(), ".hpp");         
     27                 outputCodeDirectory.generateFile(new HeaderContentsGenerator(), targetFile);                           
     28                 
     29                 // TODO - Current callback approach *may* cause confusion.
     30       
     31                 /*
     32                        String globalDefinitions = makeGlobalDefinitions();
    2433                       
    25                  OutputCodeDirectory outputCodeDirectory = new OutputCodeDirectory(outputDirectory);
    26                                  
    27                  outputCodeDirectory.copyTemplate(templateFile, "header.hpp");
    28                  
    29                  //Template template = outputCodeDirectory.fileTemplate("header", outputBaseDirectory + "/" + targetDirectory + "/" + templateFile);
    30                
    31                  //template.set("global", code);
     34                        String baseName = replaceFileNameExtension(new File(templateFile).getName(), "");
    3235                       
    33                  //template.print(out);
     36                        Template template = outputCodeDirectory.fileTemplate(baseName, templateFile);
     37                        template.set("warningComment", CompilerConfig.WARNING_MESSAGE);
     38                        template.set("global", globalDefinitions);
     39                       
     40                        PrintStream ps = new PrintStream(System.out);
     41                       
     42                        template.print(ps);
     43                */
    3444        }
    3545
    36         @Override
    37         public void generate() {
    38                 // TODO Auto-generated method stub
     46        private class HeaderContentsGenerator implements ContentsGenerator {
    3947               
    40         }       
    41        
    42         /*
    43          * Example organization -       See below. A private class that gathers information and builds the tree.
    44          *                                                      A template generator for each back end?
    45          */
    46         /*
    47         private class LextantsGenerator implements ContentsGenerator {
    48                 public void generate(PrintStream out, OutputCodeFolder folder) {
    49                         String definitions = makeLextantDefinitions();
    50                         Template template = folder.fileTemplate("lextant", packageDirectory + "/Lextant.template");
    51                         template.set("lextantDefinitions", definitions);
    52                         template.set("warningComment", CodeGenerator.generatedCodeWarning);
     48                public void generate(PrintStream out, OutputCodeDirectory outputCodeDirectory) {
     49                        String globalDefinitions = makeGlobalDefinitions();
     50               
     51                        String baseName = replaceFileNameExtension(new File(templateFile).getName(), "");
     52                       
     53                        Template template = outputCodeDirectory.fileTemplate(baseName, templateFile);
     54                        template.set("warningComment", CompilerConfig.WARNING_MESSAGE);
     55                        template.set("global", globalDefinitions);
    5356                        template.print(out);
    5457                }
     58               
     59                private String makeGlobalDefinitions() {
     60                        CPPUnparser unparser = new CPPUnparser(symbolTable);
     61                        String code = unparser.getCode(ASTTree);                       
     62                        return code;
     63                }
    5564        }
    56         */
    5765       
     66        public static String replaceFileNameExtension(String fileName, String ext) {
     67
     68                int index = fileName.lastIndexOf('.');
     69                if (index > 0) {
     70                return fileName.substring(0, index) + ext;
     71                } else {
     72                        return fileName + ext;
     73                }
     74        }
     75       
    5876}
  • proto/pablo/src/applicationGenerator/OutputCodeDirectory.java

    r2788 r2789  
    3636        }
    3737       
    38        
    3938        private void generateContents(ContentsGenerator contents, String filename) {
    4039                try {
     
    4847                }
    4948        }               
    50        
     49               
    5150        PrintStream streamForFilename(String filename) throws IOException {
    5251                File file = new File(filename);
  • proto/pablo/src/applicationGenerator/TemplateContentsGenerator.java

    r2788 r2789  
    22
    33import pabloB.ast.*;
    4 
    5 //import symbols.Symbol;
    6 //import symbols.SymbolTable;
     4import compiler.symbols.SymbolTable;
    75
    86abstract public class TemplateContentsGenerator {
    97   
    108        protected ASTNode ASTTree;
    11 
     9        protected SymbolTable symbolTable;
    1210    protected String outputDirectory;
    1311        protected String templateFile;
    1412       
    1513        public TemplateContentsGenerator(ASTNode ASTTree,
     14                                                                        SymbolTable symbolTable,
    1615                                                                        String outputDirectory,
    1716                                                                        String templateFile) {
    1817                this.ASTTree = ASTTree;         
    19 
     18                this.symbolTable = symbolTable;
    2019                this.outputDirectory = outputDirectory;         
    2120                this.templateFile = templateFile;
  • proto/pablo/src/applicationGenerator/templates/CPP/header.template

    r2788 r2789  
    1 // header.hpp.template
     1###@warningComment ###
     2// header.hpp.templates
    23//
    34// (c) 2012 Robert D. Cameron, Ken Herdy
     
    910//
    1011//////////////////////////////////////////////////////////////////////////////////////////
    11 @global
     12###@global ###
  • proto/pablo/src/applicationGenerator/templates/simple.template

    r2788 r2789  
     1###@ warningComment ###
    12// stripped_template.c
    23//
     
    1011//
    1112//////////////////////////////////////////////////////////////////////////////////////////
    12 @global
     13### @global ###
    1314
    1415//////////////////////////////////////////////////////////////////////////////////////////
    1516// @ decl (Stream Structure definitions, i.e. per instance memory allocation)
    1617//////////////////////////////////////////////////////////////////////////////////////////
    17 @decl
     18### @decl ###
    1819
    1920//////////////////////////////////////////////////////////////////////////////////////////
    2021// @ stream_stmts (Stream Function definitions, i.e. per instance memory allocation)
    2122//////////////////////////////////////////////////////////////////////////////////////////
    22 @stream_stmts
     23### @stream_stmts ###
    2324
    2425//////////////////////////////////////////////////////////////////////////////////////////
    2526// @ block_stmts (Stream Function instance do_block function calls.)
    2627//////////////////////////////////////////////////////////////////////////////////////////
    27 @block_stmts
     28### @block_stmts ###
    2829
    2930//////////////////////////////////////////////////////////////////////////////////////////
    3031// @ final_block_stmts (Stream Function instance do_block function calls.)
    3132//////////////////////////////////////////////////////////////////////////////////////////
    32 @final_block_stmts
     33### @final_block_stmts ###
    3334
    3435//////////////////////////////////////////////////////////////////////////////////////////
     
    3637// wherein a file terminates on a block boundary.)
    3738//////////////////////////////////////////////////////////////////////////////////////////
    38 @any_carry
     39### @any_carry ###
Note: See TracChangeset for help on using the changeset viewer.