improved handling of declaration modifiers
authorAaron Becker <abecker3@illinois.edu>
Tue, 16 Jun 2009 02:05:06 +0000 (02:05 +0000)
committerAaron Becker <abecker3@illinois.edu>
Tue, 16 Jun 2009 02:05:06 +0000 (02:05 +0000)
Made lists of modifiers optional instead of mandatory but possibly
empty, which simplifies code generation. Differentiated between
declarations of class fields and local variables. Added default access
specifier to fields that don't have one, to prevent them from picking up
the access modifier of previously specified variables in the C++ code.

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

index 25e10468ee7f87745311e6bc6c294f419cc7fea9..874c56238c043ea5729337b4f6d6cd529507c598 100644 (file)
@@ -175,37 +175,37 @@ typeList
     ;
 
 classScopeDeclaration
-    :   modifierList
+    :   modifierList?
         (   genericTypeParameterList?
             (   type IDENT formalParameterList arrayDeclaratorList? (block | ';')
-                ->  ^(FUNCTION_METHOD_DECL modifierList genericTypeParameterList? type IDENT
+                ->  ^(FUNCTION_METHOD_DECL modifierList? genericTypeParameterList? type IDENT
                     formalParameterList arrayDeclaratorList? block?)
             |   'void' IDENT formalParameterList (block | ';')
-                ->  ^(VOID_METHOD_DECL modifierList genericTypeParameterList? IDENT formalParameterList block?)
+                ->  ^(VOID_METHOD_DECL modifierList? genericTypeParameterList? IDENT formalParameterList block?)
             |   ident=IDENT formalParameterList block
-                ->  ^(CONSTRUCTOR_DECL[$ident, "CONSTRUCTOR_DECL"] modifierList genericTypeParameterList? IDENT
+                ->  ^(CONSTRUCTOR_DECL[$ident, "CONSTRUCTOR_DECL"] modifierList? genericTypeParameterList? IDENT
                         formalParameterList block)
             )
         |   simpleType classFieldDeclaratorList ';'
-            ->  ^(PRIMITIVE_VAR_DECLARATION modifierList simpleType classFieldDeclaratorList)
+            ->  ^(PRIMITIVE_VAR_DECLARATION modifierList? simpleType classFieldDeclaratorList)
         |   objectType classFieldDeclaratorList ';'
-            ->  ^(OBJECT_VAR_DECLARATION modifierList objectType classFieldDeclaratorList)
+            ->  ^(OBJECT_VAR_DECLARATION modifierList? objectType classFieldDeclaratorList)
         )
     ;
 
 interfaceScopeDeclaration
-    :   modifierList
+    :   modifierList?
         (   genericTypeParameterList?
             (   type IDENT formalParameterList arrayDeclaratorList? ';'
-                ->  ^(FUNCTION_METHOD_DECL modifierList genericTypeParameterList?
+                ->  ^(FUNCTION_METHOD_DECL modifierList? genericTypeParameterList?
                         type IDENT formalParameterList arrayDeclaratorList?)
             |   'void' IDENT formalParameterList ';'
-                ->  ^(VOID_METHOD_DECL modifierList genericTypeParameterList? IDENT formalParameterList)
+                ->  ^(VOID_METHOD_DECL modifierList? genericTypeParameterList? IDENT formalParameterList)
             )
         |   simpleType interfaceFieldDeclaratorList ';'
-            ->  ^(PRIMITIVE_VAR_DECLARATION modifierList simpleType interfaceFieldDeclaratorList)
+            ->  ^(PRIMITIVE_VAR_DECLARATION modifierList? simpleType interfaceFieldDeclaratorList)
         |   objectType interfaceFieldDeclaratorList ';'
-            ->  ^(OBJECT_VAR_DECLARATION modifierList objectType interfaceFieldDeclaratorList)        
+            ->  ^(OBJECT_VAR_DECLARATION modifierList? objectType interfaceFieldDeclaratorList)        
         )
     ;
 
@@ -279,8 +279,8 @@ bound
     ;
 
 modifierList
-    :   modifier*
-        ->  ^(MODIFIER_LIST modifier*)
+    :   modifier+
+        ->  ^(MODIFIER_LIST modifier+)
     ;
 
 modifier
@@ -294,8 +294,8 @@ modifier
     ;
 
 localModifierList
-    :   localModifier*
-        -> ^(LOCAL_MODIFIER_LIST localModifier*)
+    :   localModifier+
+        -> ^(LOCAL_MODIFIER_LIST localModifier+)
     ;
 
 localModifier
@@ -368,13 +368,13 @@ formalParameterList
     ;
 
 formalParameterStandardDecl
-    :   localModifierList type variableDeclaratorId
-        ->  ^(FORMAL_PARAM_STD_DECL localModifierList type variableDeclaratorId)
+    :   localModifierList? type variableDeclaratorId
+        ->  ^(FORMAL_PARAM_STD_DECL localModifierList? type variableDeclaratorId)
     ;
 
 formalParameterVarArgDecl
-    :   localModifierList type '...' variableDeclaratorId
-        ->  ^(FORMAL_PARAM_VARARG_DECL localModifierList type variableDeclaratorId)
+    :   localModifierList? type '...' variableDeclaratorId
+        ->  ^(FORMAL_PARAM_VARARG_DECL localModifierList? type variableDeclaratorId)
     ;
 
 qualifiedIdentifier
@@ -397,10 +397,10 @@ blockStatement
     ;
 
 localVariableDeclaration
-    :   localModifierList simpleType classFieldDeclaratorList
-        ->  ^(PRIMITIVE_VAR_DECLARATION localModifierList simpleType classFieldDeclaratorList)
-    |   localModifierList objectType classFieldDeclaratorList
-        ->  ^(OBJECT_VAR_DECLARATION localModifierList objectType classFieldDeclaratorList)
+    :   localModifierList? simpleType classFieldDeclaratorList
+        ->  ^(PRIMITIVE_VAR_DECLARATION localModifierList? simpleType classFieldDeclaratorList)
+    |   localModifierList? objectType classFieldDeclaratorList
+        ->  ^(OBJECT_VAR_DECLARATION localModifierList? objectType classFieldDeclaratorList)
     ;
         
 statement
@@ -420,8 +420,8 @@ statement
     |   f='for' '('
         (   forInit? ';' expression? ';' expressionList? ')' statement
             -> ^($f forInit expression? expressionList statement)
-        |   localModifierList type IDENT ':' expression ')' statement
-            -> ^(FOR_EACH[$f, "FOR_EACH"] localModifierList type IDENT expression statement)
+        |   localModifierList? type IDENT ':' expression ')' statement
+            -> ^(FOR_EACH[$f, "FOR_EACH"] localModifierList? type IDENT expression statement)
         )
     |   'while' parenthesizedExpression statement
         ->  ^('while' parenthesizedExpression statement)
index 23d69bd5eb5a2e25aaea3af3a6ad16d54c3f0900..0791457b7bfbb965b53d69a0a8361aceb1406b4d 100644 (file)
@@ -91,7 +91,7 @@ module <ident> {
 <else>
     chare <ident> {
 <endif>
-        <csds>
+        <csds; separator="\n">
     }
 }
 <if(debug)>/* \</typeDeclaration> */<endif>
@@ -106,7 +106,7 @@ classDeclaration_h(ident, ext, csds) ::=
 #include "<ident>.decl.h"
 /* superclass: <ext> */
 class <ident>: public CBase_<ident> {
-    <csds>
+    <csds; separator="\n">
 };
 <if(debug)>/* \</typeDeclaration> */<endif>
 
@@ -121,7 +121,7 @@ classDeclaration_cc(ident, ext, csds) ::=
 #include "<ident>.decl.h"
 /* superclass: <ext> */
 class <ident>: public CBase_<ident> {
-    <csds>
+    <csds; separator="\n">
 };
 #include "<ident>.def.h"
 <if(debug)>/* \</typeDeclaration> */<endif>
@@ -132,7 +132,7 @@ class <ident>: public CBase_<ident> {
 
 funcMethodDecl_h(modl, gtpl, ty, id, fpl, adl, block) ::=
 <<
-<modl>: <ty> <gtpl> <id><fpl> <adl>;
+<if(modl)><modl>: <endif><ty> <gtpl> <id><fpl> <adl>;
 >>
 
 
@@ -144,7 +144,7 @@ entry <ty> <gtpl> <id><fpl> <adl>;
 
 funcMethodDecl_cc(modl, gtpl, ty, id, fpl, adl, block) ::=
 <<
-<modl>: <ty> <gtpl> <id><fpl> <adl> {
+<if(modl)><modl>: <endif><ty> <gtpl> <id><fpl> <adl> {
     <block>
 }
 >>
@@ -158,13 +158,13 @@ entry void<gtpl> <id><fpl>;
 
 voidMethodDecl_h(modl, gtpl, id, fpl, block) ::=
 <<
-<modl>: void<gtpl> <id><fpl>;
+<if(modl)><modl>: <endif>void<gtpl> <id><fpl>;
 >>
 
 
 voidMethodDecl_cc(modl, gtpl, id, fpl, block) ::=
 <<
-<modl>: void<gtpl> <id><fpl> {
+<if(modl)><modl>: <endif>void<gtpl> <id><fpl> {
     <block>
 }
 >>
@@ -178,13 +178,13 @@ entry void<gtpl> <id><fpl>;
 
 ctorDecl_h(modl, gtpl, id, fpl, block) ::=
 <<
-<modl>:<gtpl> <id><fpl>;
+<if(modl)><modl>:<endif><gtpl> <id><fpl>;
 >>
 
 
 ctorDecl_cc(modl, gtpl, id, fpl, block) ::=
 <<
-<modl>:<gtpl> <id><fpl> {
+<if(modl)><modl>:<endif><gtpl> <id><fpl> {
     <block>
 }
 >>
@@ -204,6 +204,12 @@ embed_cc(str, blk) ::=
 >>
 
 
+class_var_decl(modl, type, declList) ::=
+<<
+<if(modl)><modl>:<else>public:<endif> <type> <declList>;
+>>
+
+
 var_decl_list(var_decls) ::=
 <<
 <var_decls; separator=", ">
@@ -240,17 +246,7 @@ local_mod_list(mods) ::=
 >>
  
 
-primitive_var_decl(modList, type, declList) ::=
-<<
-<if(modList)>
-<modList>: <type> <declList>;
-<else>
-<type> <declList>;
-<endif>
->>
-
-
-object_var_decl(modList, type, declList) ::=
+local_var_decl(modList, type, declList) ::=
 <<
 <if(modList)>
 <modList>: <type> <declList>;
@@ -306,7 +302,7 @@ CkAssert(<cond>);
 
 if(cond, then, else_) ::=
 <<
-if (<cond>) {
+if <cond> {
     <then>
 }<if(else_)> else {
     <else_>
@@ -323,7 +319,7 @@ for (<initializer> <cond> <update>) {
 
 while(cond, body) ::=
 <<
-while (<cond>) {
+while <cond> {
     <body>
 } 
 >>
@@ -332,13 +328,13 @@ dowhile(cond, body) ::=
 <<
 do {
     <body>
-} while (<cond>);
+} while <cond>;
 >>
 
 
 switch(expr, labels) ::=
 <<
-switch (<expr>) {
+switch <expr> {
     <labels>
 }
 >>
index 0f725cc396060eb32af606c6ba69ccca13a433cd..6e0d891c8d8eaa65f01c4ba8df47a0e545e17c69 100644 (file)
@@ -163,12 +163,14 @@ enumConstant
 
 classScopeDeclaration
 @init { boolean entry = false; }
-    :   ^(FUNCTION_METHOD_DECL m=modifierList g=genericTypeParameterList? 
+    :   ^(FUNCTION_METHOD_DECL m=modifierList? g=genericTypeParameterList? 
             ty=type IDENT f=formalParameterList a=arrayDeclaratorList? 
             b=block?)
         { 
-            // determine whether this is an entry method
-            entry = listContainsToken($m.start.getChildren(), ENTRY);
+            if ($m.st != null) {
+                // determine whether this is an entry method
+                entry = listContainsToken($m.start.getChildren(), ENTRY);
+            }
         }
         -> {emitCC()}? funcMethodDecl_cc(
                 modl={$m.st}, 
@@ -195,11 +197,13 @@ classScopeDeclaration
                 adl={$a.st},
                 block={$b.st})
         ->
-    |   ^(VOID_METHOD_DECL m=modifierList g=genericTypeParameterList? IDENT 
+    |   ^(VOID_METHOD_DECL m=modifierList? g=genericTypeParameterList? IDENT 
             f=formalParameterList b=block?)
         { 
             // determine whether this is an entry method
-            entry = listContainsToken($m.start.getChildren(), ENTRY);
+            if ($m.st != null) {
+                entry = listContainsToken($m.start.getChildren(), ENTRY);
+            }
         }
         -> {emitCC()}? voidMethodDecl_cc(
                 modl={$m.st}, 
@@ -220,22 +224,24 @@ classScopeDeclaration
                 fpl={$f.st}, 
                 block={$b.st})
         ->
-    |   ^(PRIMITIVE_VAR_DECLARATION modifierList simpleType variableDeclaratorList)
-        -> {emitCC() || emitH()}? primitive_var_decl(
-            modList={$modifierList.st},
+    |   ^(PRIMITIVE_VAR_DECLARATION modifierList? simpleType variableDeclaratorList)
+        -> {emitCC() || emitH()}? class_var_decl(
+            modl={$modifierList.st},
             type={$simpleType.st},
             declList={$variableDeclaratorList.st})
         ->
-    |   ^(OBJECT_VAR_DECLARATION modifierList objectType variableDeclaratorList)
-        -> {emitCC() || emitH()}? object_var_decl(
-            modList={$modifierList.st},
+    |   ^(OBJECT_VAR_DECLARATION modifierList? objectType variableDeclaratorList)
+        -> {emitCC() || emitH()}? class_var_decl(
+            modl={$modifierList.st},
             type={$objectType.st},
             declList={$variableDeclaratorList.st})
         ->
-    |   ^(CONSTRUCTOR_DECL m=modifierList g=genericTypeParameterList? IDENT f=formalParameterList b=block)
+    |   ^(CONSTRUCTOR_DECL m=modifierList? g=genericTypeParameterList? IDENT f=formalParameterList b=block)
         { 
             // determine whether this is an entry method
-            entry = listContainsToken($m.start.getChildren(), ENTRY);
+            if ($m.st != null) {
+                entry = listContainsToken($m.start.getChildren(), ENTRY);
+            }
         }
         -> {emitCC()}? ctorDecl_cc(
                 modl={$m.st}, 
@@ -259,13 +265,13 @@ classScopeDeclaration
     ;
     
 interfaceScopeDeclaration
-    :   ^(FUNCTION_METHOD_DECL modifierList genericTypeParameterList? type IDENT formalParameterList arrayDeclaratorList?)
+    :   ^(FUNCTION_METHOD_DECL modifierList? genericTypeParameterList? type IDENT formalParameterList arrayDeclaratorList?)
         -> template(t={$text}) "/*interfaceScopeDeclarations-not implemented */ <t>"
-    |   ^(VOID_METHOD_DECL modifierList genericTypeParameterList? IDENT formalParameterList)
+    |   ^(VOID_METHOD_DECL modifierList? genericTypeParameterList? IDENT formalParameterList)
         -> template(t={$text}) "/*interfaceScopeDeclarations-not implemented */ <t>"
-    |   ^(PRIMITIVE_VAR_DECLARATION modifierList simpleType variableDeclaratorList)
+    |   ^(PRIMITIVE_VAR_DECLARATION modifierList? simpleType variableDeclaratorList)
         -> template(t={$text}) "/*interfaceScopeDeclarations-not implemented */ <t>"
-    |   ^(OBJECT_VAR_DECLARATION modifierList objectType variableDeclaratorList)
+    |   ^(OBJECT_VAR_DECLARATION modifierList? objectType variableDeclaratorList)
         -> template(t={$text}) "/*interfaceScopeDeclarations-not implemented */ <t>"
     ;
 
@@ -322,7 +328,7 @@ throwsClause
     ;
 
 modifierList
-    :   ^(MODIFIER_LIST (m+=modifier)*)
+    :   ^(MODIFIER_LIST (m+=modifier)+)
         -> mod_list(mods={$m})
     ;
 
@@ -341,7 +347,7 @@ $st = %{$start.getText()};
     ;
 
 localModifierList
-    :   ^(LOCAL_MODIFIER_LIST (m+=localModifier)*)
+    :   ^(LOCAL_MODIFIER_LIST (m+=localModifier)+)
         -> local_mod_list(mods={$m})
     ;
 
@@ -414,12 +420,12 @@ formalParameterList
     ;
     
 formalParameterStandardDecl
-    :   ^(FORMAL_PARAM_STD_DECL lms=localModifierList t=type vdid=variableDeclaratorId)
+    :   ^(FORMAL_PARAM_STD_DECL lms=localModifierList? t=type vdid=variableDeclaratorId)
         -> formal_param_decl(modList={$lms.st}, type={$t.st}, declID={$vdid.st})
     ;
     
 formalParameterVarargDecl
-    :   ^(FORMAL_PARAM_VARARG_DECL localModifierList type variableDeclaratorId)
+    :   ^(FORMAL_PARAM_VARARG_DECL localModifierList? type variableDeclaratorId)
         -> template(t={$text}) "/*formal parameter varargs not implemented*/ <t>"
     ;
     
@@ -448,13 +454,13 @@ blockStatement
 
 
 localVariableDeclaration
-    :   ^(PRIMITIVE_VAR_DECLARATION localModifierList simpleType variableDeclaratorList)
-        -> primitive_var_decl(
+    :   ^(PRIMITIVE_VAR_DECLARATION localModifierList? simpleType variableDeclaratorList)
+        -> local_var_decl(
             modList={null},
             type={$simpleType.st},
             declList={$variableDeclaratorList.st})
-    |   ^(OBJECT_VAR_DECLARATION localModifierList objectType variableDeclaratorList)
-        -> object_var_decl(
+    |   ^(OBJECT_VAR_DECLARATION localModifierList? objectType variableDeclaratorList)
+        -> local_var_decl(
             modList={null},
             type={$objectType.st},
             declList={$variableDeclaratorList.st})
@@ -470,7 +476,7 @@ statement
         -> if(cond={$parenthesizedExpression.st}, then={$then.st}, else_={$else_.st})
     |   ^('for' forInit cond=expression? (update+=expression)* s=statement)
         -> for(initializer={$forInit.st}, cond={$cond.st}, update={$update}, body={$s.st})
-    |   ^(FOR_EACH localModifierList type IDENT expression statement) 
+    |   ^(FOR_EACH localModifierList? type IDENT expression statement) 
         -> template(t={$text}) "/* foreach not implemented */ <t>"
     |   ^('while' pe=parenthesizedExpression s=statement)
         -> while(cond={$pe.st}, body={$s.st})
index 85b3ee072fe2a58c775c5ec06b57c2c2623e992a..267a903c57465742e81e3d3ce86729b9a6c5d9f5 100644 (file)
@@ -140,26 +140,26 @@ enumConstant
     ;
     
 classScopeDeclaration
-    :   ^(FUNCTION_METHOD_DECL m=modifierList g=genericTypeParameterList? 
+    :   ^(FUNCTION_METHOD_DECL m=modifierList? g=genericTypeParameterList? 
             ty=type IDENT f=formalParameterList a=arrayDeclaratorList? 
             b=block?)
-    |   ^(VOID_METHOD_DECL m=modifierList g=genericTypeParameterList? IDENT 
+    |   ^(VOID_METHOD_DECL m=modifierList? g=genericTypeParameterList? IDENT 
             f=formalParameterList b=block?)
-    |   ^(PRIMITIVE_VAR_DECLARATION modifierList simpleType variableDeclaratorList)
-    |   ^(OBJECT_VAR_DECLARATION modifierList objectType variableDeclaratorList)
-    |   ^(CONSTRUCTOR_DECL m=modifierList g=genericTypeParameterList? IDENT f=formalParameterList 
+    |   ^(PRIMITIVE_VAR_DECLARATION modifierList? simpleType variableDeclaratorList)
+    |   ^(OBJECT_VAR_DECLARATION modifierList? objectType variableDeclaratorList)
+    |   ^(CONSTRUCTOR_DECL m=modifierList? g=genericTypeParameterList? IDENT f=formalParameterList 
             b=block)
     ;
     
 interfaceScopeDeclaration
-    :   ^(FUNCTION_METHOD_DECL modifierList genericTypeParameterList? 
+    :   ^(FUNCTION_METHOD_DECL modifierList? genericTypeParameterList? 
             type IDENT formalParameterList arrayDeclaratorList?)
-    |   ^(VOID_METHOD_DECL modifierList genericTypeParameterList? IDENT formalParameterList)
+    |   ^(VOID_METHOD_DECL modifierList? genericTypeParameterList? IDENT formalParameterList)
         // Interface constant declarations have been switched to variable
         // declarations by Charj.g; the parser has already checked that
         // there's an obligatory initializer.
-    |   ^(PRIMITIVE_VAR_DECLARATION modifierList simpleType variableDeclaratorList)
-    |   ^(OBJECT_VAR_DECLARATION modifierList objectType variableDeclaratorList)
+    |   ^(PRIMITIVE_VAR_DECLARATION modifierList? simpleType variableDeclaratorList)
+    |   ^(OBJECT_VAR_DECLARATION modifierList? objectType variableDeclaratorList)
     ;
 
 variableDeclaratorList
@@ -200,7 +200,7 @@ bound
     ;
 
 modifierList
-    :   ^(MODIFIER_LIST (modifier)*)
+    :   ^(MODIFIER_LIST modifier+)
     ;
 
 modifier
@@ -214,7 +214,7 @@ modifier
     ;
 
 localModifierList
-    :   ^(LOCAL_MODIFIER_LIST localModifier*)
+    :   ^(LOCAL_MODIFIER_LIST localModifier+)
     ;
 
 localModifier
@@ -269,11 +269,11 @@ formalParameterList
     ;
     
 formalParameterStandardDecl
-    :   ^(FORMAL_PARAM_STD_DECL localModifierList type variableDeclaratorId)
+    :   ^(FORMAL_PARAM_STD_DECL localModifierList? type variableDeclaratorId)
     ;
     
 formalParameterVarargDecl
-    :   ^(FORMAL_PARAM_VARARG_DECL localModifierList type variableDeclaratorId)
+    :   ^(FORMAL_PARAM_VARARG_DECL localModifierList? type variableDeclaratorId)
     ;
     
 // FIXME: is this rule right? Verify that this is ok, I expected something like:
@@ -293,8 +293,8 @@ blockStatement
     ;
     
 localVariableDeclaration
-    :   ^(PRIMITIVE_VAR_DECLARATION localModifierList simpleType variableDeclaratorList)
-    |   ^(OBJECT_VAR_DECLARATION localModifierList objectType variableDeclaratorList)
+    :   ^(PRIMITIVE_VAR_DECLARATION localModifierList? simpleType variableDeclaratorList)
+    |   ^(OBJECT_VAR_DECLARATION localModifierList? objectType variableDeclaratorList)
     ;
 
 statement
@@ -302,7 +302,7 @@ statement
     |   ^('assert' expression expression?)
     |   ^('if' parenthesizedExpression statement statement?)
     |   ^('for' forInit expression? expression* statement)
-    |   ^(FOR_EACH localModifierList type IDENT expression statement) 
+    |   ^(FOR_EACH localModifierList? type IDENT expression statement) 
     |   ^('while' parenthesizedExpression statement)
     |   ^('do' statement parenthesizedExpression)
     |   ^('switch' parenthesizedExpression switchCaseLabel*)
@@ -443,8 +443,8 @@ literal
     |   FLOATING_POINT_LITERAL
     |   CHARACTER_LITERAL
     |   STRING_LITERAL          
-    |   TRUE
-    |   FALSE
-    |   NULL
+    |   'true'
+    |   'false'
+    |   'null'
     ;