Ignore:
Timestamp:
May 27, 2013, 1:54:27 PM (6 years ago)
Author:
ksherdy
Message:

Sweeping changes to sync branch with trunk.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • proto/pabloj/branches/refactor-experimental/input/grammar/scatter/pabloB.scatter

    r3161 r3192  
    11//
    2 // Ken Herdy
     2// Tom Shermer, Ken Herdy
    33//
    44// PabloB - Block-at-a-time language
     
    88//                              06-04-2013      Updated to Scatter with types.
    99//
    10 // TODO:                Add BlockMode blocks to specify SIMD field width.
    11 //                              Add compile time integer expressions evaluation '+','-','*','/'.
    12 //                              Add Code Block.
     10// TODO:                CodeBlock, types ...
     11//
    1312
    14 types {}
     13types {
     14//      toolchain.pabloS.lang.type.Type,
     15//      toolchain.pabloS.lang.type.PrimitiveType,
     16//      toolchain.pabloS.lang.type.StreamType,
     17}
    1518
    1619context main {
     
    3134  tokens {
    3235        INIT,
    33         VAR,
    3436        KERNEL,
    3537        FUNCTION,       
    36         STREAM, // TODO - remove
    3738        STRUCT,
     39        INT,
    3840        VOID,
     41        BOOL,
    3942        BITFIELD        "BitField",     
    40         BITBLOCK        "BitBlock", // alias for architecture dependent SIMD instruction width
    41         //BLOCKMODE,
     43        BITBLOCK        "BitBlock", // alias for architecture dependent SIMD type
     44        //CODEBLOCK,
    4245        IF,
    4346        ELSE,
     
    6063
    6164interfaces {
    62 //       escapable {boolean escaped = false;},
    63          intValued {int value = 0;},
    64          
     65         intValued {int value = 0;},     
    6566}
    6667
     
    6970        funcCall {} [funcCallRest],
    7071        idisaFuncCall {} [idisaFuncCallRest],
    71         integerConstant{intValued;} [],
    72         streamConstant{intValued;} [],
     72        integerConstant{intValued;} [fieldWidthSpecifier ], // codeBlockWidthSpecifier ],
     73        // primitiveType{} [intType voidType boolType bitBlockType],  // TODO - update S2B to handle this
     74        fieldWidthType{int fieldWidth = 1;} [],
     75        // codeBlockWidth{int codeBlockWidth = 128;} [],
    7376}
    7477
    7578grammar {
    76         program         -> (typeDecl | kernelDef) * ;
    7779       
     80        program         -> (structDecl | kernelDef) * ;
     81           
    7882        //
    79         // d e c l a r a t i o n s
     83        // s t r u c t   d e c l a r a t i o n s
    8084        //
    81         // Decls                -> typeDecl TERMINATOR ;
    82         typeDecl                ->  type TERMINATOR ;           
     85        structDecl                      ->  STRUCT structName structDeclBody TERMINATOR? ;
     86        structDeclBody          ->      LCURLY (structMember TERMINATOR)+ RCURLY ;
     87        structMember            ->      structMemberType structMemberName ;
     88        structMemberType        #-> structType | bitBlockType ;
     89        structMemberName        #-> identifier ;
    8390   
    8491    //
    8592        // k e r n e l   d e c l a r a t i o n s                                                       
    8693        //
    87         kernelDef                       ->      KERNEL kernelName LCURLY initDef funcDef (optFuncDef)* expr TERMINATOR? RCURLY TERMINATOR? ; // TODO - hack - stick CarryDeclare at end for now
     94        kernelDef                       ->      KERNEL kernelName LCURLY initDef funcDef (optFuncDef)? expr TERMINATOR RCURLY TERMINATOR? ; // TODO - hack - stick CarryDeclare at end for now
    8895        kernelName                      #-> identifier ;
    8996       
     
    93100        initDef                         ->  INIT initBlock TERMINATOR? ;
    94101        initBlock                       #-> LCURLY (stateInitStmt)* RCURLY;
    95         stateInitStmt           ->  stateIdentifier LSQUARE stateSize RSQUARE ASSIGN LCURLY stateInitList RCURLY TERMINATOR?;
     102        stateInitStmt           ->  stateIdentifier LSQUARE stateSize RSQUARE ASSIGN LCURLY stateInitList RCURLY TERMINATOR?; // TODO - array node
    96103        stateIdentifier         ->  IDENTIFIER ;
    97104        stateSize                       ->  integerConstant ;
    98         stateInitList           ->      integerConstant (COMMA integerConstant)* ; // a carry constant of uintN type
     105        stateInitList           ->      integerConstant (COMMA integerConstant)* ; // a carry constant of uintN type, TODO - array init list
    99106        stateValue                      ->  integerConstant ;
    100107
     
    112119
    113120        //
    114         // c o d e   b l o c k // (32,64,128,256,...)
     121        // c o d e   b l o c k  // (32,64,128,256,...)
    115122        //
    116         // BLOCKMODE  (LANGLE fieldWidth RANGLE) blockStmt (TERMINATOR)? ;
     123        // codeBlock                    ->              CODEBLOCK codeBlockWidthSpecifier!      { @codeBlockWidth = @:value; }
     124        //                                                                                                                                      blockStmt (TERMINATOR)? ;
     125        //                             
     126        // codeBlockWidthSpecifier      #->     (LANGLE integerConstant RANGLE ) | (epsilon {@value = 128;}) ;
    117127               
    118128        //
    119129        // s t a t e m e n t s
    120130        //
    121         stmt                                    #-> (funcCallOrAssignStmt | ifStmt | whileStmt | returnStmt | localVarDecl) (TERMINATOR)? ;
    122         funcCallOrAssignStmt    #-> expr ( (idisaFuncCallRest _promote_) | (funcCallRest _promote_) | (assignRest _promote_)) TERMINATOR ;
    123         funcCallRest                    -> LROUND^ funcCallArgList RROUND ;
    124         funcCallArgList                 -> (expr (COMMA expr)*)? ;
    125         idisaFuncCallRest               -> LANGLE^ fieldWidth RANGLE LROUND idisaFuncCallArgList RROUND;
     131        stmt                                    #->     localVarDecl | funcCallOrAssignStmt | ifStmt | whileStmt | returnStmt  ;
     132        funcCallOrAssignStmt    #-> expr (assignRest _promote_) ? TERMINATOR ; // add SA to validate expr is a function call   
    126133        idisaFuncCallArgList    ->  (expr (COMMA expr)*)? ;
    127         assignOperator                  -> ASSIGN;                             
    128         assignRest                              -> assignOperator^! expr ;                             
    129         ifStmt                                  -> IF LROUND expr RROUND blockStmt (ELSE blockStmt)? ;                 
    130         whileStmt                               -> WHILE LROUND expr RROUND blockStmt ;
    131         returnStmt                              -> RETURN (expr)? TERMINATOR ;
    132         localVarDecl                    -> VAR type varName (assignOperator^! expr) ? ;
    133         varName                                 #-> identifier ;
    134         blockStmt                               -> LCURLY stmt* RCURLY ;
     134        assignOperator                  ->      ASSIGN;                                 
     135        assignRest                              ->      assignOperator^! expr ;                         
     136        ifStmt                                  ->      IF LROUND expr RROUND blockStmt (ELSE blockStmt)? ;                     
     137        whileStmt                               ->      WHILE LROUND expr RROUND blockStmt ;
     138        returnStmt                              ->      RETURN (expr)? TERMINATOR ;
     139        localVarDecl                    ->      type varName (assignOperator^! expr) ? TERMINATOR ;
     140        varName                                 #-> compoundIdentifier ;
     141        blockStmt                               ->      LCURLY stmt* RCURLY ;
    135142       
    136143        //
     
    138145        //     
    139146        expr            #-> LROUND expr RROUND
    140                                         |integerConstant
    141                                         | stringConstant
    142                                         | compoundIdentifier (funcCallRest _promote_ | idisaFuncCallRest _promote_)?
    143                                         ;
     147                                        | constant
     148                                        | compoundIdentifier ((funcCallRest _promote_) | (idisaFuncCallRest _promote_)) ? ;
    144149
    145         constant                                #->  stringConstant | integerConstant ; 
    146         integerConstant                 -> INTEGER_CONST {@value = @@value;} ;
    147         stringConstant                  -> STRING | SQ_STRING ;
    148         compoundIdentifier              #-> identifier (DOT^ identifier)* ;
    149         identifier                              -> IDENTIFIER ;   
    150        
     150        constant                                #->     stringConstant | integerConstant ; 
     151        integerConstant                 ->              INTEGER_CONST {@value = @@value;} ;
     152        stringConstant                  ->              STRING | SQ_STRING ;   
     153        compoundIdentifier              #->     identifier (DOT^ identifier)* ;
     154        identifier                              ->              IDENTIFIER ;   
     155        funcCallRest                    ->              LROUND^ funcCallArgList RROUND ;
     156        funcCallArgList                 ->              (expr (COMMA expr)*) ? ;       
     157        idisaFuncCallRest               ->              LANGLE^ fieldWidth RANGLE LROUND idisaFuncCallArgList RROUND;
     158        fieldWidth                              ->              integerConstant ; // TODO - update using PabloS style
     159
    151160    //   
    152161        // t y p e s
    153162        //
    154         type                    #->     identifier      |
    155                                                         voidType        |
    156                                                         streamType      | // TODO - update in PabloS2PabloB
    157                                                         structType      |
    158                                                         bitFieldType|
    159                                                         bitBlockType; // | tupleType;
     163        type                            #-> primitiveType      |
     164                                bitFieldType       |
     165                                                        structType             
     166                                                        ;
     167       
     168        primitiveType           #->  ( intType | voidType | boolType | bitBlockType ) ;
    160169
    161         streamType              ->      STREAM (LANGLE fieldWidth RANGLE) ;     
    162         fieldWidth              ->  integerConstant ;   
    163         streamTypeName  #->     identifier ;                           
    164         bitFieldType    -> BITFIELD ; // Power-of-2 bit field
    165         bitBlockType    -> BITBLOCK ; // SIMD vector
     170        intType                         ->      INT ;           // { @type = {{PrimitiveType.INTEGER}}; } ;
     171        voidType                        ->  VOID ;              // { @type = {{PrimitiveType.VOID}}; } ;
     172        boolType                        ->  BOOL ;              // { @type = {{PrimitiveType.BOOL}}; } ;
     173        bitBlockType            ->      BITBLOCK ;  // { @type = {{PrimitiveType.BITBLOCK}}; } ;
    166174       
    167         structType                              ->      STRUCT structName (structTypeBody)? ;           
    168         structName                              #->  identifier ;                               
    169         structTypeBody                  ->      LCURLY structMember TERMINATOR (structMember TERMINATOR)* RCURLY;
    170         structMember                    ->      type structMemberName ;
    171         structMemberName                #-> identifier ;
    172         voidType                                -> VOID ;
     175        bitFieldType            ->      BITFIELD  fieldWidthSpecifier! {        @fieldWidth = @:value;
     176                                                                                                                                // @type = {{ new BitFieldType(%?) }} , @fieldWidth ;
     177                                                                                                                } ;
     178                                                                                                                       
     179        fieldWidthSpecifier     #-> (LANGLE integerConstant RANGLE ) | (epsilon {@value = 1;}) ;       
     180       
     181        structType                      ->      STRUCT structName ;             
     182        structName                      #-> identifier ;                               
    173183       
    174184}
Note: See TracChangeset for help on using the changeset viewer.