Changeset 3840


Ignore:
Timestamp:
Apr 19, 2014, 3:04:57 AM (4 years ago)
Author:
ksherdy
Message:

Added sequential for support to grammar. Grammar cleanup.

Location:
proto/s2k/trunk/framework
Files:
5 edited

Legend:

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

    r3839 r3840  
    5151        IF,
    5252        ELSE,
     53        FOR,
     54        BY,
    5355        WHILE,
    5456        RETURN,
     
    7375        TERMINATOR  ";",
    7476        DOT         ".",
     77        DDOT        "..",
    7578    }
    7679}
     
    99102    // s t r u c t   d e f i n i t i o n 
    100103    //
    101     structDef           ->  STRUCT structName structDefBody TERMINATOR? ;
     104    structDef           ->  STRUCT identifier structDefBody TERMINATOR? ;
    102105    structDefBody       ->  LCURLY (structMember TERMINATOR)+ RCURLY ;
    103     structMember        ->  structMemberType structMemberName ;
     106    structMember        ->  structMemberType identifier ;
    104107    structMemberType    #-> bitBlockType ;
    105     structMemberName    #-> identifier ;
    106108
    107109    //
    108110    // k e r n e l   d e f i n i t i o n
    109111    //
    110     kernelDef           ->  KERNEL kernelName LCURLY kernelInitDef kernelFuncDefs carryDeclare TERMINATOR RCURLY TERMINATOR? ; 
     112    kernelDef           ->  KERNEL identifier LCURLY kernelInitDef kernelFuncDefs carryDeclare TERMINATOR RCURLY TERMINATOR? ; 
    111113    kernelFuncDefs      ->  kernelFuncDef * ;
    112     kernelName          #-> identifier ;
    113114
    114115    //
     
    116117    //
    117118    kernelInitDef       #-> INIT LCURLY kernelProperty* RCURLY TERMINATOR? ;
    118     kernelProperty      ->  propertyName ASSIGN propertyValue TERMINATOR ;
    119     propertyName        #-> identifier ;
     119    kernelProperty      ->  identifier ASSIGN propertyValue TERMINATOR ;
    120120    propertyValue       ->  LSQUARE integerConstant (COMMA integerConstant)* RSQUARE ;
    121121
     
    123123    // k e r n e l   f u n c t i o n   d e f i n i t i o n
    124124    //
    125     kernelFuncDef       ->  FUNCTION kernelFuncName LROUND kernelParameterList RROUND kernelFuncBody TERMINATOR? ;
     125    kernelFuncDef       ->  FUNCTION identifier LROUND kernelParameterList RROUND kernelFuncBody TERMINATOR? ;
    126126    kernelParameterList ->  (kernelParameter (COMMA kernelParameter)* )?;
    127     kernelFuncName      #-> identifier ;
    128     kernelParameter     ->  (kernelParameterMode)? type kernelParameterName ;
     127    kernelParameter     ->  (kernelParameterMode)? type identifier ;
    129128    kernelParameterMode ->  (IN | OUT | INOUT) ;
    130     kernelParameterName #-> identifier ;
    131129    kernelFuncBody      #-> blockStmt ;
    132130    carryDeclare                #-> expr; // KH: temp hack to append the CarryDeclare() macro
     
    135133    // s t r e a m   g r a p h  ( p i p e l i n e )  d e f i n i t i o n
    136134    //   
    137     graphDef                    ->  GRAPH graphName LROUND graphParameterList RROUND graphBody TERMINATOR ? ;
    138    
    139     graphName                   #-> identifier ;
     135    graphDef                    ->  GRAPH identifier LROUND graphParameterList RROUND graphBody TERMINATOR ? ;
     136   
    140137    graphParameterList          ->  ( graphParameter (COMMA graphParameter)* ) ? ; // KH: implement as a 'modal' parameter
    141     graphParameter              ->  graphParameterMode? type graphParameterName ;
     138    graphParameter              ->  graphParameterMode? type identifier ;
    142139    graphParameterMode          ->  (IN | OUT | INOUT) ;
    143     graphParameterName          #-> identifier ;
    144140   
    145141    graphBody                   ->  LCURLY graphVarDecls addKernelStmts RCURLY ;
    146142   
    147143    graphVarDecls               ->  ( structDecl | kernelDecl ) * ;
    148     structDecl                  ->  structType structName TERMINATOR ;
    149     kernelDecl                  ->  kernelType kernelName TERMINATOR ;
    150     // graphDecl                ->  GRAPH graphName TERMINATOR ;
     144    structDecl                  ->  structType identifier TERMINATOR ;
     145    kernelDecl                  ->  kernelType identifier TERMINATOR ;
     146    // graphDecl                ->  GRAPH identifier TERMINATOR ;
    151147       
    152148    addKernelStmts              ->  addKernelStmt * ;   
    153     addKernelStmt               ->  addKernelVarName addKernelArgList ;
    154     addKernelVarName            #-> identifier ;
    155     addKernelArgList            ->  (addKernelArgName (COMMA addKernelArgName) *) ? ;
    156     addKernelArgName            #-> identifier ; 
     149    addKernelStmt               ->  identifier addKernelArgList ;
     150    addKernelArgList            ->  (identifier (COMMA identifier) *) ? ;
    157151
    158152    //
     
    168162    // s t a t e m e n t s
    169163    //
    170     stmt                    #-> varDecl | funcCallOrAssignStmt | ifStmt | whileStmt | returnStmt  ;
    171     funcCallOrAssignStmt    #-> expr (assignRest _promote_) ? TERMINATOR ; // KH: TODO Add Semantic Analysis pass to validate expr non-terminal is of function call node type   
     164    stmt                    #-> varDecl | funcCallOrAssignStmt | returnStmt | ifStmt | whileStmt  | forStmt ;
     165    varDecl                 ->  type identifier TERMINATOR ;
     166    funcCallOrAssignStmt    #-> expr (assignRest _promote_) ? TERMINATOR ; // KH: Add SA pass to validate expr is a function call type   
    172167    assignOperator          ->  ASSIGN ;                 
    173168    assignRest              ->  assignOperator^! expr ;               
    174     ifStmt                  ->  IF LROUND expr RROUND blockStmt (ELSE blockStmt)? ;             
    175     whileStmt               ->  WHILE LROUND expr RROUND blockStmt ;
    176169    returnStmt              ->  RETURN (expr) ? TERMINATOR ;
    177     varDecl                 ->  type varName TERMINATOR ;
    178     varName                 #-> identifier ;
     170    ifStmt                  ->  IF expr blockStmt (ELSE blockStmt)? ;             
     171    whileStmt               ->  WHILE expr blockStmt ;
     172   
     173    // KH: add forStmt SA, lowerBound <= upperBound, stride != 0
     174    forStmt                     ->      FOR identifier IN range stride blockStmt ;
     175        // indexTypeDecl            ->      indexType identifier;
     176        range                       ->      lowerBoundExpr DDOT upperBoundExpr ;
     177        lowerBoundExpr              #->     expr ;
     178        upperBoundExpr              #->     expr ;
     179        stride                      ->      (BY integerConstant) | (epsilon {@value = 1;}) ;
     180
    179181    blockStmt               ->  LCURLY stmt* RCURLY ;
    180182
     
    225227                            | (epsilon {@value = 1;}) ;
    226228   
    227     structType             ->  STRUCT structName ;
    228     structName             #-> identifier ;
    229    
    230     kernelType             -> KERNEL kernelName ;
    231     kernelName             #-> identifier ;
    232    
    233 }
     229    structType             ->  STRUCT identifier ;
     230    kernelType             -> KERNEL identifier ;
     231   
     232}
  • proto/s2k/trunk/framework/input/grammar/scatter/s2k.scatter

    r3839 r3840  
    22//
    33// 2012/09/08    Original definition.       
    4 // 2014/03/29    Removed VOID type.     
    5 // 2014/03/30    Updated structDef to structDef.
     4// 2014/03/29    Removed VOID type as a return type.     
    65// 2014/04/01    Added streamGraph.
    7 //
    8 //
     6// 2014/15/04    Added foreach loop.
     7// 2014/17/04    Added for loop.
    98//
    109// Tom Shermer <shermer at sfu dot ca>
     
    2524    recognizers {
    2625        Whitespace [IGNORE],
    27         Integer [INTEGER_CONST],
     26        Integer    [INTEGER_CONST],
    2827        Identifier [IDENTIFIER],        // Java identifiers, except $ character. Produces Lextant tokens for keywords.
    29         Comment [IGNORE] "#" "\n",      // Support parabix2_pablo debugging.
    30         Comment [IGNORE] "//" "\n",
    31         Comment [SQ_STRING] "'" "'",
    32         Comment [IGNORE] "/*" "*/",     // Comment. Comment [STRING] "/*" "*/",
    33         String [STRING],
     28        Comment    [IGNORE] "#" "\n",      // Support parabix2_pablo debugging.
     29        Comment    [IGNORE] "//" "\n",
     30        Comment    [SQ_STRING] "'" "'",
     31        Comment    [IGNORE] "/*" "*/",     // Comment. Comment [STRING] "/*" "*/",
     32        String     [STRING],
    3433        Punctuator,
    3534        EndOfInput,
     
    4948        ELSE,
    5049        WHILE,
     50        FOR,            // KH: REDUCE ?
    5151        FOREACH,
    5252        RETURN,
     
    7676        TERMINATOR      ";",
    7777        DOT             ".",
     78        DDOT            "..",
     79        BY,             
    7880    }
    7981}
     
    102104    streamType              {hasFieldWidth;}  [],
    103105    integerConstant         {intValued;}      [fieldWidthSpecifier],
     106    stride                  {intValued;}      [],
    104107//  primitiveType           {}                [intType voidType], // KH: update S2K2B2k for primitiveType
     108                       
    105109}
    106110
     
    112116    // s t r e a m   s t r u c t   d e f i n i t i o n
    113117    //
    114     structDef             ->  STRUCT structName structDefBody TERMINATOR? ;
     118    structDef             ->  STRUCT identifier structDefBody TERMINATOR? ;
    115119    structDefBody         ->  LCURLY (structMember TERMINATOR)+ RCURLY ;
    116     structMember          ->  structMemberType structMemberName ;
     120    structMember          ->  structMemberType identifier ;
    117121    structMemberType      #-> streamType ;
    118     structMemberName      #-> identifier ;
    119122
    120123    // KH: user-defined stream functions?
     
    122125    // s t r e a m   f u n c t i o n   d e f i n i t i o n   
    123126    //
    124     //funcDef             ->  FUNCTION funcReturnType funcName LROUND funcParameterList RROUND funcBody TERMINATOR? ;
     127    //funcDef             ->  FUNCTION funcReturnType identifier LROUND funcParameterList RROUND funcBody TERMINATOR? ;
    125128    //funcReturnType      #-> type;                     
    126129    //funcParameterList   ->  ( funcParameter (COMMA funcParameter)* ) ? ;
    127     //funcPName           #-> identifier ;
    128     //funcParameter       ->  type funcParameterName ;
    129     //funcParameterName   #-> identifier ;
     130    //funcParameter       ->  type identifier ;
    130131
    131132    //
    132133    // s t r e a m   f i l t e r   ( p r o c e d u r e )  d e f i n i t i o n
    133134    //
    134     filterDef                   ->  FILTER filterName LROUND filterParameterList RROUND blockStmt TERMINATOR? ;               
    135     filterName                  #-> identifier ;
     135    filterDef                   ->  FILTER identifier LROUND filterParameterList RROUND blockStmt TERMINATOR? ;               
    136136    filterParameterList         ->  ( filterParameter (COMMA filterParameter)* ) ? ;
    137     filterParameter             ->  filterParameterMode? type filterParameterName ;
     137    filterParameter             ->  filterParameterMode? type identifier ;
    138138    filterParameterMode         ->  (IN | OUT | INOUT) ; // KH: not implemented
    139     filterParameterName         #-> identifier ;
    140139
    141140    //
    142141    // s t r e a m   g r a p h  ( p i p e l i n e )  d e f i n i t i o n
    143142    //   
    144     graphDef                    ->  GRAPH graphName LROUND graphParameterList RROUND graphBody TERMINATOR ? ;
    145    
    146     graphName                   #-> identifier ;
     143    graphDef                    ->  GRAPH identifier LROUND graphParameterList RROUND graphBody TERMINATOR ? ;
     144   
    147145    graphParameterList          ->  ( graphParameter (COMMA graphParameter)* ) ? ; // KH: implement as a 'modal' parameter
    148     graphParameter              ->  graphParameterMode? type graphParameterName ;
     146    graphParameter              ->  graphParameterMode? type identifier ;
    149147    graphParameterMode          ->  (IN | OUT | INOUT) ;
    150     graphParameterName          #-> identifier ;
    151148   
    152149    graphBody                   ->  LCURLY graphVarDecls addFilterStmts RCURLY ;
    153150   
    154151    graphVarDecls               ->  ( structDecl | filterDecl ) * ; 
    155     structDecl                  ->  structType structVarName TERMINATOR ;
    156     structVarName               #-> identifier ;
    157     filterDecl                  ->  filterType filterVarName TERMINATOR ;
    158     filterVarName               #-> identifier ;
    159     // graphDecl                ->  GRAPH graphName TERMINATOR ;
     152    structDecl                  ->  structType identifier TERMINATOR ;
     153    filterDecl                  ->  filterType identifier TERMINATOR ;
     154   
     155    // graphDecl                ->  GRAPH identifier TERMINATOR ;
    160156   
    161157    addFilterStmts              ->  addFilterStmt * ;
    162     addFilterStmt                   ->  addFilterVarName LROUND addFilterArgList RROUND TERMINATOR ;
    163     addFilterVarName            #-> identifier ;
    164     addFilterArgList            ->  (addFilterArgName (COMMA addFilterArgName) *) ? ;
    165     addFilterArgName            #-> identifier ; 
     158    addFilterStmt                   ->  identifier LROUND addFilterArgList RROUND TERMINATOR ;
     159    addFilterArgList            ->  (identifier (COMMA identifier) *) ? ;
    166160
    167161    //
    168162    // s t a t e m e n t s
    169163    //
    170     stmt                        #->     varDecl | funcCallOrAssignStmt | ifStmt | whileStmt | returnStmt | foreachStmt ;
     164    stmt                        #->     varDecl | funcCallOrAssignStmt | returnStmt | ifStmt | whileStmt | foreachStmt | forStmt ;
    171165    blockStmt                   ->      LCURLY stmt* RCURLY ;
    172     varDecl                     ->      type varName (ASSIGN^ expr) ? TERMINATOR ;
    173     varName                     #->     identifier ; 
     166    varDecl                     ->      type identifier (ASSIGN^ expr) ? TERMINATOR ;
    174167    funcCallOrAssignStmt        #->     expr (assignRest _promote_) ? TERMINATOR ; // KH: SA must validate 'expr' is a 'funcCall'
    175168    assignRest                  ->      assignOperator^! expr ;
    176169    assignOperator              ->      ASSIGN | AND_ASSIGN | OR_ASSIGN | XOR_ASSIGN |
    177170                                        MULTIPLY_ASSIGN | DIVIDE_ASSIGN | PLUS_ASSIGN | MINUS_ASSIGN ;       
    178     ifStmt                      ->      IF LROUND expr RROUND blockStmt (ELSE blockStmt)? ;                         
    179     whileStmt                   ->      WHILE LROUND expr RROUND blockStmt ;
    180171    returnStmt                  ->      RETURN (expr)? TERMINATOR ;
    181 
    182   //forStmt       -> FOR LROUND elementName IN expr RROUND blockStmt ; // expr?
    183   //elementName   #-> identifier ;
    184 
    185     foreachStmt                 ->  FOREACH LROUND indexStreamDeclList RROUND IN LROUND targetStreamDeclList RROUND blockStmt ;
    186     indexStreamDeclList         #-> streamDeclList ;
    187     targetStreamDeclList        #-> streamDeclList ;
    188         streamDeclList              ->  streamDecl ( COMMA streamDecl ) * ;
    189         streamDecl                  ->  streamType streamName ;
     172    ifStmt                      ->      IF expr blockStmt (ELSE blockStmt)? ;                         
     173    whileStmt                   ->      WHILE expr blockStmt ;
     174
     175    // KH: eliminate stream<1> type ?
     176    foreachStmt                 ->      FOREACH indexStreamDeclList IN targetStreamDeclList blockStmt ;
     177    indexStreamDeclList         #->     streamDeclList ;
     178    targetStreamDeclList        #->     streamDeclList ;
     179        streamDeclList              ->      streamDecl ( COMMA streamDecl ) * ;
     180        streamDecl                  ->      streamType identifier ;
    190181         
    191 
    192   //annotationStmt    -> AMPERSAND annotationName LROUND annotationArgList RROUND blockStmt TERMINATOR ;
    193   //annotationArgList -> (expr (COMMA expr)*) ?   
     182        //for i in 0 .. log(STREAM_SIZE) by 1 {
     183        //      c = popcount<i>(c);
     184        //}
     185       
     186        //for (int i=lowerBoundExpr; i <= upperBoundExpr; i=i+intgerContant) { S }
     187               
     188        // KH: count controlled for loop
     189        // KH: eliminate 'int' type ?   
     190        forStmt                     ->      FOR identifier IN range stride blockStmt ;
     191        //indexTypeDecl               ->      indexType identifier ;
     192        range                       ->      lowerBoundExpr DDOT upperBoundExpr ;
     193        lowerBoundExpr              #->     expr ;
     194        upperBoundExpr              #->     expr ;
     195        stride                      ->      (BY integerConstant) | (epsilon {@value = 1;}) ;
     196       
     197
     198    //annotationStmt    -> AMPERSAND identifier LROUND annotationArgList RROUND blockStmt TERMINATOR ;
     199    //annotationArgList -> (expr (COMMA expr)*) ?   
    194200
    195201    //
     
    224230                                    filterType      ;
    225231
    226     primitiveType           #->     ( intType ) ;
    227232    intType                 ->      INT    { @type = {{PrimitiveType.INTEGER}};  } ;
     233    primitiveType           #->     intType ;
     234    indexType               #->     intType ;
    228235   
    229236    streamType              ->      STREAM fieldWidthSpecifier! {   @fieldWidth = @:value;
    230237                                                                    @type = {{ StreamType.STREAM(%?) }} , @fieldWidth ;
    231238                                                                } ;
    232     streamName              #->     identifier ;                                                               
    233                    
    234239    fieldWidthSpecifier     #->     (LANGLE integerConstant RANGLE ) | (epsilon {@value = 1;}) ;   
    235    
    236240    // fieldWidthSpecifier  #->     (LANGLE expr RANGLE ) | (epsilon {@value = 1;}) ;
    237241   
    238     structType              ->      STRUCT structName ;       
    239     structName              #->     identifier ;               
    240 
    241     filterType              ->      FILTER filterName ;       
    242     filterName              #->     identifier ;
    243 }
     242    structType              ->      STRUCT identifier ;       
     243    filterType              ->      FILTER identifier ;       
     244}
  • proto/s2k/trunk/framework/input/test/s2k/proto/grep/grep_flow.s2k

    r3839 r3840  
    8383}
    8484
     85/*
    8586filter Demo(struct Output output) {
    8687        stream m = output.match_follows;
     
    9293    }   
    9394}
     95*/
    9496 
    9597graph Main() {
     
    104106    filter Match match;
    105107    filter MatchLines matchLines;
    106     filter Demo demo;
     108//    filter Demo demo;
    107109
    108110    transpose(byte_data, basis_bits);
     
    110112    match(lex, output);
    111113    matchLines(lex, output);
    112     demo(output);
     114//    demo(output);
    113115   
    114116}
  • proto/s2k/trunk/framework/input/test/s2k/test.s2k

    r3834 r3840  
    11filter Test() {
    22
     3        /*
    34    for (stream s) in (stream m) {
    45   
    5     }
     6    }
     7    */
     8   
     9    for i in 0..1 { }
    610}
  • proto/s2k/trunk/framework/src/toolchain/s2k/transformer/visitors/S2K2S2K/TranslateForeachStmtsToWhileStmts.java

    r3830 r3840  
    11/*
    22 * Translates s2k foreach stmts to s2k while stmts.
     3 *
     4 * single stream foreach supports serial iteration of stream<1> types.
     5 *
     6 * 'zippered' foreach serial iteration requires arbitrary length lookahead.
    37 *
    48 * Preconditions: (Length(indexStreamDeclList) == Length(targetStreamDeclList)) and
     
    610 *                for 0 < k < Length(indexStreamDeclList).
    711 *               
    8  *
    912 * 'foreach' '(' indexStreamDeclList ')' 'in' '(' targetStreamDeclList ')'
    1013 * '{'
     
    2427 * identifierList = StreamDeclListToIdentiferList(indexStreamDeclList)
    2528 *
    26  * condition = MakeWhileCondition(identifierList) {
    27  *   if Length(identifierList) is 0
    28  *     return Error()
    29  * 
     29 * condition = MakeWhileCondition(identifierList) { 
    3030 *   if Length(identiferList) is 1 
    3131 *     return Bitcast(stream<1>, Head(identifierList))
     
    3434 *
    3535 *   return condition
    36  *
    3736 * }
     37 *
    3838 *
    3939 * varDeclInitStmts = MakeIndexStreamDeclInitStmts(indexStreamDeclList,targetStreamDeclList) {
     
    4444 *    return stmts
    4545 * }
     46 *
    4647 *     
    4748 * advanceThenScanToNextStmts = MakeAdvanceThenScanToNextAssignStmts(indexStreamDeclList,targetStreamDeclList) {
     
    110111        }
    111112
    112         // KH: refactor to semantic analysis pass
     113        // KH: move to semantic analysis pass
    113114                private void assertPreconditions(ForeachStmtNode node) {
    114115                        assert Accessors.indexStreamDeclList(node).nChildren() != 0;
Note: See TracChangeset for help on using the changeset viewer.