Changeset 3355 for proto/pabloj


Ignore:
Timestamp:
Jun 26, 2013, 3:14:28 PM (6 years ago)
Author:
ksherdy
Message:

Partial pabloB2PabloS impl.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • proto/pabloj/trunk/src/application/generators/ApplicationGenerator.java

    r3347 r3355  
    11/*
    22 * High-level module that captures the logic to generates application code based on the application configuration.
    3  *
    4  * TODO
    5  * 
    6  * (1) The symbol table used in this module should be a 'PabloS' symbol
    7  *     table that is passed from transformer to transformer.
    8  *   
    9  *     Basic approach:
    10  *     
    11  *     (i)  Gather information in 'visitor' passes over the PabloS AST.
    12  *     (ii) Use gathered information in subsequent passes over the PabloS AST.
    13  *     
    14  *     Care must be taken to gather information ahead of transformation passes that
    15  *     alter the AST structure.
    16  *   
     3 *
    174 * <ksherdy at sfu dot ca>
    185 */
     
    2815import toolchain.pabloB.codeGenerator.visitors.AbstractUnparser;
    2916import toolchain.pabloB.codeGenerator.visitors.Unparser;
     17import toolchain.pabloB.transformer.visitors.pabloB2PabloB.PabloB2PabloBController;
    3018
    3119import toolchain.pabloS.ast.Accessors;
    32 import toolchain.pabloS.transformer.visitors.PabloS2PabloBXFormer;
    33 import toolchain.pabloS.transformer.visitors.StreamFunctionPropertySet;
    34 import toolchain.pabloS.transformer.visitors.StreamFunctionPropertySetFactory;
    35 import toolchain.pabloS.transformer.visitors.StreamFunctions;
     20import toolchain.pabloS.transformer.visitors.pabloS2PabloB.PabloS2PabloBXFormer;
     21import toolchain.pabloS.transformer.visitors.pabloS2pabloS.SomeNameStreamFunctionPropertySet;
     22import toolchain.pabloS.transformer.visitors.pabloS2pabloS.SomeNameStreamFunctionPropertySetFactory;
     23import toolchain.pabloS.transformer.visitors.pabloS2pabloS.StreamFunctionDefs;
    3624
    3725import application.config.Configuration;
     
    7967                } */
    8068
    81                 // Parse
    8269                pabloB.ast.ASTNode pabloBAST = null;
    8370               
    8471                if(applicationConfiguration.getSource() == SourceLanguage.PABLO_S) {
    85                         pabloS.ast.ASTNode pabloSAST = ASTGenerator.buildPabloSAST(applicationConfiguration.sourceFile());
    86                        
    87                         // transform PabloS builtins to Carry Set builtins
    88                         toolchain.pabloS.transformer.Transformer pabloSXFormer = new toolchain.pabloS.transformer.Transformer(pabloSAST);
    89                         pabloSXFormer.setBuiltins2Lang(pabloSbuiltinsEncoder);
    90                         pabloSXFormer.setCarrySet2Lang(carrySetEncoder);
    91                        
    92                         // Transform PabloS global functions in non-final block mode
    93                         pabloSXFormer.setFinalBlockMode(false);
    94                         pabloS.ast.ProgramNode decoratedTree = (pabloS.ast.ProgramNode)pabloSXFormer.xForm();
    95                        
    96                         // Transform PabloS global functions in final block mode
    97                         pabloSXFormer.setFinalBlockMode(true);
    98                         pabloS.ast.ProgramNode optDecoratedTree = (pabloS.ast.ProgramNode)pabloSXFormer.xForm();
     72                    //////////////////////////////////////////////////////////////
     73                    // Parse
     74                    pabloS.ast.ASTNode pabloSAST = ASTGenerator.buildPabloSAST(applicationConfiguration.sourceFile());
     75                                               
     76            //////////////////////////////////////////////////////////////
     77            // S2S Transform
     78                        pabloS.ast.ASTNode decoratedTree = toolchain.pabloS.transformer.visitors.pabloS2pabloS.PabloS2SPabloController.accept(pabloSAST);
     79                        pabloS.ast.ASTNode finalDecoratedTree = toolchain.pabloS.transformer.visitors.pabloS2pabloS.PabloS2SPabloController.accept(pabloSAST);
    9980
    100                         ArrayList<pabloS.ast.FuncDefNode> funcDefNodes = StreamFunctions.makeList(pabloSAST);
    101                         Map<String, StreamFunctionPropertySet> streamFunctionPropertySetMap = new LinkedHashMap<String, StreamFunctionPropertySet>();
     81                        ArrayList<pabloS.ast.FuncDefNode> funcDefNodes = StreamFunctionDefs.forTree(pabloSAST);
     82                        Map<String, SomeNameStreamFunctionPropertySet> streamFunctionPropertySetMap = new LinkedHashMap<String, SomeNameStreamFunctionPropertySet>();
    10283                       
    10384                        for(pabloS.ast.FuncDefNode funcDefNode : funcDefNodes) {
    104                             StreamFunctionPropertySet value = StreamFunctionPropertySetFactory.apply(funcDefNode);
     85                            SomeNameStreamFunctionPropertySet value = SomeNameStreamFunctionPropertySetFactory.apply(funcDefNode);
    10586                            String key = Accessors.funcName(funcDefNode);
    10687                            streamFunctionPropertySetMap.put(key, value);
    10788                        }
     89                                               
     90                        // Transform PabloS global functions in non-final block mode
     91                        decoratedTree = toolchain.pabloS.transformer.visitors.pabloS2PabloB.PabloS2PabloBController.accept(decoratedTree);
    10892                       
    109                         PabloS2PabloBXFormer pabloS2PabloBXFormer = new PabloS2PabloBXFormer(streamFunctionPropertySetMap, pabloSbuiltinsEncoder, carrySetEncoder);
    110                         pabloBAST = pabloS2PabloBXFormer.XForm(decoratedTree, optDecoratedTree);
     93            // Transform PabloS global functions in final block mode
     94                        toolchain.pabloS.transformer.visitors.pabloS2PabloB.PabloS2PabloBController.setFinalBlockMode(true);
    11195                       
    112                
     96                        finalDecoratedTree = toolchain.pabloS.transformer.visitors.pabloS2PabloB.PabloS2PabloBController.accept(finalDecoratedTree);
     97                        PabloS2PabloBXFormer.setStreamFunctionPropertySetMap(streamFunctionPropertySetMap);
     98                        PabloS2PabloBXFormer.setPabloSBuiltinEncoder(pabloSbuiltinsEncoder);
     99                        PabloS2PabloBXFormer.setCarrySetEncoder(carrySetEncoder);
     100
     101            //////////////////////////////////////////////////////////////
     102            // S2B Transform
     103                        pabloBAST = PabloS2PabloBXFormer.apply(decoratedTree, finalDecoratedTree);
     104                       
    113105                } else if (applicationConfiguration.getSource() == SourceLanguage.PABLO_B) {
    114106
    115107                        pabloBAST = ASTGenerator.buildPabloBAST(applicationConfiguration.sourceFile());
     108                }
    116109
    117                 }
    118        
    119         // PabloB AST Transforms
    120         toolchain.pabloB.transformer.Transformer pabloBXFormer = new toolchain.pabloB.transformer.Transformer(pabloBAST);
    121         pabloBXFormer.setBuiltins2Lang(pabloBBuiltinsEncoder);
     110        //////////////////////////////////////////////////////////////
     111        // B2B Transform
     112                PabloB2PabloBController.setBuiltins2Lang(pabloBBuiltinsEncoder);
    122113       
    123114        if(applicationConfiguration.addingAlignmentAssertions()) {
    124             pabloBXFormer.setAddAssertBitBlockAlignStmts(true);
     115            PabloB2PabloBController.setAddAssertBitBlockAlignStmts(true);
    125116        }
    126117       
    127118        if(applicationConfiguration.addingDumpStatements()) {
    128             pabloBXFormer.setAddDumpStmts(true);
     119            PabloB2PabloBController.setAddDumpStmts(true);
    129120        } 
    130         pabloBAST = pabloBXFormer.xForm();
     121
     122        pabloBAST = PabloB2PabloBController.accept(pabloBAST);
    131123       
    132124       
     
    134126//              String templateDirectory        = applicationConfiguration.getTemplateDirectory();
    135127                String templateFilePath         = applicationConfiguration.templateFilePath();
    136 
    137128                String outputDirectory          = applicationConfiguration.outputDirectory();
    138129                String outputFilePath           = applicationConfiguration.outputFilePath();
Note: See TracChangeset for help on using the changeset viewer.