fixed disambiguation of primitive and object decls
authorAaron Becker <abecker3@illinois.edu>
Tue, 16 Dec 2008 21:43:17 +0000 (21:43 +0000)
committerAaron Becker <abecker3@illinois.edu>
Tue, 16 Dec 2008 21:43:17 +0000 (21:43 +0000)
src/langs/charj/src/charj/translator/Charj.stg
src/langs/charj/src/charj/translator/CharjEmitter.g
src/langs/charj/tests/Hello.cj

index 35c2eba107904b0aaeb034c755d15c017e6b5631..777a53789f985b51141fcfec1d3b267dde1d2c23 100644 (file)
@@ -175,3 +175,15 @@ embed_cc(str, blk) ::=
 <blk>
 // end embedded block: <str>
 >>
+
+
+primitive_var_decl(modList, type, declList) ::=
+<<
+<modList> <type> <declList>;
+>>
+
+
+object_var_decl(modList, type, declList) ::=
+<<
+<modList> <type>* <declList>;
+>>
\ No newline at end of file
index 6fbfb3bc82a18b55e770809178b556b180e8d8f4..0191dbf01c1df185033ad01d1afdaae045cffb74 100644 (file)
@@ -178,9 +178,9 @@ typeDeclaration
         ->
     |   ^(INTERFACE modifierList IDENT genericTypeParameterList? 
                 interfaceExtendsClause? interfaceTopLevelScope)
-        -> template(t={$text}) "<t>"
+        -> template(t={$text}) "/*INTERFACE*/ <t>"
     |   ^(ENUM modifierList IDENT implementsClause? enumTopLevelScope)
-        -> template(t={$text}) "<t>"
+        -> template(t={$text}) "/*ENUM*/ <t>"
     ;
 
 
@@ -198,32 +198,32 @@ interfaceExtendsClause
     
 implementsClause
     :   ^(IMPLEMENTS_CLAUSE type+)
-        -> template(t={$text}) "<t>"
+        -> template(t={$text}) "/*IMPLEMENTS_CLAUSE*/ <t>"
     ;
         
 genericTypeParameterList
     :   ^(GENERIC_TYPE_PARAM_LIST genericTypeParameter+)
-        -> template(t={$text}) "<t>"
+        -> template(t={$text}) "/*GENERIC_TYPE_PARAM_LIST*/ <t>"
     ;
 
 genericTypeParameter
     :   ^(IDENT bound?)
-        -> template(t={$text}) "<t>"
+        -> template(t={$text}) "/*genericTypeParameter*/ <t>"
     ;
         
 bound
     :   ^(EXTENDS_BOUND_LIST type+)
-        -> template(t={$text}) "<t>"
+        -> template(t={$text}) "/*EXTENDS_BOUND_LIST*/ <t>"
     ;
 
 enumTopLevelScope
     :   ^(ENUM_TOP_LEVEL_SCOPE enumConstant+ classTopLevelScope?)
-        -> template(t={$text}) "<t>"
+        -> template(t={$text}) "/*enumTopLevelScope*/ <t>"
     ;
     
 enumConstant
     :   ^(IDENT arguments? classTopLevelScope?)
-        -> template(t={$text}) "<t>"
+        -> template(t={$text}) "/*enumConstant*/ <t>"
     ;
     
     
@@ -351,26 +351,26 @@ interfaceScopeDeclarations
         // declarations by Charj.g; the parser has already checked that
         // there's an obligatory initializer.
     |   ^(PRIMITIVE_VAR_DECLARATION modifierList simpleType variableDeclaratorList)
-        -> template(t={$text}) "prim...<t>..."
+        -> template(t={$text}) "<t>"
     |   ^(OBJECT_VAR_DECLARATION modifierList objectType variableDeclaratorList)
-        -> template(t={$text}) "obj...<t>..."
+        -> template(t={$text}) "<t>"
     |   typeDeclaration
         -> template(t={$text}) "<t>"
     ;
 
 variableDeclaratorList
     :   ^(VAR_DECLARATOR_LIST variableDeclarator+)
-        -> template(t={$text}) "<t>"
+        -> template(t={$text}) "/*variableDeclaratorList*/ <t>"
     ;
 
 variableDeclarator
     :   ^(VAR_DECLARATOR variableDeclaratorId variableInitializer?)
-        -> template(t={$text}) "<t>"
+        -> template(t={$text}) "/*variableDeclarator*/ <t>"
     ;
     
 variableDeclaratorId
     :   ^(IDENT arrayDeclaratorList?)
-        -> template(t={$text}) "<t>"
+        -> template(t={$text}) "/*variableDeclaratorId*/ <t>"
     ;
 
 variableInitializer
@@ -537,24 +537,31 @@ block
     
 blockStatement
     :   localVariableDeclaration
-        -> template(t={$text}) "<t>"
+        -> {$localVariableDeclaration.st}
     |   typeDeclaration
-        -> template(t={$text}) "<t>"
+        -> {$typeDeclaration.st}
     |   statement
         -> {$statement.st}
     ;
-    
+
+
 localVariableDeclaration
     :   ^(PRIMITIVE_VAR_DECLARATION localModifierList simpleType variableDeclaratorList)
-        -> template(t={$text}) "prim!<t>!"
+        -> primitive_var_decl(
+            modList={$localModifierList.st},
+            type={$simpleType.st},
+            declList={$variableDeclaratorList.st})
     |   ^(OBJECT_VAR_DECLARATION localModifierList objectType variableDeclaratorList)
-        -> template(t={$text}) "obj!<t>!"
+        -> object_var_decl(
+            modList={$localModifierList.st},
+            type={$objectType.st},
+            declList={$variableDeclaratorList.st})
     ;
-    
-        
+
+
 statement
     :   block
-        -> template(t={$text}) "<t>"
+        -> {$block.st}
     |   ^(ASSERT expression expression?)
         -> template(t={$text}) "<t>"
     |   ^(IF parenthesizedExpression statement statement?)
index 1cb3fba005841cbccfbfc58c1e08e0cbcc651704..622d11100d79518f53e4b9929ca445726c8aeee4 100644 (file)
@@ -11,8 +11,8 @@ public class Hello {
             int* x = &y;
         }}
         Hello h = new Hello();
-        //MyObject someObject = new MyObject(1, 2, "hello", new Array<int>(1));
-        //int myArray[25] = new int[25];
+        //MyObject someObject = new MyObject(1, 2, "hello");
+        int myArray[] = new int[25];
         //Array<int> myGenericArray = new Array<int>(25);
         //for (int i=0; i<25; ++i) {
         //    myArray[i] = payload + i;