Merge branch 'charm' into abecker/charj-main
authorAaron Becker <akbecker@gmail.com>
Wed, 26 May 2010 01:53:54 +0000 (20:53 -0500)
committerAaron Becker <akbecker@gmail.com>
Wed, 26 May 2010 01:53:54 +0000 (20:53 -0500)
Conflicts:
src/langs/charj/src/charj/translator/Charj.g
src/langs/charj/src/charj/translator/Charj.stg
src/langs/charj/src/charj/translator/CharjEmitter.g
src/langs/charj/src/charj/translator/CharjSemantics.g

1  2 
src/langs/charj/src/charj/translator/Charj.g
src/langs/charj/src/charj/translator/Charj.stg
src/langs/charj/src/charj/translator/CharjEmitter.g
src/langs/charj/src/charj/translator/CharjSemantics.g
src/langs/charj/src/charj/translator/Translator.java

index 8920b3df480078b0b890c3f28b6195d11284552a,86e3e3ecdb1988ad35c4f80bcc434e101d51d319..7d9e09b06c91e8006bbab145d7227c185e84cf74
@@@ -16,7 -16,83 +16,84 @@@ options 
  }
  
  tokens {
+     ENTRY                   = 'entry'           ;
+     PUBLIC                  = 'public'          ;
+     PROTECTED               = 'protected'       ;
      ENTRY                   = 'entry'           ;
+     PRIVATE                 = 'private'         ;
+     ABSTRACT                = 'abstract'        ;
+     NATIVE                  = 'native'          ;
+     FINAL                   = 'final'           ;
+     STATIC                  = 'static'          ;
+     VOLATILE                = 'volatile'        ;
+     VOID                    = 'void'            ;
+     BOOLEAN                 = 'boolean'         ;
+     CHAR                    = 'char'            ;
+     BYTE                    = 'byte'            ;
+     SHORT                   = 'short'           ;
+     INT                     = 'int'             ;
+     LONG                    = 'long'            ;
+     FLOAT                   = 'float'           ;
+     DOUBLE                  = 'double'          ;
+     TRUE                    = 'true'            ;
+     FALSE                   = 'false'           ;
+     NULL                    = 'null'            ;
+     THIS                    = 'this'            ;
+     SUPER                   = 'super'           ;
+     CHARE                   = 'chare'           ;
+     CHARE_ARRAY             = 'chare_array'     ;
++    MAINCHARE               = 'mainchare'       ;
+     INTERFACE               = 'interface'       ;
+     PACKAGE                 = 'package'         ;
+     IMPORT                  = 'import'          ;
+     CLASS                   = 'class'           ;
+     EXTENDS                 = 'extends'         ;
+     GROUP                   = 'group'           ;
+     NODEGROUP               = 'nodegroup'       ;
+     ENUM                    = 'enum'            ;
+     FOR                     = 'for'             ;
+     WHILE                   = 'while'           ;
+     IF                      = 'if'              ;
+     CASE                    = 'case'            ;
+     SWITCH                  = 'switch'          ;
+     RETURN                  = 'return'          ;
+     ELSE                    = 'else'            ;
+     CONTINUE                = 'continue'        ;
+     DO                      = 'do'              ;
+     DEFAULT                 = 'default'         ;
+     WHILE                   = 'while'           ;
+     THROW                   = 'throw'           ;
+     BREAK                   = 'break'           ;
+     BITWISE_OR              = '|'               ;
+     BITWISE_AND             = '&'               ;
+     ASSIGNMENT              = '='               ;
+     PLUS_EQUALS             = '+='              ;
+     MINUS_EQUALS            = '-='              ;
+     TIMES_EQUALS            = '*='              ;
+     DIVIDE_EQUALS           = '/='              ;
+     AND_EQUALS              = '&='              ;
+     OR_EQUALS               = '|='              ;
+     POWER_EQUALS            = '^='              ;
+     MOD_EQUALS              = '%='              ;
+     OR                      = '||'              ;
+     AND                     = '&&'              ;
+     POWER                   = '^'               ;
+     GT                      = '>'               ;
+     LT                      = '<'               ;
+     PLUS                    = '+'               ;
+     MINUS                   = '-'               ;
+     TIMES                   = '*'               ;
+     DIVIDE                  = '/'               ;
+     MOD                     = '%'               ;
+     UNARY_PLUS              = '++'              ;
+     UNARY_MINUS             = '--'              ;
+     NOT                     = '!'               ;
+     TILDA                   = '~'               ;
+     INSTANCEOF              = 'instanceof'      ;
  
      // C++ keywords that aren't used in charj. 
      // We don't use these ourselves, but they're still reserved
@@@ -152,11 -226,10 +227,11 @@@ classDefinitio
      ;
  
  chareType
-     :   'chare'
-     |   'group'
-     |   'nodegroup'
-     |   'mainchare'
-     |   'chare_array' '[' ARRAY_DIMENSION ']' -> ^('chare_array' ARRAY_DIMENSION)
+     :   CHARE
+     |   GROUP
+     |   NODEGROUP
++    |   MAINCHARE
+     |   CHARE_ARRAY '[' ARRAY_DIMENSION ']' -> ^(CHARE_ARRAY ARRAY_DIMENSION)
      ;
  
  chareDefinition
@@@ -438,24 -511,22 +513,24 @@@ statemen
          |   localModifierList? type IDENT ':' expression ')' statement
              -> ^(FOR_EACH[$f, "FOR_EACH"] localModifierList? type IDENT expression statement)
          )
-     |   'while' parenthesizedExpression statement
-         ->  ^('while' parenthesizedExpression statement)
-     |   'do' statement 'while' parenthesizedExpression ';'
-         ->  ^('do' statement parenthesizedExpression)
-     |   'switch' parenthesizedExpression '{' switchCaseLabel* '}'
-         ->  ^('switch' parenthesizedExpression switchCaseLabel*)
-     |   'return' expression? ';'
-         ->  ^('return' expression?)
-     |   'throw' expression ';'
-         ->  ^('throw' expression)
-     |   'break' IDENT? ';'
-         ->  ^('break' IDENT?)
-     |   'continue' IDENT? ';'
-         ->  ^('continue' IDENT?)
+     |   WHILE parenthesizedExpression statement
+         ->  ^(WHILE parenthesizedExpression statement)
+     |   DO statement WHILE parenthesizedExpression ';'
+         ->  ^(DO statement parenthesizedExpression)
+     |   SWITCH parenthesizedExpression '{' switchCaseLabel* '}'
+         ->  ^(SWITCH parenthesizedExpression switchCaseLabel*)
+     |   RETURN expression? ';'
+         ->  ^(RETURN expression?)
+     |   THROW expression ';'
+         ->  ^(THROW expression)
+     |   BREAK IDENT? ';'
+         ->  ^(BREAK IDENT?)
+     |   CONTINUE IDENT? ';'
+         ->  ^(CONTINUE IDENT?)
      |   IDENT ':' statement
          ->  ^(LABELED_STATEMENT IDENT statement)
 +    |   'delete' qualifiedIdentifier ';'
 +        -> ^('delete' qualifiedIdentifier)
      |   'embed' STRING_LITERAL EMBED_BLOCK
          ->  ^('embed' STRING_LITERAL EMBED_BLOCK)
      |   expression ';'!
index 1e8e8be515c4b3d6d2949f971d99451d636a668b,e8338fca9c95399194ce3d3493e8903ebc9112eb..f905d0d6bf8a79e09e0b7660ae164a082aca1bb1
@@@ -173,12 -195,10 +173,10 @@@ entry <ty><gtpl> <id><fpl><adl>
  >>
  
  
 -funcMethodDecl_cc(modl, gtpl, ty, id, fpl, adl, block) ::=
 +funcMethodDecl_cc(sym, modl, gtpl, ty, id, fpl, adl, block) ::=
  <<
 -<if(first(modl))><modl; separator = " ">: <endif><ty><gtpl> <id><fpl><adl>
 +<ty><gtpl> <sym.Name>::<id><fpl><adl>
- {
-     <block>
- }
+ <block>
  >>
  
  
@@@ -196,9 -216,8 +194,8 @@@ ctorDecl_h(modl, gtpl, id, fpl, block) 
  
  ctorDecl_cc(modl, gtpl, id, fpl, block) ::=
  <<
- <gtpl> <id>::<id><fpl> {
-     <block>
- }
 -<if(modl)><modl>:<endif><gtpl> <id><fpl>
++<gtpl> <id>::<id><fpl>
+ <block>
  >>
  
  
index 04f63ee1810ec51ad9911fbcf473e237c1359920,dc0dc27fea8e7772ed6198ae06edbe2cd65a2d00..680fb7d48668c32c7dcf222d1b8940c9b9c7ee23
@@@ -119,7 -118,7 +119,7 @@@ importDeclaratio
      ;
      
  typeDeclaration
-     :   ^(TYPE 'class' IDENT (^('extends' su=type))? (^('implements' type+))?
 -    :   ^(TYPE CLASS IDENT (^('extends' su=type))? (^('implements' type+))? (csds+=classScopeDeclaration)*)
++    :   ^(TYPE CLASS IDENT (^('extends' su=type))? (^('implements' type+))?
          {
              currentClass = (ClassSymbol)$IDENT.symbol;
          }
                  ext={$su.st}, 
                  csds={$csds})
          ->
-     |   ^('interface' IDENT (^('extends' type+))? interfaceScopeDeclaration*)
+     |   ^(INTERFACE IDENT (^('extends' type+))? interfaceScopeDeclaration*)
          -> template(t={$text}) "/*INTERFACE-not implemented*/ <t>"
-     |   ^('enum' IDENT (^('implements' type+))? classScopeDeclaration*)
+     |   ^(ENUM IDENT (^('implements' type+))? classScopeDeclaration*)
          -> template(t={$text}) "/*ENUM-not implemented*/ <t>"
 -    |   ^(TYPE chareType IDENT (^('extends' type))? (^('implements' type+))? (csds+=classScopeDeclaration)*)
 +    |   ^(TYPE chareType IDENT (^('extends' type))? (^('implements' type+))?
          {
              currentClass = (ClassSymbol)$IDENT.symbol;
          }
@@@ -168,11 -165,10 +168,11 @@@ chareTyp
  @init {
  $st = %{$start.getText()};
  }
-     :   'chare'
-     |   'group'
-     |   'nodegroup'
-     |   'mainchare'
-     |   ^('chare_array' ARRAY_DIMENSION)
+     :   CHARE
+     |   GROUP
+     |   NODEGROUP
++    |   MAINCHARE
+     |   ^(CHARE_ARRAY ARRAY_DIMENSION)
          -> template(t={$ARRAY_DIMENSION.text}) "array [<t>]"
      ;
  
@@@ -626,14 -621,14 +628,14 @@@ exp
      |   primaryExpression
          -> {$primaryExpression.st}
      ;
 -    
 +
  primaryExpression
 -    :   ^('.' prim=primaryExpression IDENT)
 -        -> template(id={$IDENT}, prim={$prim.st}) "<prim>.<id>"
 -    |   ^('.' prim=primaryExpression THIS)
 -        -> template(prim={$prim.st}) "<prim>.this"
 -    |   ^('.' prim=primaryExpression SUPER)
 -        -> template(prim={$prim.st}) "<prim>.super"
 +    :   ^('.' prim=primaryExpression
 +            ( IDENT     -> template(id={$IDENT}, prim={$prim.st}) "<prim>-><id>"
-             | 'this'    -> template(prim={$prim.st}) "<prim>->this"
-             | 'super'   -> template(prim={$prim.st}) "<prim>->super"
++            | THIS    -> template(prim={$prim.st}) "<prim>->this"
++            | SUPER   -> template(prim={$prim.st}) "<prim>->super"
 +            )
 +        )
      |   parenthesizedExpression
          -> {$parenthesizedExpression.st}
      |   IDENT
index c1545a9cd230775c1430790a16f518c4e7c411f1,68f0d4beb64fa723801b8222c0b21b46d0b90b59..f5c731a117f08d02af5f53f813163cecbad78196
@@@ -113,45 -113,37 +113,45 @@@ packageDeclaratio
      
  importDeclarations returns [List<CharjAST> packageNames]
  @init {
 -      packageNames = new ArrayList<CharjAST>();
 +    packageNames = new ArrayList<CharjAST>();
  }
-     :   (^('import' qualifiedIdentifier '.*'?)
+     :   (^(IMPORT qualifiedIdentifier '.*'?)
                { packageNames.add($qualifiedIdentifier.start); })*
      ;
  
  
  typeDeclaration[List<CharjAST> imports] returns [ClassSymbol sym]
  scope ScopeStack; // top-level type scope
-     :   ^(TYPE ('class' | chareType) IDENT
+     :   ^(TYPE (CLASS | chareType) IDENT
 -            (^('extends' parent=type))? (^('implements' type+))? classScopeDeclaration*)
 -        {
 -            Scope outerScope = $ScopeStack[-1]::current;
 -            $sym = new ClassSymbol(symtab, $IDENT.text, outerScope.resolveType($parent.text), outerScope);
 -            outerScope.define($sym.name, $sym);
 -            currentClass = $sym;
 -            $sym.definition = $typeDeclaration.start;
 -            $sym.definitionTokenStream = input.getTokenStream();
 -            $IDENT.symbol = $sym;
 -            $ScopeStack::current = $sym;
 -            importPackages($sym, $imports);
 -        }
 +            (^('extends' parent=type))? (^('implements' type+))?
 +            {
 +                Scope outerScope = $ScopeStack[-1]::current;
 +                $sym = new ClassSymbol(symtab, $IDENT.text, outerScope.resolveType($parent.text), outerScope);
 +                outerScope.define($sym.name, $sym);
 +                currentClass = $sym;
 +                $sym.definition = $typeDeclaration.start;
 +                $sym.definitionTokenStream = input.getTokenStream();
 +                $IDENT.symbol = $sym;
 +                $ScopeStack::current = $sym;
 +                importPackages($sym, $imports);
 +            }
 +            classScopeDeclaration*)
 +            {
 +                //System.out.println("Members for type " + $sym.name + ":");
 +                //for (Map.Entry<String, Symbol> entry : $sym.members.entrySet()) {
 +                //    System.out.println(entry.getKey());
 +                //}
 +            }
      |   ^('interface' IDENT (^('extends' type+))?  interfaceScopeDeclaration*)
      |   ^('enum' IDENT (^('implements' type+))? enumConstant+ classScopeDeclaration*)
      ;
  
  chareType
-     :   'chare'
-     |   'group'
-     |   'nodegroup'
-     |   'mainchare'
-     |   ^('chare_array' ARRAY_DIMENSION)
+     :   CHARE
+     |   GROUP
+     |   NODEGROUP
++    |   MAINCHARE
+     |   ^(CHARE_ARRAY ARRAY_DIMENSION)
      ;
  
  enumConstant
@@@ -347,8 -341,7 +347,8 @@@ statemen
          }
      |   ^(LABELED_STATEMENT IDENT statement)
      |   expression
-     |   ^('embed' STRING_LITERAL EMBED_BLOCK)
 +    |   ^('delete' qualifiedIdentifier)
+     |   ^(EMBED STRING_LITERAL EMBED_BLOCK)
      |   ';' // Empty statement.
      ;