Changeset 3805


Ignore:
Timestamp:
Apr 11, 2014, 1:37:40 AM (4 years ago)
Author:
ksherdy
Message:

Added foreach statement to grammar.

File:
1 edited

Legend:

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

    r3797 r3805  
    4949        ELSE,
    5050        WHILE,
     51        FOREACH,
    5152        RETURN,
    5253        AND             "&",
     
    9798    unaryOperator           {hasSignature;} [expr2],
    9899    funcCall                {hasSignature;} [funcCallRest],
    99 //  parameterizedFuncCall   {hasSignature;} [idisaFuncCallRest],
     100    idisaFuncCall           {hasSignature;} [idisaFuncCallRest],
    100101    assign                  {} [assignRest],
    101102    streamType              {hasFieldWidth;} [],
     
    182183  //elementName   #-> identifier ;
    183184
     185    foreach                     ->  FOREACH LROUND foreachIndexStreamList RROUND IN LROUND foreachMarkerStreamList RROUND blockStmt ;
     186    foreachIndexStreamList      ->  foreachIndexStream ; // foreachIndexStream ( COMMA foreachIndexStream ) * ;
     187    foreachIndexStream          ->  streamType foreachIndexStreamName ;
     188    foreachIndexStreamName      #-> identifier ;
     189    foreachMarkerStreamList     ->  foreachMarkerStreamName ; // expr ( COMMA expr )*  ;
     190    foreachMarkerStreamName     #-> identifier ;
     191
    184192  //annotationStmt    -> AMPERSAND annotationName LROUND annotationArgList RROUND blockStmt TERMINATOR ;
    185193  //annotationArgList -> (expr (COMMA expr)*) ?   
     
    195203    expr5       #-> LROUND expr RROUND
    196204                | constant
    197                 | compoundIdentifier (funcCallRest _promote_) ? ; // | compoundIdentifier ((funcCallRest _promote_) | (parameterizedFuncCallRest _promote_)) ? ;
    198 
    199 // fieldWidthSpecifier
    200 
    201 //    parameterizedFuncCallRest         ->      LANGLE fieldWidth RANGLE LROUND idisaFuncCallArgList RROUND;
    202 //    fieldWidth                        #->     (LANGLE integer RANGLE ) ;   
    203                                                                                                                                    
     205                | compoundIdentifier ((funcCallRest _promote_) | (idisaFuncCallRest _promote_)) ? ;
     206
    204207    constant                #-> stringConstant | integerConstant ;
    205208    integerConstant         ->  INTEGER_CONST {@value = @@value;} ;
     
    209212    funcCallRest            ->  LROUND^ funcCallArgList RROUND ;
    210213    funcCallArgList         ->  (expr (COMMA expr)*) ? ;     
    211 
    212 // TODO - idisa function call simd.popcount<>(); -> simd.popcount<128>() + ... + simd.popcount<128>()
    213 //
    214 //        package.name - if 'esimd' then ...
    215 //
     214    idisaFuncCallRest   ->      LANGLE^ fieldWidth RANGLE LROUND idisaFuncCallArgList RROUND ;
     215    idisaFuncCallArgList    ->  (expr (COMMA expr)*) ? ;
     216    fieldWidth          ->      integerConstant ;
    216217
    217218    //
Note: See TracChangeset for help on using the changeset viewer.