Ignore:
Timestamp:
Mar 16, 2014, 3:51:19 PM (5 years ago)
Author:
ksherdy
Message:

Updated PabloJ to s2k.

File:
1 moved

Legend:

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

    r3682 r3699  
    22// Tom Shermer, Ken Herdy
    33//
    4 // PabloB - Block-at-a-time IR / language
     4// b2k - Very high-level IR for the expression of block-by-block stream processing.
    55//
    6 // Modified:    02-12-2012      Original definition.
    7 //                      29-03-2013      Added IDISA function call.
    8 //                              06-04-2013      Updated to Scatter with types.
     6// Modified:    02-12-2012      Original definition.
     7//              29-03-2013      Added IDISA function call.
     8//              06-04-2013      Updated to Scatter with types.
    99//
    1010
    1111types {
    12 //      toolchain.pabloS.lang.type.Type,
    13 //      toolchain.pabloS.lang.type.PrimitiveType,
    14 //      toolchain.pabloS.lang.type.StreamType,
     12//    toolchain.s2k.lang.type.Type,
     13//    toolchain.s2k.lang.type.PrimitiveType,
     14//    toolchain.s2k.lang.type.StreamType,
    1515}
    1616
    1717context main {
    18   recognizers {
    19          Whitespace [IGNORE],
    20          Integer [INTEGER_CONST],
    21          Identifier [IDENTIFIER],                       // Java identifiers. Produces Lextant Tokens for keywords.
    22          Comment [IGNORE] "#" "\n",                     // parabix2_pablo debugging only.
    23          Comment [IGNORE] "//" "\n",     
    24          Comment [SQ_STRING] "'" "'",
    25          Comment [IGNORE] "/*" "*/",            // Comment. Comment [STRING] "/*" "*/",
    26          String [STRING],
    27          Punctuator,
    28          EndOfInput,
    29   }
     18    recognizers {
     19       Whitespace [IGNORE],
     20       Integer [INTEGER_CONST],
     21        Identifier [IDENTIFIER],        // Java identifiers. Produces Lextant Tokens for keywords.
     22        Comment [IGNORE] "#" "\n",      // parabix2_pablo debugging only.
     23        Comment [IGNORE] "//" "\n",
     24       Comment [SQ_STRING] "'" "'",
     25        Comment [IGNORE] "/*" "*/",     // Comment. Comment [STRING] "/*" "*/",
     26       String [STRING],
     27       Punctuator,
     28       EndOfInput,
     29    }
    3030
    31   // t o k e n s
    32   tokens {
    33         INIT,
    34         KERNEL,
    35         FUNCTION,       
    36         STRUCT,
    37         INT,
    38         VOID,
    39         BOOL,
    40         BITFIELD        "BitField",     
    41         BITBLOCK        "BitBlock", // alias for architecture dependent SIMD type
    42         //CODEBLOCK,
    43         IF,
    44         ELSE,
    45         WHILE,
    46         RETURN,
    47         ASSIGN      "=",
    48         LANGLE          "<",
    49         RANGLE          ">",
    50         LCURLY          "{",
    51         RCURLY          "}",
    52         LROUND          "(",
    53         RROUND          ")",
    54         LSQUARE         "[",
    55         RSQUARE         "]",
    56         COMMA           ",",
    57         TERMINATOR  ";",
    58         DOT                     ".",
    59   }
     31    // t o k e n s
     32    tokens {
     33        INIT,
     34        KERNEL,
     35        FUNCTION,   
     36        STRUCT,
     37        INT,
     38        VOID,
     39        BOOL,
     40        BITFIELD    "BitField",
     41        BITBLOCK    "BitBlock", // alias for architecture dependent SIMD type
     42        //CODEBLOCK,
     43        IF,
     44        ELSE,
     45        WHILE,
     46        RETURN,
     47        ASSIGN      "=",
     48        LANGLE      "<",
     49        RANGLE      ">",
     50        LCURLY      "{",
     51        RCURLY      "}",
     52        LROUND      "(",
     53        RROUND      ")",
     54        LSQUARE     "[",
     55        RSQUARE     "]",
     56        COMMA       ",",
     57        TERMINATOR  ";",
     58        DOT         ".",
     59    }
    6060}
    6161
    6262interfaces {
    63          intValued {int value = 0;},     
     63    intValued {int value = 0;},
    6464}
    6565
    6666nodes {
    67         assign {} [assignRest],
    68         funcCall {} [funcCallRest],
    69         idisaFuncCall {} [idisaFuncCallRest],
    70         integerConstant{intValued;} [fieldWidthSpecifier ], // codeBlockWidthSpecifier ],
    71         // primitiveType{} [intType voidType boolType bitBlockType], // TODO - update S2B to handle this
    72         fieldWidthType{int fieldWidth = 1;} [],
    73         // codeBlockWidth{int codeBlockWidth = 128;} [],
     67    assign {} [assignRest],
     68    funcCall {} [funcCallRest],
     69    idisaFuncCall {} [idisaFuncCallRest],
     70    integerConstant{intValued;} [fieldWidthSpecifier ], // codeBlockWidthSpecifier ],
     71    // primitiveType{} [intType voidType boolType bitBlockType], // TODO - update S2B to handle this
     72    fieldWidthType{int fieldWidth = 1;} [],
     73    // codeBlockWidth{int codeBlockWidth = 128;} [],
    7474}
    7575
    7676grammar {
    77        
    78         program         -> (structDecl | kernelDef) * ;
    79            
    80         //
    81         // s t r u c t   d e c l a r a t i o n s 
    82         //
    83         structDecl                      ->  STRUCT structName structDeclBody TERMINATOR? ;
    84         structDeclBody          ->      LCURLY (structMember TERMINATOR)+ RCURLY ;
    85         structMember            ->      structMemberType structMemberName ;
    86         structMemberType        #-> structType | bitBlockType ;
    87         structMemberName        #-> identifier ;
     77   
     78    program     -> (structDecl | kernelDef) * ;
    8879   
    8980    //
    90         // k e r n e l   d e c l a r a t i o n s                                                       
    91         //
    92         kernelDef                         ->    KERNEL kernelName LCURLY initDef funcDef (optFuncDef)? expr TERMINATOR RCURLY TERMINATOR? ; // KH: TODO - a temporary hack that appends a CarryDeclare node
    93         kernelName                      #-> identifier ;
    94        
    95         //
    96         // k e r n e l   p r o p e r t i e s 
    97         //
    98         initDef                           #->  INIT LCURLY kernelProperty* RCURLY TERMINATOR? ;
    99         kernelProperty  ->  propertyName ASSIGN propertyValue TERMINATOR ;
    100         propertyName            #-> identifier ;
    101         propertyValue           ->      LSQUARE integerConstant (COMMA integerConstant)* RSQUARE ;
     81    // s t r u c t   d e c l a r a t i o n s 
     82    //
     83    structDecl          ->  STRUCT structName structDeclBody TERMINATOR? ;
     84    structDeclBody      ->  LCURLY (structMember TERMINATOR)+ RCURLY ;
     85    structMember        ->  structMemberType structMemberName ;
     86    structMemberType    #-> structType | bitBlockType ;
     87    structMemberName    #-> identifier ;
    10288
    103         //     
    104         // k e r n e l   f u n c t i o n s
    105         //
    106         funcDef                           ->    FUNCTION returnType funcName LROUND parameterList? RROUND basicBlockStmt TERMINATOR? ;
    107         returnType                      #-> type ;      // KH: TODO - Not required. Planned move to in/out parameters.
    108         parameterList           ->      parameter (COMMA parameter)* ;
    109         funcName                          #-> identifier ;
    110         parameter                         ->    type parameterName ;
    111         parameterName           #-> identifier ;
    112         basicBlockStmt  #-> blockStmt ;
    113         optFuncDef                      #-> funcDef ;
     89    //
     90    // k e r n e l   d e c l a r a t i o n s
     91    //
     92    kernelDef           ->     KERNEL kernelName LCURLY initDef funcDef (optFuncDef)? expr TERMINATOR RCURLY TERMINATOR? ; // KH: TODO - a temporary hack that appends a CarryDeclare node
     93    kernelName          #-> identifier ;
    11494
    115         //
    116         // c o d e   b l o c k  // (32,64,128,256,...)
    117         //
    118         // codeBlock                    ->              CODEBLOCK codeBlockWidthSpecifier!      { @codeBlockWidth = @:value; }
    119         //                                                                                                                                      blockStmt (TERMINATOR)? ;
    120         //                             
    121         // codeBlockWidthSpecifier      #->     (LANGLE integerConstant RANGLE ) | (epsilon {@value = 128;}) ;
    122                
    123         //
    124         // s t a t e m e n t s
    125         //
    126         stmt                                    #->     varDecl | funcCallOrAssignStmt | ifStmt | whileStmt | returnStmt  ;
    127         funcCallOrAssignStmt    #-> expr (assignRest _promote_) ? TERMINATOR ; // KH: TODO Add Semantic Analysis pass to validate expr non-terminal is of function call node type       
    128         idisaFuncCallArgList    ->  (expr (COMMA expr)*) ? ;
    129         assignOperator                  ->      ASSIGN ;                               
    130         assignRest                                ->    assignOperator^! expr ;                         
    131         ifStmt                                      ->  IF LROUND expr RROUND blockStmt (ELSE blockStmt)? ;                     
    132         whileStmt                                   ->  WHILE LROUND expr RROUND blockStmt ;
    133         returnStmt                                ->    RETURN (expr) ? TERMINATOR ;
    134         varDecl                                   ->    type varName TERMINATOR ;
    135         varName                                     #-> identifier ;
    136         blockStmt                                   ->  LCURLY stmt* RCURLY ;
    137        
    138         //
    139         // e x p r e s s i o n s
    140         //     
    141         expr            #-> LROUND expr RROUND
    142                                         | constant
    143                                         | compoundIdentifier ((funcCallRest _promote_) | (idisaFuncCallRest _promote_)) ? ;
     95    //
     96    // k e r n e l   p r o p e r t i e s 
     97    //
     98    initDef             #-> INIT LCURLY kernelProperty* RCURLY TERMINATOR? ;
     99    kernelProperty      ->  propertyName ASSIGN propertyValue TERMINATOR ;
     100    propertyName        #-> identifier ;
     101    propertyValue       ->  LSQUARE integerConstant (COMMA integerConstant)* RSQUARE ;
    144102
    145         constant                                  #->   stringConstant | integerConstant ; 
    146         integerConstant                 ->              INTEGER_CONST {@value = @@value;} ;
    147         stringConstant                  ->              STRING | SQ_STRING ;   
    148         compoundIdentifier      #->     identifier (DOT^ identifier)* ;
    149         identifier                                ->            IDENTIFIER ;   
    150         funcCallRest                      ->            LROUND^ funcCallArgList RROUND ;
    151         funcCallArgList                 ->              (expr (COMMA expr)*) ? ;       
    152         idisaFuncCallRest               ->              LANGLE^ fieldWidth RANGLE LROUND idisaFuncCallArgList RROUND;
    153         fieldWidth                                ->            integerConstant ; // fieldWidthSpecifier
     103    //
     104    // k e r n e l   f u n c t i o n s
     105    //
     106    funcDef             ->  FUNCTION returnType funcName LROUND parameterList? RROUND basicBlockStmt TERMINATOR? ;
     107    returnType          #-> type ; // KH: TODO - Not required. Add in/out parameter specifiers.
     108    parameterList       ->  parameter (COMMA parameter)* ;
     109    funcName            #-> identifier ;
     110    parameter           ->  type parameterName ;
     111    parameterName       #-> identifier ;
     112    basicBlockStmt      #-> blockStmt ;
     113    optFuncDef          #-> funcDef ;
    154114
    155   //   
    156         // t y p e s
    157         //
    158         type                            #-> primitiveType  |
    159                     bitFieldType       |
    160                                                         structType             
    161                                                         ; 
    162        
    163         primitiveType           #->  ( intType | voidType | boolType | bitBlockType ) ;
     115    //
     116    // c o d e   b l o c k     // (32,64,128,256,...)
     117    //
     118    // codeBlock        ->  CODEBLOCK codeBlockWidthSpecifier! 
     119    //                      { @codeBlockWidth = @:value; }
     120    //                      blockStmt (TERMINATOR)? ;
     121    //               
     122    // codeBlockWidthSpecifier  #-> (LANGLE integerConstant RANGLE ) | (epsilon {@value = 128;}) ;
    164123
    165         intType                         ->      INT ;             // { @type = {{PrimitiveType.INTEGER}}; } ;
    166         voidType                          ->  VOID ;                // { @type = {{PrimitiveType.VOID}}; } ;
    167         boolType                          ->  BOOL ;                // { @type = {{PrimitiveType.BOOL}}; } ;
    168         bitBlockType            ->      BITBLOCK ;  // { @type = {{PrimitiveType.BITBLOCK}}; } ;
    169        
    170         bitFieldType            ->      BITFIELD  fieldWidthSpecifier! {        @fieldWidth = @:value;
    171                                                                                                                                   // @type = {{ new BitFieldType(%?) }} , @fieldWidth ;
    172                                                                                                                 } ;
    173                                                                                                                        
    174         fieldWidthSpecifier     #-> (LANGLE integerConstant RANGLE ) | (epsilon {@value = 1;}) ;       
    175        
    176         structType                      ->      STRUCT structName ;             
    177         structName                      #-> identifier ;                               
    178        
     124    //
     125    // s t a t e m e n t s
     126    //
     127    stmt                    #-> varDecl | funcCallOrAssignStmt | ifStmt | whileStmt | returnStmt  ;
     128    funcCallOrAssignStmt    #-> expr (assignRest _promote_) ? TERMINATOR ; // KH: TODO Add Semantic Analysis pass to validate expr non-terminal is of function call node type   
     129    idisaFuncCallArgList    ->  (expr (COMMA expr)*) ? ;
     130    assignOperator          ->  ASSIGN ;                 
     131    assignRest              ->  assignOperator^! expr ;               
     132    ifStmt                  ->  IF LROUND expr RROUND blockStmt (ELSE blockStmt)? ;             
     133    whileStmt               ->  WHILE LROUND expr RROUND blockStmt ;
     134    returnStmt              ->  RETURN (expr) ? TERMINATOR ;
     135    varDecl                 ->  type varName TERMINATOR ;
     136    varName                 #-> identifier ;
     137    blockStmt               ->  LCURLY stmt* RCURLY ;
     138
     139    //
     140    // e x p r e s s i o n s
     141    //   
     142    expr            #-> LROUND expr RROUND
     143                    | constant
     144                    | compoundIdentifier ((funcCallRest _promote_) | (idisaFuncCallRest _promote_)) ? ;
     145
     146    constant            #->     stringConstant | integerConstant ;
     147    integerConstant     ->      INTEGER_CONST {@value = @@value;} ;
     148    stringConstant      ->      STRING | SQ_STRING ;
     149    compoundIdentifier  #->     identifier (DOT^ identifier)* ;
     150    identifier          ->      IDENTIFIER ;
     151    funcCallRest        ->      LROUND^ funcCallArgList RROUND ;
     152    funcCallArgList     ->      (expr (COMMA expr)*) ? ;
     153    idisaFuncCallRest   ->      LANGLE^ fieldWidth RANGLE LROUND idisaFuncCallArgList RROUND;
     154    fieldWidth          ->      integerConstant ; // fieldWidthSpecifier
     155
     156    //
     157    // t y p e s
     158    //
     159    type                #-> primitiveType   |
     160                            bitFieldType    |
     161                            structType ;
     162
     163    primitiveType       #->  ( intType | voidType | boolType | bitBlockType ) ;
     164
     165    intType             ->  INT ;       // { @type = {{PrimitiveType.INTEGER}}; } ;
     166    voidType            ->  VOID ;      // { @type = {{PrimitiveType.VOID}}; } ;
     167    boolType            ->  BOOL ;      // { @type = {{PrimitiveType.BOOL}}; } ;
     168    bitBlockType        ->  BITBLOCK ;  // { @type = {{PrimitiveType.BITBLOCK}}; } ;
     169   
     170    bitFieldType        ->  BITFIELD  fieldWidthSpecifier!
     171                                            {   @fieldWidth = @:value;
     172                                            // @type = {{ new BitFieldType(%?) }} , @fieldWidth ;
     173                                            } ;
     174
     175    fieldWidthSpecifier    #-> (LANGLE integerConstant RANGLE )
     176                            | (epsilon {@value = 1;}) ;
     177   
     178    structType              ->  STRUCT structName ;
     179    structName              #-> identifier ;
     180   
    179181}
Note: See TracChangeset for help on using the changeset viewer.