Changeset 3788


Ignore:
Timestamp:
Apr 5, 2014, 2:46:03 AM (3 years ago)
Author:
ksherdy
Message:

Added basic graph code generation.

Location:
proto/s2k/trunk/framework
Files:
8 added
6 deleted
16 edited

Legend:

Unmodified
Added
Removed
  • proto/s2k/trunk/framework/input/grammar/scatter/b2k.scatter

    r3782 r3788  
    8484grammar {
    8585   
    86     program     -> (structDef | kernelDef) * ;
     86    program     -> (structDef | kernelDef) * graphDef ?;
    8787   
    8888    //
     
    132132    graphParameterName          #-> identifier ;
    133133   
    134     graphBody                   ->  LCURLY graphVarDecl * addKernelStmt RCURLY ;
    135    
    136     graphVarDecl                #-> structDecl | kernelDecl ;
     134    graphBody                   ->  LCURLY graphVarDecls addKernelStmts RCURLY ;
     135   
     136    graphVarDecls               ->  ( structDecl | kernelDecl ) * ;
    137137    structDecl                  ->  structType structName TERMINATOR ;
    138138    kernelDecl                  ->  kernelType kernelName TERMINATOR ;
    139139    // graphDecl                ->  GRAPH graphName TERMINATOR ;
    140140       
     141    addKernelStmts              ->  addKernelStmt * ;   
    141142    addKernelStmt               ->  kernelVarName kernelArgList ;
    142143    kernelVarName               #-> identifier ;
  • proto/s2k/trunk/framework/input/grammar/scatter/s2k.scatter

    r3782 r3788  
    106106grammar {
    107107
    108     program     -> ( structDef | filterDef ) * graphDef * ;
     108    program     -> ( structDef | filterDef ) * graphDef ? ;
    109109
    110110    //
     
    149149    graphParameterName          #-> identifier ;
    150150   
    151     graphBody                   ->  LCURLY graphVarDecl * addFilterStmt * RCURLY ;
    152    
    153     graphVarDecl                #->  structDecl | filterDecl ;
    154     structDecl                  ->  structType structName TERMINATOR ;
    155     filterDecl                  ->  filterType filterName TERMINATOR ;
     151    graphBody                   ->  LCURLY graphVarDecls addFilterStmts RCURLY ;
     152   
     153    graphVarDecls               ->  ( structDecl | filterDecl ) * ; 
     154    structDecl                  ->  structType structVarName TERMINATOR ;
     155    structVarName               #-> identifier ;
     156    filterDecl                  ->  filterType filterVarName TERMINATOR ;
     157    filterVarName               #-> identifier ;
    156158    // graphDecl                ->  GRAPH graphName TERMINATOR ;
    157159   
     160    addFilterStmts              ->  addFilterStmt * ;
    158161    addFilterStmt                   ->  filterVarName LROUND filterArgList RROUND TERMINATOR ;
    159162    filterVarName               #-> identifier ;
  • proto/s2k/trunk/framework/input/test/s2k/proto/grep/grep.s2k

    r3782 r3788  
    1 
    21/*
    32struct Basis_bits{
     
    8786graph Main() {
    8887
    89     struct Byte_data byte_data;
     88    // char * byte_data;
    9089    struct Basis_bits basis_bits;
    9190    struct Lex lex;
    9291    struct Output output;
    93     struct MatchLines matchLines;
    9492   
    9593    filter Transpose transpose;
  • proto/s2k/trunk/framework/input/test/s2k/proto/grep/s2k_grep_test.bash

    r3760 r3788  
    11#!/bin/bash
    22#
    3 # Update ${PARABIX2DIR}/src/runall.py to test s2k_xmlwf.
    4 #
    5 # Current set up reports '5 files did not pass the test'.
    6 #
    73SRC_DIR=/home/ken/Development/proto/s2k/trunk/demo/grep/src
    8 CRT_DIR=`pwd`
    94cd ${SRC_DIR}
    105make clean
    11 make s2k_grep
     6make grep
    127make test_all
    13 cd ${CRT_DIR}
  • proto/s2k/trunk/framework/input/test/s2k/proto/parabix2/s2k_xmlwf_test.bash

    r3760 r3788  
    66#
    77SRC_DIR=/home/ken/Development/proto/parabix2/src
    8 CRT_DIR=`pwd`
    98cd ${SRC_DIR}
    109make clean
    1110make s2k_xmlwf
    1211make test
    13 cd ${CRT_DIR}
  • proto/s2k/trunk/framework/output/cpplang/parabix2/parabix2_pablo_definitions_ref.hpp

    r3752 r3788  
    22//
    33// This template includes the minimal set of runtime support libraries required
    4 // to support compilation of s2k generated C++ code (bitblock.hpp, carryQ.hpp,
     4// to support compilation of s2k generated C++ code (bitblock.hpp, carryQ.hpp, 
    55// pabloSupport.hpp, error_tracker.hpp)
    66//
  • proto/s2k/trunk/framework/src/application/generators/AbstractTemplateContentsGenerator.java

    r3782 r3788  
    1212   
    1313        protected b2k.ast.ProgramNode programNode;
    14         protected AbstractCodeGenerator unparser;
     14        protected AbstractCodeGenerator codeGenerator;
    1515    //protected String outputDirectory;
    1616        protected String templateFilePath;
     
    1818               
    1919        public AbstractTemplateContentsGenerator(b2k.ast.ProgramNode programNode,
    20                                                                                 AbstractCodeGenerator unparser,
     20                                                                                AbstractCodeGenerator codeGenerator,
    2121                //                                                              String outputDirectory,
    2222                                                                                String templateFilePath,
     
    2424               
    2525                this.programNode                = programNode;         
    26                 this.unparser                   = unparser;
     26                this.codeGenerator              = codeGenerator;
    2727                // this.outputDirectory         = outputDirectory;                     
    2828                this.templateFilePath   = templateFilePath;
     
    3030               
    3131        }
    32 
    33         abstract public void generate();
    3432       
    3533}
  • proto/s2k/trunk/framework/src/application/generators/ApplicationGenerator.java

    r3782 r3788  
    1212import toolchain.b2k.codeGenerator.idisa.IDISABuiltin2CPP;
    1313import toolchain.b2k.codeGenerator.visitors.AbstractCodeGenerator;
    14 import toolchain.b2k.codeGenerator.visitors.GlobalDefintionsCodeGenerator;
     14import toolchain.b2k.codeGenerator.visitors.CodeGenerator;
    1515import toolchain.b2k.transformer.visitors.B2K2B2K.B2K2B2KController;
    1616
     
    4141                // Transformation configurations to support multiple backends
    4242                toolchain.s2k.lang.BuiltinEncoder s2kBuiltinsEncoder  = null;
    43                 toolchain.b2k.lang.BuiltinEncoder b2kBuiltinsEncoder  = null;
     43                toolchain.b2k.lang.AbstractBuiltinEncoder b2kBuiltinsEncoder  = null;
    4444                AbstractCodeGenerator globalDefsGenerator                                                                       = null;
    4545               
     
    5050            b2kBuiltinsEncoder  = new toolchain.b2k.lang.B2KBuiltins2C();
    5151            carrySetEncoder     = new toolchain.s2k.lang.carrySet.CarrySetBuiltin2C();
    52                         globalDefsGenerator = new GlobalDefintionsCodeGenerator(new IDISABuiltin2C());                 
     52                        globalDefsGenerator = new CodeGenerator(new IDISABuiltin2C(), b2kBuiltinsEncoder);                     
    5353                } else if(applicationConfiguration.getTarget() == Target.CPP_LANG) {
    5454                        s2kBuiltinsEncoder      = new toolchain.s2k.lang.S2KBuiltin2CPP();
    5555                        b2kBuiltinsEncoder      = new toolchain.b2k.lang.B2KBuiltins2CPP();
    5656                        carrySetEncoder         = new toolchain.s2k.lang.carrySet.CarrySetBuiltin2CPP();
    57                         globalDefsGenerator     = new GlobalDefintionsCodeGenerator(new IDISABuiltin2CPP());
     57                        globalDefsGenerator     = new CodeGenerator(new IDISABuiltin2CPP(), b2kBuiltinsEncoder);
    5858                } /*else if(applicationConfiguration.targetLang.contentEquals(Configuration.LLVM)) {  // default C++
    5959                        builtins2Lang = new S2KBuiltins2CPP();
     
    105105                String outputFilePath           = applicationConfiguration.outputFilePath();
    106106               
    107                 GlobalDefinitionsContentsGenerator globalTemplateContentsGenerator
    108                                                                         = new GlobalDefinitionsContentsGenerator((b2k.ast.ProgramNode) b2kAST,
     107                ContentsGenerator globalTemplateContentsGenerator
     108                                                                        = new ContentsGenerator((b2k.ast.ProgramNode) b2kAST,
    109109                                                                                                                                                        globalDefsGenerator,
    110110//                                                                                                                                                      outputDirectory,
    111111                                                                                                                                                        templateFilePath,
    112112                                                                                                                                                        outputFilePath);       
    113                 globalTemplateContentsGenerator.generate();
     113                globalTemplateContentsGenerator.generateGlobalsDefinitions();
     114                globalTemplateContentsGenerator.generateGraphDefinitions();
     115                globalTemplateContentsGenerator.generateOutputFile();
    114116               
    115117                printCompletionMessage(outputFilePath);
  • proto/s2k/trunk/framework/src/toolchain/b2k/ast/Accessors.java

    r3778 r3788  
    3939                return list;
    4040        }
     41
     42        ////////////////////////////////////////////////////////////////////////////
     43        // GraphDef
     44        ////////////////////////////////////////////////////////////////////////////
     45        public static boolean hasGraphDefNode(ProgramNode node) {
     46                boolean hasGraphDefNode = false;
     47                for(ASTNode child : node.getChildren()) {
     48                        if (child instanceof GraphDefNode) {
     49                                hasGraphDefNode = true;
     50                        }
     51                }
     52                return hasGraphDefNode;
     53        }
     54       
     55        public static GraphDefNode graphDefNode(ProgramNode node) {
     56                assert hasGraphDefNode(node);
     57                GraphDefNode graphDefNode = null;
     58               
     59                for(ASTNode child : node.getChildren()) {
     60                        if (child instanceof GraphDefNode) {
     61                                graphDefNode = ((GraphDefNode) child);
     62                        }
     63                }
     64                return graphDefNode;
     65        }       
     66
     67        public static ASTNode nameNode(GraphDefNode addKernelStmtNode) {
     68                return addKernelStmtNode.child(0);
     69        }
     70       
     71        public static boolean hasParameters(GraphDefNode node) {
     72            return ((node.child(1) instanceof GraphParameterListNode) && (node.child(1).nChildren() > 1));
     73        }
     74       
     75        public static KernelParameterListNode graphParameterListNode(GraphDefNode node) {   
     76            return (KernelParameterListNode) node.child(1);
     77        }       
     78       
     79        public static GraphBodyNode graphBodyNode(GraphDefNode node) {
     80                ASTNode graphBody = node.child(2);
     81                assert graphBody instanceof GraphBodyNode;
     82                return (GraphBodyNode) graphBody;
     83        }
     84       
     85        public static GraphVarDeclsNode graphVarDecls(GraphBodyNode node) {
     86                ASTNode graphVarDecls = node.child(0);
     87                assert graphVarDecls instanceof GraphVarDeclsNode;
     88                return (GraphVarDeclsNode) graphVarDecls;
     89        }
     90       
     91        public static List<StructDeclNode> structDeclNodes(GraphDefNode node) {
     92                List<StructDeclNode> list = new ArrayList<StructDeclNode>();
     93                GraphVarDeclsNode graphVarDecls = graphVarDecls(graphBodyNode(node));
     94                for(ASTNode child : graphVarDecls.getChildren()) {
     95                        if (child instanceof StructDeclNode) {
     96                                list.add((StructDeclNode) child);
     97                        }
     98                }
     99                return list;
     100        }       
     101
     102        public static List<KernelDeclNode> kernelDeclNodes(GraphDefNode node) {
     103                List<KernelDeclNode> list = new ArrayList<KernelDeclNode>();
     104                GraphVarDeclsNode graphVarDecls = graphVarDecls(graphBodyNode(node));
     105                for(ASTNode child : graphVarDecls.getChildren()) {
     106                        if (child instanceof KernelDeclNode) {
     107                                list.add((KernelDeclNode) child);
     108                        }
     109                }
     110                return list;
     111        }               
     112
     113        public static AddKernelStmtsNode addKernelStmtNodes(GraphBodyNode node) {
     114                ASTNode addKernelStmtsNode = node.child(1);
     115                assert addKernelStmtsNode instanceof AddKernelStmtsNode;
     116                return (AddKernelStmtsNode) addKernelStmtsNode;
     117        }       
     118       
     119        public static List<AddKernelStmtNode> addKernelStmtNodes(GraphDefNode node) {
     120                List<AddKernelStmtNode> list = new ArrayList<AddKernelStmtNode>();
     121                AddKernelStmtsNode graphVarDecls = addKernelStmtNodes(graphBodyNode(node));
     122                for(ASTNode child : graphVarDecls.getChildren()) {
     123                        if (child instanceof AddKernelStmtNode) {
     124                                list.add((AddKernelStmtNode) child);
     125                        }
     126                }
     127                return list;
     128        }       
     129       
     130        public static ASTNode nameNode(AddKernelStmtNode addKernelStmtNode) {
     131                return addKernelStmtNode.child(0);
     132        }
     133       
     134        public static ASTNode addKernelStmtArgList(AddKernelStmtNode addKernelStmtNode) {
     135                return addKernelStmtNode.child(1);
     136        }
     137       
     138    public static List<ASTNode> addKernelStmtArgs(AddKernelStmtNode node) {
     139        return Accessors.addKernelStmtArgList(node).getChildren();
     140    }
    41141       
    42142        ////////////////////////////////////////////////////////////////////////////
     
    132232       
    133233        public static ASTNode rhs(VarDeclNode node) {
    134        
    135234                return node.child(2);
    136235        }               
     
    324423        return (IdentifierNode)(node.child(1));
    325424    }
    326        
     425
     426        ////////////////////////////////////////////////////////////////////////////
     427        // KernelTypeNode
     428        ////////////////////////////////////////////////////////////////////////////
     429        public static ASTNode nameNode(KernelTypeNode node) {
     430            return node.child(0);
     431        }
     432
     433        public static String kernelTypeLexeme(StructTypeNode node) {           
     434                return node.getToken().getPrintableLexeme();
     435        }       
     436   
    327437        ////////////////////////////////////////////////////////////////////////////
    328438        // StructTypeNode
     
    426536        } else if(node instanceof KernelParameterNode) {
    427537            return name(nameNode((KernelParameterNode)node));
     538        } else if(node instanceof AddKernelStmtNode) {
     539            return name(nameNode((AddKernelStmtNode)node));
     540        } else if(node instanceof GraphDefNode) {
     541            return name(nameNode((GraphDefNode)node));
    428542        }
    429543        assert false : "Accessors.name(ASTNode node) method not implemented on node class : " + node.getClass();
  • proto/s2k/trunk/framework/src/toolchain/b2k/codeGenerator/visitors/AbstractCodeGenerator.java

    r3783 r3788  
    4646import b2k.ast.ASTNode;
    4747import b2k.ast.ASTVisitor.Default;
    48 import toolchain.b2k.codeGenerator.idisa.AbstractIDISABuiltin2Lang;
     48import b2k.ast.AddKernelStmtNode;
    4949import toolchain.b2k.codeGenerator.util.CodeStore;
    5050
     
    5252       
    5353        abstract public String getCode(ASTNode node);           
    54         abstract public String getCode(ASTNode node, int indent);       
     54        abstract public String getCode(ASTNode node, int indent);
     55        abstract public String makeKernelDoBlockCallStmt(AddKernelStmtNode addKernelStmt);
     56        abstract public String makeKernelDoFinalBlockCallStmt(AddKernelStmtNode addKernelStmt);
     57        abstract public String makeKernelClearCallStmt(AddKernelStmtNode addKernelStmt);
    5558
    5659}
  • proto/s2k/trunk/framework/src/toolchain/b2k/lang/B2KBuiltins2C.java

    r3761 r3788  
    44import java.util.Map;
    55
    6 public class B2KBuiltins2C extends BuiltinEncoder {
     6public class B2KBuiltins2C extends AbstractBuiltinEncoder {
    77       
    88        private static Map<B2KBuiltin, String> b2k2CCode;
  • proto/s2k/trunk/framework/src/toolchain/b2k/lang/B2KBuiltins2CPP.java

    r3761 r3788  
    44import java.util.Map;
    55
    6 public class B2KBuiltins2CPP extends BuiltinEncoder {
     6import toolchain.b2k.lang.idisa.IDISABuiltin;
     7
     8public class B2KBuiltins2CPP extends AbstractBuiltinEncoder {
    79       
    810        private static Map<B2KBuiltin, String> b2k2CPPCode;
     
    3032                return b2k2CPPCode.get(builtin);
    3133        }
    32 
     34       
    3335}
  • proto/s2k/trunk/framework/src/toolchain/b2k/transformer/visitors/B2K2B2K/AddAlignmentAssertions.java

    r3704 r3788  
    1212import toolchain.b2k.ast.Generators;
    1313import toolchain.b2k.ast.Mutators;
    14 import toolchain.b2k.lang.BuiltinEncoder;
     14import toolchain.b2k.lang.AbstractBuiltinEncoder;
    1515import toolchain.b2k.lang.B2KBuiltin;
    1616
     
    1818        private AddAlignmentAssertions(){}
    1919       
    20         static public ASTNode apply(ASTNode ASTree, BuiltinEncoder encoder) {
     20        static public ASTNode apply(ASTNode ASTree, AbstractBuiltinEncoder encoder) {
    2121                XFormer xformer = new XFormer(encoder);
    2222                ASTree.accept(xformer);
     
    2525       
    2626        static private class XFormer extends VoidVisitor.Default {
    27                 private final BuiltinEncoder encoder;
    28                 private XFormer(BuiltinEncoder encoder) {
     27                private final AbstractBuiltinEncoder encoder;
     28                private XFormer(AbstractBuiltinEncoder encoder) {
    2929                        this.encoder = encoder;
    3030                }
  • proto/s2k/trunk/framework/src/toolchain/b2k/transformer/visitors/B2K2B2K/AddAssignmentPrints.java

    r3704 r3788  
    1414import toolchain.b2k.ast.Generators;
    1515import toolchain.b2k.ast.Mutators;
    16 import toolchain.b2k.lang.BuiltinEncoder;
     16import toolchain.b2k.lang.AbstractBuiltinEncoder;
    1717import toolchain.b2k.lang.B2KBuiltin;
    1818
     
    2020        private AddAssignmentPrints(){}
    2121
    22         static public ASTNode apply(ASTNode ASTree, BuiltinEncoder encoder) {
     22        static public ASTNode apply(ASTNode ASTree, AbstractBuiltinEncoder encoder) {
    2323                XFormer xformer = new XFormer(encoder);
    2424                ASTree.accept(xformer);
     
    2828
    2929        static private class XFormer extends VoidVisitor.Default {
    30                 private final BuiltinEncoder encoder;
    31                 private XFormer(BuiltinEncoder encoder) {
     30                private final AbstractBuiltinEncoder encoder;
     31                private XFormer(AbstractBuiltinEncoder encoder) {
    3232                        this.encoder = encoder;
    3333                }
  • proto/s2k/trunk/framework/src/toolchain/b2k/transformer/visitors/B2K2B2K/B2K2B2KController.java

    r3704 r3788  
    1414        //private SymbolTable symbolTable;
    1515       
    16         private static BuiltinEncoder builtinEncoder;
     16        private static AbstractBuiltinEncoder builtinEncoder;
    1717        private static boolean addDumpStmts;
    1818    private static boolean addAssertBitBlockAlignStmts;
     
    5959    }   
    6060   
    61     public static BuiltinEncoder getBuiltinEncoder() {
     61    public static AbstractBuiltinEncoder getBuiltinEncoder() {
    6262        return builtinEncoder;
    6363    }
    6464
    65     public static void setBuiltins2Lang(BuiltinEncoder encoder) {
     65    public static void setBuiltins2Lang(AbstractBuiltinEncoder encoder) {
    6666        builtinEncoder = encoder;
    6767    }
  • proto/s2k/trunk/framework/src/toolchain/s2k/transformer/visitors/S2K2B2K/S2K2B2KTransformer.java

    r3782 r3788  
    9999                FuncCallNode setCarryFuncCall = Generators.makeCarryFlipCall(locator, context, i);
    100100                funcCallNodes.add(setCarryFuncCall);
    101                 //kernelDef.appendChild(setCarryFuncCall);
    102101            }
    103102        }
     
    224223       
    225224        // KH: quick and dirty translations bypass b2k.ast.Generators and instead use 'new'
     225
     226        // AddFilterStmtNodes -> AddKernelStmtNodes
     227        //
     228        public ASTNode visitLeave(s2k.ast.AddFilterStmtsNode snode, List<ASTNode> childResults) {
     229                ASTNode replacement = new AddKernelStmtsNode(Generators.makeToken(snode.getToken()));
     230                appendChildResults(replacement, childResults);
     231                return replacement;
     232        }       
    226233       
    227234        // AddFilterStmtNode -> AddKernelStmtNode
Note: See TracChangeset for help on using the changeset viewer.