Changeset 2361


Ignore:
Timestamp:
Sep 7, 2012, 2:41:32 PM (7 years ago)
Author:
ksherdy
Message:

Updated Pablo grammar and example program fragments.

Location:
proto/pablo/input
Files:
14 added
2 edited
1 copied

Legend:

Unmodified
Added
Removed
  • proto/pablo/input/grammar/scatter/pablo.scatter

    r2356 r2361  
    11//
    2 // Meta Symbols
     2// Ken Herdy
     3// Sept. 8 2012
     4//
     5// (1) typedefs not supported.
     6// (2) Local type declarations supported.
    37//
    4 // #                    - Compress node.
    5 // _promote_    - Promote children to parent node.
    6 // ^                    - Up.
    7 // !                    - Omit node.
    8 //
    9 //
    10 
    118context main {
    129  recognizers {
    1310         Whitespace [IGNORE],
    1411         Integer [INTEGER_CONST],
    15          Identifier [IDENTIFIER],                               // Java identifiers. Produces Lextant Tokens for keywords.
    16 //       Comment [IGNORE] "#" "\n",
    17 //       Comment [SQ_STRING] "'" "'",
    18          Comment [IGNORE] "/***" "***/",                // comment for grammar debugging
     12         Identifier [IDENTIFIER],                       // Java identifiers. Produces Lextant Tokens for keywords.
     13         Comment [IGNORE] "#" "\n",                     // parabix2_pablo debugging only.
     14         Comment [IGNORE] "//" "\n",     
     15         Comment [SQ_STRING] "'" "'",
     16         Comment [IGNORE] "/*" "*/",            // Comment. Comment [STRING] "/*" "*/",
    1917         String [STRING],
    2018         Punctuator,
     
    2523  tokens {
    2624 
    27         TYPEDEF,
     25        // TYPEDEF,
    2826        FUNCTION,       
    2927        STREAM,
     
    3533        ELSE,
    3634        WHILE,
    37         DO,
    3835        RETURN,
    3936
     
    5855        TERMINATOR  ";",
    5956        DOT                     ".",
    60         SQUOTE          "'",
    61         // DQUOTE               "\"",
    6257  }
    6358}
     
    6863
    6964nodes {
    70 //  binaryOperator {} [expression, expression1, expression3],
    71 //  unaryOperator {} [expression2],
     65  binaryOperator {} [expression, expression1, expression3],
     66  unaryOperator {} [expression2],
    7267  assignment {} [assignmentStatementTail],
    7368//  ifStatement {} [ifStatementBulk],
    7469  functionCall {} [functionCallTail],
    75 //  ASTNode [assignmentOrFunctionInvocation, variableOrFunctionInvocation],
     70  tupleIdentifier {} [tupleTail],
     71  variableDefinition {} [variableDefinitionTail], // variable definitions
     72//  ASTNode [variableFunctionCall], //[assignmentOrFunctionInvocation, variableOrFunctionInvocation],
    7673}
    7774
    7875grammar {
    79         program         -> (typeDef)* (typeDecl)* (functionDef)* ;
    80        
    81         //             
     76        program         -> (typeDecl)* (functionDef)* ; // (typeDef)*
     77       
    8278        // t y p e   d e f i n i t i o n s                     
    8379        //
    84         typeDef         ->  TYPEDEF typeSpecifier identifier TERMINATOR ;
     80        // typeDef              ->  TYPEDEF (typeSpecifier | typeDecl) typeDefName TERMINATOR ? ;
     81    // typeDefName      #->  identifier ;
    8582   
    8683    //
    8784        // t y p e   d e c l a r a t i o n s             
    8885        //
    89         typeDecl        -> typeSpecifier TERMINATOR     ;   
    90    
     86        typeDecl        ->  (structTypeDecl | tupleTypeDecl) TERMINATOR ? ;
     87       
    9188    //
    9289        // f u n c t i o n   d e f i n i t i o n s                                                             
    9390        //
    94         functionDef             -> FUNCTION functionReturnTypeSpecifier functionName LROUND parameterList? RROUND blockStatement ;                             
     91        functionDef             -> FUNCTION functionReturnType functionName LROUND (parameter (COMMA parameter)*)? RROUND blockStatement TERMINATOR ?;                         
    9592                                                                               
    96         functionReturnTypeSpecifier     -> typeSpecifier | VOID ;
     93        functionReturnType      -> typeSpecifier | VOID ;
    9794                                                                                                               
    9895        functionName    #-> identifier ;
    9996                                                                                                                       
    100         parameterList   -> parameter (COMMA parameter)* ;
    101        
    10297        parameter               -> typeSpecifier parameterName ;
    10398                                       
    10499        parameterName   #-> identifier ;
    105100       
    106         blockStatement  -> LCURLY statementList RCURLY ;
    107        
    108         statementList   ->      statement*      ;
    109        
    110         //
    111         // s t a t e m e n t s
    112         //
    113         statement                       -> (variableDefinition | assignmentStatementOrFunctionCall | ifStatement | whileStatement | returnStatement) (TERMINATOR)?      ;
     101        blockStatement  -> LCURLY statement* RCURLY ;
     102               
     103        //
     104        // s t a t e m e n t s
     105        //
     106        statement                               #-> (variableDefinition | assignmentStatementOrFunctionCall | ifStatement | whileStatement | returnStatement) (TERMINATOR)?     ;
    114107                       
    115         variableDefinition      -> typeSpecifier variableName (assignmentOperator expression)? ;
    116                                        
    117         variableName            #-> identifier ;
    118        
     108        // variable definitions
     109        variableDefinition              ->  typeSpecifier variableDefinitionTail;
     110                       
     111        variableDefinitionTail  ->      variableName (assignmentOperator expression)? _promote_ ;
     112       
     113        variableName                    #-> identifier ;
     114                               
    119115        assignmentStatementOrFunctionCall -> compoundVariable (assignmentStatementTail _promote_ | functionCallTail _promote_) ;
    120116       
    121117        assignmentStatementTail -> assignmentOperator^! expression ;
    122118       
    123         functionCallTail        -> LROUND expressionList? RROUND ;
    124        
    125         compoundVariable        -> identifier (DOT identifier)* ;
     119        functionCallTail        -> LROUND (argumentList)? RROUND ;
     120       
     121        argumentList            -> expression (COMMA expression)* ;
     122
     123        compoundVariable        -> identifierOrTuple (DOT identifierOrTuple)*   ; 
     124        // compoundVariable -> identifier (LSQUARE index RSQUARE)? (DOT identifier (LSQUARE index RSQUARE)?)* ; // TODO - mixed identifier / tuple list ?
     125       
     126        identifierOrTuple       #-> identifier (tupleTail _promote_)?;
     127       
     128        tupleTail                       -> LSQUARE index RSQUARE ;
     129                                       
     130        index                           -> INTEGER_CONST ;     
    126131       
    127132        assignmentOperator      -> ASSIGN | AND_ASSIGN | OR_ASSIGN | NOT_ASSIGN | XOR_ASSIGN ;
    128133                                       
    129         ifStatement             -> IF LROUND expression RROUND blockStatement (ELSE blockStatement)? ;
     134        ifStatement             -> IF LROUND ifCondition RROUND ifBlock (ELSE elseBlock)? ;
     135       
     136        ifCondition             -> expression ;
     137       
     138        ifBlock                 -> blockStatement ;
     139       
     140        elseBlock               -> blockStatement ; // TODO - dangling else problems?
    130141                                               
    131         whileStatement  -> WHILE LROUND expression RROUND DO blockStatement     ;
    132        
    133         returnStatement -> RETURN identifier ; // return an expression ?
     142        whileStatement  -> WHILE LROUND whileCondition RROUND blockStatement ;
     143       
     144        whileCondition  -> expression ;
     145       
     146        returnStatement -> RETURN (identifier)? ; // TODO - return an expression
    134147       
    135148        //
    136149        // e x p r e s s i o n s
    137150        //
    138         expression              ->      expression1 ((OR|XOR) expression)? ;
    139                                        
    140         expression1             -> expression2 ((AND) expression1)?     ;
    141                                        
    142         expression2             -> (NOT)? expression3 ;
    143                                        
    144         expression3             -> LROUND expression RROUND
    145                                         | variableFunctionTuple
     151        expression              #->     expression1 ((OR^|XOR^) expression)? ;
     152                                       
     153        expression1             #-> expression2 ((AND^) expression1)?   ;
     154                                       
     155        expression2             #-> NOT^^? expression3 _leftAssoc_ ;
     156                                       
     157        expression3             #-> LROUND expression RROUND
     158                                        | variableFunctionCall
    146159                                        | constant ;
    147160                                       
    148         variableFunctionTuple   -> compoundVariable (functionTail | tupleTail)? ;
    149                                                
    150         functionTail                    -> LROUND expressionList? RROUND ;
    151                                        
    152         expressionList                  -> expression (COMMA expression)* ;
    153                                        
    154         tupleTail                               -> LSQUARE index RSQUARE ;
    155                                        
    156         index                                   ->      INTEGER_CONST ;                         
    157        
    158         constant                                ->      INTEGER_CONST // '-1' | '0' // 'AllOnes' | 'AllZeroes'
    159                                                         | SQUOTE string SQUOTE
    160                                                         // | DQUOTE string DQUOTE
    161                                                         ;
    162        
    163         string                  -> STRING ;
    164        
    165         identifier              -> IDENTIFIER ;
     161        variableFunctionCall    #-> compoundVariable (functionCallTail _promote_)? ;
     162                                                       
     163        constant                                -> STRING | SQ_STRING | INTEGER_CONST ; // '-1' | '0'
     164                                                       
     165        identifier                              -> IDENTIFIER ;
    166166       
    167167    //   
    168168        // t y p e s
    169169        //
    170         typeSpecifier                   #-> streamTypeSpecifier | structTypeSpecifier | tupleTypeSpecifier;// | identifier      ;
     170
     171        // s t r e a m
     172
     173        typeSpecifier                   ->  streamTypeSpecifier | structTypeSpecifier | tupleTypeSpecifier; // | identifier ; // no typedefs
    171174       
    172175        streamTypeSpecifier             ->      STREAM (LANGLE fieldWidth RANGLE)? ;   
    173176                                       
    174         fieldWidth                              ->  INTEGER_CONST ;                                     
    175                
    176         structTypeSpecifier             ->      STRUCT identifier (LCURLY structTypeSpecifierBody RCURLY)? ;
    177                                        
    178         structTypeSpecifierBody -> structMember TERMINATOR (structMember TERMINATOR)* ;
    179                                        
    180         structMember                    ->      typeSpecifier structMemberName ;
     177        fieldWidth                              ->  INTEGER_CONST ;     
     178       
     179        streamTypeName                  #->     identifier ;                           
     180               
     181        // s t r u c t 
     182               
     183        structTypeDecl                  ->      structTypeSpecifier LCURLY structTypeBody RCURLY ;
     184       
     185        structTypeSpecifier             ->      STRUCT structName ;
     186                                       
     187        structName                              #->  identifier ;                               
     188                                       
     189        structTypeBody                  ->      structMember TERMINATOR (structMember TERMINATOR)* ;
     190                                       
     191        structMember                    ->      (typeSpecifier | typeDecl) structMemberName ;
    181192       
    182193        structMemberName                #-> identifier ;
    183194       
    184         tupleTypeSpecifier              ->      TUPLE IDENTIFIER (LROUND typeSpecifier (COMMA typeSpecifier)* RROUND)? ;                               
    185                                
    186         identifier                              -> IDENTIFIER ;
    187 
    188 }
     195        // t u p l e
     196       
     197        tupleTypeDecl                   ->      tupleTypeSpecifier tupleTypeBody ;
     198       
     199        tupleTypeSpecifier              ->      TUPLE tupleName ;       
     200               
     201        tupleTypeBody                   ->  (LROUND (typeSpecifier | typeDecl) (COMMA  (typeSpecifier | typeDecl))* RROUND) ;                           
     202
     203        tupleName                               #->  identifier ;
     204
     205}
  • proto/pablo/input/grammar/scatter/pablo.scatter.alpha

    r2356 r2361  
    1 //
    21// Meta Symbols
    32//
     
    76// !                    - Omit node.
    87//
    9 //
    108
    119context main {
     
    1311         Whitespace [IGNORE],
    1412         Integer [INTEGER_CONST],
    15          Identifier [IDENTIFIER],                               // Java identifiers. Produces Lextant Tokens for keywords.
    16 //       Comment [IGNORE] "#" "\n",
    17 //       Comment [SQ_STRING] "'" "'",
    18          Comment [IGNORE] "/***" "***/",                // comment for grammar debugging
     13         Identifier [IDENTIFIER],                       // Java identifiers. Produces Lextant Tokens for keywords.
     14         Comment [IGNORE] "#" "\n",                     // parabix2_pablo debugging only.
     15         Comment [IGNORE] "//" "\n",     
     16         Comment [SQ_STRING] "'" "'",
     17         Comment [IGNORE] "/*" "*/",            // Comment. Comment [STRING] "/*" "*/",
    1918         String [STRING],
    2019         Punctuator,
     
    3534        ELSE,
    3635        WHILE,
    37         DO,
    3836        RETURN,
    3937
     
    5856        TERMINATOR  ";",
    5957        DOT                     ".",
    60         SQUOTE          "'",
    61         // DQUOTE               "\"",
    6258  }
    6359}
     
    6864
    6965nodes {
    70 //  binaryOperator {} [expression, expression1, expression3],
    71 //  unaryOperator {} [expression2],
     66  binaryOperator {} [expression, expression1, expression3],
     67  unaryOperator {} [expression2],
    7268  assignment {} [assignmentStatementTail],
    7369//  ifStatement {} [ifStatementBulk],
    7470  functionCall {} [functionCallTail],
    75 //  ASTNode [assignmentOrFunctionInvocation, variableOrFunctionInvocation],
     71  tupleIdentifier {} [tupleTail],
     72//  ASTNode [variableFunctionCall], //[assignmentOrFunctionInvocation, variableOrFunctionInvocation],
    7673}
    7774
    7875grammar {
    79         program         -> (typeDef)* (typeDecl)* (functionDef)* ;
     76        program         -> (typeDef)* (typeDecl)* (functionDef)* ;
    8077       
    8178        //             
    8279        // t y p e   d e f i n i t i o n s                     
    8380        //
    84         typeDef         ->  TYPEDEF typeSpecifier identifier TERMINATOR ;
     81        typeDef         ->  TYPEDEF (typeSpecifier | typeDecl) typeDefName TERMINATOR ? ;
     82    typeDefName #->  identifier ;
    8583   
    8684    //
    8785        // t y p e   d e c l a r a t i o n s             
    8886        //
    89         typeDecl        -> typeSpecifier TERMINATOR     ;   
    90    
     87        typeDecl        ->  (structTypeDecl | tupleTypeDecl ) TERMINATOR ? ;
     88       
    9189    //
    9290        // f u n c t i o n   d e f i n i t i o n s                                                             
    9391        //
    94         functionDef             -> FUNCTION functionReturnTypeSpecifier functionName LROUND parameterList? RROUND blockStatement ;                             
     92        functionDef             -> FUNCTION functionReturnType functionName LROUND (parameter (COMMA parameter)*)? RROUND blockStatement TERMINATOR ?;                         
    9593                                                                               
    96         functionReturnTypeSpecifier     -> typeSpecifier | VOID ;
     94        functionReturnType      -> typeSpecifier | VOID ;
    9795                                                                                                               
    9896        functionName    #-> identifier ;
    9997                                                                                                                       
    100         parameterList   -> parameter (COMMA parameter)* ;
    101        
    10298        parameter               -> typeSpecifier parameterName ;
    10399                                       
    104100        parameterName   #-> identifier ;
    105101       
    106         blockStatement  -> LCURLY statementList RCURLY ;
    107        
    108         statementList   ->      statement*      ;
    109        
     102        blockStatement  -> LCURLY statement* RCURLY ;
     103               
    110104        //
    111105        // s t a t e m e n t s
    112106        //
    113         statement                       -> (variableDefinition | assignmentStatementOrFunctionCall | ifStatement | whileStatement | returnStatement) (TERMINATOR)?      ;
     107        statement                       #-> (assignmentStatementOrFunctionCall | ifStatement | whileStatement | returnStatement) (TERMINATOR)?  ;
    114108                       
    115         variableDefinition      -> typeSpecifier variableName (assignmentOperator expression)? ;
    116                                        
    117         variableName            #-> identifier ;
     109        //variableDefinition           
     110        //variableDefinition    -> typeSpecifier variableName (assignmentOperator expression)? ;                                       
     111        //variableName          #-> identifier ;
    118112       
    119113        assignmentStatementOrFunctionCall -> compoundVariable (assignmentStatementTail _promote_ | functionCallTail _promote_) ;
     
    121115        assignmentStatementTail -> assignmentOperator^! expression ;
    122116       
    123         functionCallTail        -> LROUND expressionList? RROUND ;
    124        
    125         compoundVariable        -> identifier (DOT identifier)* ;
     117        functionCallTail        -> LROUND (argumentList)? RROUND ;
     118       
     119        argumentList            -> expression (COMMA expression)* ;
     120
     121        compoundVariable        -> identifierOrTuple (DOT identifierOrTuple)*   ; 
     122        // compoundVariable -> identifier (LSQUARE index RSQUARE)? (DOT identifier (LSQUARE index RSQUARE)?)* ; // TODO - mixed identifier / tuple list ?
     123       
     124        identifierOrTuple       #-> identifier (tupleTail _promote_)?;
     125       
     126        tupleTail                       -> LSQUARE index RSQUARE ;
     127                                       
     128        index                           -> INTEGER_CONST ;     
    126129       
    127130        assignmentOperator      -> ASSIGN | AND_ASSIGN | OR_ASSIGN | NOT_ASSIGN | XOR_ASSIGN ;
    128131                                       
    129         ifStatement             -> IF LROUND expression RROUND blockStatement (ELSE blockStatement)? ;
     132        ifStatement             -> IF LROUND ifCondition RROUND ifBlock (ELSE elseBlock)? ;
     133       
     134        ifCondition             -> expression ;
     135       
     136        ifBlock                 -> blockStatement ;
     137       
     138        elseBlock               -> blockStatement ; // TODO - dangling else problems?
    130139                                               
    131         whileStatement  -> WHILE LROUND expression RROUND DO blockStatement     ;
    132        
    133         returnStatement -> RETURN identifier ; // return an expression ?
     140        whileStatement  -> WHILE LROUND whileCondition RROUND blockStatement ;
     141       
     142        whileCondition  -> expression ;
     143       
     144        returnStatement -> RETURN (identifier)? ; // TODO - return an expression
    134145       
    135146        //
    136147        // e x p r e s s i o n s
    137148        //
    138         expression              ->      expression1 ((OR|XOR) expression)? ;
    139                                        
    140         expression1             -> expression2 ((AND) expression1)?     ;
    141                                        
    142         expression2             -> (NOT)? expression3 ;
    143                                        
    144         expression3             -> LROUND expression RROUND
    145                                         | variableFunctionTuple
     149        expression              #->     expression1 ((OR^|XOR^) expression)? ;
     150                                       
     151        expression1             #-> expression2 ((AND^) expression1)?   ;
     152                                       
     153        expression2             #-> NOT^^? expression3 _leftAssoc_ ;
     154                                       
     155        expression3             #-> LROUND expression RROUND
     156                                        | variableFunctionCall
    146157                                        | constant ;
    147158                                       
    148         variableFunctionTuple   -> compoundVariable (functionTail | tupleTail)? ;
    149                                                
    150         functionTail                    -> LROUND expressionList? RROUND ;
    151                                        
    152         expressionList                  -> expression (COMMA expression)* ;
    153                                        
    154         tupleTail                               -> LSQUARE index RSQUARE ;
    155                                        
    156         index                                   ->      INTEGER_CONST ;                         
    157        
    158         constant                                ->      INTEGER_CONST // '-1' | '0' // 'AllOnes' | 'AllZeroes'
    159                                                         | SQUOTE string SQUOTE
    160                                                         // | DQUOTE string DQUOTE
    161                                                         ;
    162        
    163         string                  -> STRING ;
    164        
    165         identifier              -> IDENTIFIER ;
     159        variableFunctionCall    #-> compoundVariable (functionCallTail _promote_)? ;
     160                                                       
     161        constant                                -> STRING | SQ_STRING | INTEGER_CONST ; // '-1' | '0'
     162                                                       
     163        identifier                              -> IDENTIFIER ;
    166164       
    167165    //   
    168166        // t y p e s
    169167        //
    170         typeSpecifier                   #-> streamTypeSpecifier | structTypeSpecifier | tupleTypeSpecifier;// | identifier      ;
     168
     169        // s t r e a m
     170
     171        typeSpecifier                   ->  streamTypeSpecifier | structTypeSpecifier | tupleTypeSpecifier | identifier ;
    171172       
    172173        streamTypeSpecifier             ->      STREAM (LANGLE fieldWidth RANGLE)? ;   
    173174                                       
    174         fieldWidth                              ->  INTEGER_CONST ;                                     
    175                
    176         structTypeSpecifier             ->      STRUCT identifier (LCURLY structTypeSpecifierBody RCURLY)? ;
    177                                        
    178         structTypeSpecifierBody -> structMember TERMINATOR (structMember TERMINATOR)* ;
    179                                        
    180         structMember                    ->      typeSpecifier structMemberName ;
     175        fieldWidth                              ->  INTEGER_CONST ;     
     176       
     177        streamTypeName                  #->     identifier ;                           
     178               
     179        // s t r u c t 
     180               
     181        structTypeDecl                  ->      structTypeSpecifier LCURLY structTypeBody RCURLY ;
     182       
     183        structTypeSpecifier             ->      STRUCT structName ;
     184                                       
     185        structName                              #->  identifier ;                               
     186                                       
     187        structTypeBody                  ->      structMember TERMINATOR (structMember TERMINATOR)* ;
     188                                       
     189        structMember                    ->      (typeSpecifier | typeDecl) structMemberName ;
    181190       
    182191        structMemberName                #-> identifier ;
    183192       
    184         tupleTypeSpecifier              ->      TUPLE IDENTIFIER (LROUND typeSpecifier (COMMA typeSpecifier)* RROUND)? ;                               
    185                                
    186         identifier                              -> IDENTIFIER ;
    187 
    188 }
     193        // t u p l e
     194       
     195        tupleTypeDecl                   ->      tupleTypeSpecifier tupleTypeBody ;
     196       
     197        tupleTypeSpecifier              ->      TUPLE tupleName ;       
     198               
     199        tupleTypeBody                   ->  (LROUND (typeSpecifier | typeDecl) (COMMA  (typeSpecifier | typeDecl))* RROUND) ;                           
     200
     201        tupleName                               #->  identifier ;
     202
     203
     204}
  • proto/pablo/input/test/test.pablo

    r2356 r2361  
    1 function void Assignments() {
    2         stream s = 4;
    3         stream s &= 4;
    4         stream s |= 4;
    5         stream s ~= 4;
    6         stream s ^= 4;
     1
     2struct Basis {
     3        stream b0;
     4        stream b7;
    75};
     6
     7function void Do_check_streams() {
     8        stream a;
     9        stream a = 0;
     10       
     11        struct Basis basis;
     12       
     13        /*
     14        struct Basis {
     15                stream b0;
     16                stream b7;
     17        } basis ; */
     18 
     19};
     20
Note: See TracChangeset for help on using the changeset viewer.