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/pabloS.scatter

    r3166 r3192  
     1//
     2// Tom Shermer, Ken Herdy
    13//
    24// PabloS - Parallel Stream Language 
    35//
    4 // A tiny language for the definition of stream structures, functions, and types.
     6// A tiny language for the definition of stream structures and stream functions.
    57//
    6 // Author:                      Ken Herdy <ksherdy at sfu dot ca>
    7 // Created:             2012/09/08
    8 // Last Changed:        2013/02/01
    9 //
    10 // History:                     2012/09/08 Initial definition.
     8// Modified:            2012/09/08 Original definition.
    119//                                             
    1210
     
    3432  // t o k e n s
    3533  tokens {
    36 //      VAR,
    3734        FUNCTION,       
    3835        STREAM,
    3936        STRUCT,
    40 //      TUPLE,
    4137        VOID,
    4238        INT,
    43 //      STRING,
    4439        IF,
    4540        ELSE,
     
    6661        LCURLY          "{",
    6762        RCURLY          "}",
    68 //      LSQUARE         "[",
    69 //      RSQUARE         "]",
    7063        LROUND          "(",
    7164        RROUND          ")",
     
    8780  assign {} [assignRest],
    8881  funcCall {} [funcCallRest],
    89   // streamCall {} [streamCallRest],
    9082  integerConstant{intValued;} [fieldWidthSpecifier],
    91   primitiveType{} [intType voidType],
     83  // primitiveType{} [intType voidType], // TODO - update S2B to handle this
    9284  streamType{int fieldWidth = 1;} [],
    9385}
    9486
    9587grammar {
     88
    9689        program         -> (structDecl | funcDef) *;                   
    9790
     
    9992        // s t r e a m   s t r u c t   d e c l a r a t i o n s 
    10093        //
    101         structDecl                      ->  STRUCT structName structTypeBody TERMINATOR? ;
    102         structTypeBody          ->      LCURLY (structMember TERMINATOR)+ RCURLY ;
     94        structDecl                      ->  STRUCT structName structDeclBody TERMINATOR? ;
     95        structDeclBody          ->      LCURLY (structMember TERMINATOR)+ RCURLY ;
    10396        structMember            ->      structMemberType structMemberName ;
    10497        structMemberType        #-> structType | streamType ;
     
    120113        stmt                                    #->     localVarDecl | funcCallOrAssignStmt | ifStmt | whileStmt | returnStmt  ;
    121114        blockStmt                               ->      LCURLY stmt* RCURLY ;
    122         localVarDecl                    ->      type varName (ASSIGN^ expr) ? TERMINATOR;
     115        localVarDecl                    ->      type varName (ASSIGN^ expr) ? TERMINATOR ;
    123116        varName                                 #-> compoundIdentifier ;
    124         funcCallOrAssignStmt    #-> expr (assignRest _promote_)? TERMINATOR ;
     117        funcCallOrAssignStmt    #-> expr (assignRest _promote_) ? TERMINATOR ; // add SA to validate expr is a function call
    125118        assignRest                              ->      assignOperator^! expr ;
    126119        assignOperator                  ->      ASSIGN | AND_ASSIGN | OR_ASSIGN | XOR_ASSIGN |
     
    128121        ifStmt                                  ->  IF LROUND expr RROUND blockStmt (ELSE blockStmt)? ;                                                 
    129122        whileStmt                               ->      WHILE LROUND expr RROUND blockStmt ;
    130         returnStmt                              ->      RETURN (expr)? TERMINATOR;
     123        returnStmt                              ->      RETURN (expr)? TERMINATOR ;
    131124
    132125        //
    133126        // e x p r e s s i o n s
    134127        //     
    135         expr    #->     expr1 ((OR^|XOR^) expr)?  _leftAssoc_ ;
    136         expr1   #-> expr2 ((AND^) expr1)?  _leftAssoc_ ;
     128        expr    #->     expr1 ((OR^|XOR^) expr)? _leftAssoc_ ;
     129        expr1   #-> expr2 ((AND^) expr1)? _leftAssoc_ ;
    137130        expr2   #-> NOT^^? expr3;
    138131        expr3   #-> expr4 ((MULTIPLY^ | DIVIDE^) expr3)? _leftAssoc_ ;
    139132        expr4   #-> expr5 ((ADD^ | SUBTRACT^) expr4)? _leftAssoc_ ;
    140133        expr5   #-> LROUND expr RROUND
    141                                         | stringConstant
    142                                         | integerConstant
    143                                         | compoundIdentifier (funcCallRest _promote_)?
     134                                        | constant
     135                                        | compoundIdentifier (funcCallRest _promote_) ?
    144136                                        ;
    145137                                                                                                                                                                                                                                                                       
    146138        constant                                #-> stringConstant | integerConstant ;
    147         integerConstant                 -> INTEGER_CONST {@value = @@value;} ;
    148         stringConstant                  -> STRING | SQ_STRING ;
     139        integerConstant                 ->      INTEGER_CONST {@value = @@value;} ;
     140        stringConstant                  ->      STRING | SQ_STRING ;   
    149141        compoundIdentifier              #-> identifier (DOT^ identifier)*;
    150         identifier                              -> IDENTIFIER ;
    151     funcCallRest                        -> LROUND^ funcCallArgList RROUND ;
    152         funcCallArgList                 -> (expr (COMMA expr)*) ? ;     
     142        identifier                              ->      IDENTIFIER ;
     143    funcCallRest                        ->      LROUND^ funcCallArgList RROUND ;
     144        funcCallArgList                 ->      (expr (COMMA expr)*) ? ;       
    153145               
    154         // streamCallRest                       -> LANGLE^ fieldWidth RANGLE LROUND idisaCallArgList RROUND;
    155         // streamCallArgList            -> (expr (COMMA expr)*)? ;             
    156      
    157            
    158146    //   
    159147        // t y p e s
     
    163151                                                                structType              ;
    164152
    165         primitiveType           #-> ( intType | voidType ) ;
    166         intType                         -> INT    { @type = {{PrimitiveType.INTEGER}};  } ;
    167         voidType                        -> VOID   { @type = {{PrimitiveType.VOID}}; } ;
     153        primitiveType           #->     ( intType | voidType ) ;
     154        intType                         ->              INT    { @type = {{PrimitiveType.INTEGER}};  } ;
     155        voidType                        ->              VOID   { @type = {{PrimitiveType.VOID}}; } ;
    168156
    169         streamType                      ->      STREAM fieldWidthSpecifier! {   @fieldWidth = @:value;
    170                                                                                                                         @type = {{ new StreamType(%?) }} , @fieldWidth ;
    171                                                                                                         } ;
     157        streamType                      ->              STREAM fieldWidthSpecifier! {   @fieldWidth = @:value;
     158                                                                                                                                @type = {{ new StreamType(%?) }} , @fieldWidth ;
     159                                                                                                                } ;
    172160                                       
    173         fieldWidthSpecifier     #->  (LANGLE integerConstant RANGLE ) | (epsilon {@value = 1;}) ;       
    174         structType                      ->      STRUCT structName ;             
    175         structName                      #->  identifier ;                               
    176        
    177         //      tupleType                               ->      tupleTypeSpecifier (LROUND tupleTypeBody RROUND)? ;
    178         //      tupleTypeSpecifier              ->      TUPLE tupleName ;       
    179         //      tupleTypeBody                   ->  type (COMMA type)* ;                                 
    180         //      tupleName                               #->  identifier ;
     161        fieldWidthSpecifier     #->     (LANGLE integerConstant RANGLE ) | (epsilon {@value = 1;}) ;   
     162        structType                      ->              STRUCT structName ;             
     163        structName                      #->     identifier ;                           
    181164
    182165}
Note: See TracChangeset for help on using the changeset viewer.