Charj: simplify and improve chare type handling
authorAaron Becker <akbecker@gmail.com>
Sat, 22 May 2010 03:01:12 +0000 (22:01 -0500)
committerAaron Becker <akbecker@gmail.com>
Sat, 22 May 2010 03:01:12 +0000 (22:01 -0500)
src/langs/charj/src/charj/translator/Charj.g
src/langs/charj/src/charj/translator/CharjEmitter.g
src/langs/charj/src/charj/translator/CharjSemantics.g

index 7b329e8f1438ddabb8e30734cb162ba5c7a68a51..36e47d887db529f0175bd4b8d4879b1fa3c14e6e 100644 (file)
@@ -142,34 +142,27 @@ typeDeclaration
     |   interfaceDefinition
     |   enumDefinition
     |   chareDefinition
-    |   chareArrayDefinition
     ;
 
 classDefinition
     :   'public'? 'class' IDENT ('extends' type)? ('implements' typeList)? '{'
             classScopeDeclaration*
         '}' ';'?
-        -> ^('class' IDENT ^('extends' type)? ^('implements' typeList)? classScopeDeclaration*)
+        -> ^(TYPE 'class' IDENT ^('extends' type)? ^('implements' typeList)? classScopeDeclaration*)
     ;
 
 chareType
     :   'chare'
     |   'group'
     |   'nodegroup'
+    |   'chare_array' '[' ARRAY_DIMENSION ']' -> ^('chare_array' ARRAY_DIMENSION)
     ;
 
 chareDefinition
     :   'public'? chareType IDENT ('extends' type)? ('implements' typeList)? '{'
             classScopeDeclaration*
         '}' ';'?
-        -> ^(chareType IDENT ^('extends' type)? ^('implements' typeList)? classScopeDeclaration*)
-    ;
-
-chareArrayDefinition
-    :   'public'? 'chare_array' '[' ARRAY_DIMENSION ']' IDENT ('extends' type)? ('implements' typeList)? '{'
-            classScopeDeclaration*
-        '}' ';'?
-        -> ^('chare_array' ARRAY_DIMENSION IDENT ^('extends' type)? ^('implements' typeList)? classScopeDeclaration*)
+        -> ^(TYPE chareType IDENT ^('extends' type)? ^('implements' typeList)? classScopeDeclaration*)
     ;
 
 interfaceDefinition
@@ -750,8 +743,7 @@ DECIMAL_LITERAL : ('0' | '1'..'9' '0'..'9'*) INTEGER_TYPE_SUFFIX? ;
 
 OCTAL_LITERAL : '0' ('0'..'7')+ INTEGER_TYPE_SUFFIX? ;
 
-//fragment
-ARRAY_DIMENSION :  '1'..'6' ('d'|'D') ;
+ARRAY_DIMENSION :  ('1'..'6')('d'|'D') ;
 
 fragment
 HEX_DIGIT : ('0'..'9'|'a'..'f'|'A'..'F') ;
index 1d60e9a1214eb880ee5aab45ded1487d92590f34..a39bad5f90378e38009ff56ebf4a47c74ee29d7a 100644 (file)
@@ -119,7 +119,7 @@ importDeclaration
     ;
     
 typeDeclaration
-    :   ^('class' IDENT (^('extends' su=type))? (^('implements' type+))? (csds+=classScopeDeclaration)*)
+    :   ^(TYPE 'class' IDENT (^('extends' su=type))? (^('implements' type+))? (csds+=classScopeDeclaration)*)
         {
             currentClass = (ClassSymbol)$IDENT.symbol;
         }
@@ -138,7 +138,7 @@ typeDeclaration
         -> template(t={$text}) "/*INTERFACE-not implemented*/ <t>"
     |   ^('enum' IDENT (^('implements' type+))? classScopeDeclaration*)
         -> template(t={$text}) "/*ENUM-not implemented*/ <t>"
-    |   ^(chareType IDENT (^('extends' type))? (^('implements' type+))? classScopeDeclaration*)
+    |   ^(TYPE chareType IDENT (^('extends' type))? (^('implements' type+))? classScopeDeclaration*)
         {
             currentClass = (ClassSymbol)$IDENT.symbol;
         }
@@ -160,25 +160,6 @@ typeDeclaration
                 ext={$su.st}, 
                 csds={$csds})
         ->
-    |   ^('chare_array' ARRAY_DIMENSION IDENT (^('extends' type))? (^('implements' type+))? classScopeDeclaration*)
-        -> {emitCC()}? chareDeclaration_cc(
-                sym={currentClass},
-                ident={$IDENT.text}, 
-                ext={$su.st}, 
-                csds={$csds})
-        -> {emitCI()}? chareDeclaration_ci(
-                sym={currentClass},
-                chareType={"array"},
-                arrayDim={$ARRAY_DIMENSION.text.toUpperCase()},
-                ident={$IDENT.text}, 
-                ext={$su.st}, 
-                csds={$csds})
-        -> {emitH()}? chareDeclaration_h(
-                sym={currentClass},
-                ident={$IDENT.text}, 
-                ext={$su.st}, 
-                csds={$csds})
-        ->
     ;
 
 chareType
@@ -188,6 +169,8 @@ $st = %{$start.getText()};
     :   'chare'
     |   'group'
     |   'nodegroup'
+    |   ^('chare_array' ARRAY_DIMENSION)
+        -> template(t={$ARRAY_DIMENSION.text}) "array [<t>]"
     ;
 
 enumConstant
index 39fe290f562fc99c4cd3dac6ffe498db7e551b29..b5ff63f26104a326ef9ba7355ac0333062027ca2 100644 (file)
@@ -119,7 +119,7 @@ importDeclarations returns [List<CharjAST> packageNames]
 
 typeDeclaration[List<CharjAST> imports] returns [ClassSymbol sym]
 scope ScopeStack; // top-level type scope
-    :   ^((('class')|(chareType)|('chare_array' ARRAY_DIMENSION)) IDENT
+    :   ^(TYPE ('class' | chareType) IDENT
             (^('extends' parent=type))? (^('implements' type+))? classScopeDeclaration*)
         {
             Scope outerScope = $ScopeStack[-1]::current;
@@ -140,6 +140,7 @@ chareType
     :   'chare'
     |   'group'
     |   'nodegroup'
+    |   ^('chare_array' ARRAY_DIMENSION)
     ;
 
 enumConstant