Merged arrays into Charj mainline.
[charm.git] / src / langs / charj / src / charj / translator / Charj.stg
index 5266339cadd25b072788c29248a1030685dcc6d0..25178534a77f0df1db66058d9d90dc70227d2432 100644 (file)
@@ -1,31 +1,25 @@
 group Charj;
 
 group Charj;
 
-charjSource_ci(pd, ids, tds, debug) ::= 
-//<pd>
-//<ids>
+charjSource_ci(basename, pd, imports, types, ros, debug) ::=
 <<
 <<
-<if(debug)>/* \<charjSource_ci> */<endif>
-/*
- * packageDeclaration disabled...
-<pd>
- * end packageDeclaration
- */
 
 
-/*
- * importDeclarations disabled...
-<ids>
- * end importDeclarations
- */
-
-<tds>
-<if(debug)>/* \</charjSource_ci> */<endif>
+// interface for <basename>
+<imports; separator="\n">
+<types; separator="\n\n">
+<if(ros)>
 
 
+module <basename>_readonly {
+    <ros; separator="\n">
+}
+<endif>
 >>
 
 
 >>
 
 
-charjSource_h(pd, ids, tds, cb, debug) ::= 
+charjSource_h(basename, pd, imports, types, ros, debug) ::=
 <<
 <<
-<if(debug)>/* \<CHARJ_SOURCE> */<endif>
+#ifndef __<basename>__
+#define __<basename>__
+
 /**************************************************************************
  * WARNING                                                                *
  **************************************************************************
 /**************************************************************************
  * WARNING                                                                *
  **************************************************************************
@@ -33,40 +27,63 @@ charjSource_h(pd, ids, tds, cb, debug) ::=
  * It is not meant to be edited by hand and may be overwritten by charjc. *
  **************************************************************************/
 
  * It is not meant to be edited by hand and may be overwritten by charjc. *
  **************************************************************************/
 
-<pd>
-<ids>
-<tds>
-<cb>
+<imports; separator="\n">
+<types; separator="\n\n">
+<if(ros)>
+/* Readonly variables */
+<readonlys_h(pds = pd, ros = ros)>
+#include "<basename>_readonly.decl.h"
+<endif>
 
 
-<if(debug)>/* \</CHARJ_SOURCE> */<endif>
 
 
->>
+#endif // __<basename>__
+
 
 
+>>
 
 
-charjSource_cc(pd, ids, tds, cb, debug) ::= 
+charjSource_cc(basename, pd, imports, types, ros, debug) ::=
 <<
 <<
-<if(debug)>/* \<CHARJ_SOURCE> */<endif>
-<ids>
-<pd>
-<tds>
-<cb>
-<if(debug)>/* \</CHARJ_SOURCE> */<endif>
+#include "<basename>.h"
+
+<imports; separator="\n">
+<types; separator="\n\n">
+<if(ros)>
 
 
+/* Readonly variable support */
+<readonlys_cc(pds = pd, ros = ros, basename = basename)>
+<endif>
+
+
+>>
+
+readonlys_h(pds, ros) ::=
+<<
+<if(first(pds))>namespace <first(pds)>
+{
+    <readonlys_h(pds = rest(pds), ros = ros)>
+} // namespace <first(pds)>
+<else>
+<ros; separator="\n">
+<endif>
 >>
 
 >>
 
-packageDeclaration_cc_h(ids) ::= 
+readonlys_cc(pds, ros, basename) ::=
 <<
 <<
-<if(debug)>/* \<packageDeclaration> */<endif>
-namespace <ids; separator=" { namespace "> {
-<if(debug)>/* \</packageDeclaration> */<endif>
+<if(first(pds))>namespace <first(pds)>
+{
+    <readonlys_cc(pds = rest(pds), ros = ros, basename = basename)>
+} // namespace <first(pds)>
+<else>
+<ros; separator="\n">
+#include "<basename>_readonly.def.h"
+<endif>
+
 >>
 
 >>
 
-importDeclaration_cc_h(inc_id, use_id) ::= 
+importDeclaration_cc_h(inc_id, use_id) ::=
 <<
 <<
-<if(debug)>/* \<importDeclaration> */<endif>
 #include \<<inc_id>\>
 using <use_id>;
 #include \<<inc_id>\>
 using <use_id>;
-<if(debug)>/* \</importDeclaration> */<endif>
 >>
 
 classExtends_ci(type) ::= "<type>"
 >>
 
 classExtends_ci(type) ::= "<type>"
@@ -80,130 +97,191 @@ interfaceExtends(ts) ::=
 : public <ts; separator=", public ">
 >>
 
 : public <ts; separator=", public ">
 >>
 
-classDeclaration_h(ident, ext, csds) ::=
+type_preamble_h(sym) ::=
 <<
 <<
-/* superclass: <ext> */
-class <ident>: public CBase_<ident> {
-    <csds; separator="\n">
-};
+<sym.Includes:{include| #include \<<include>\>
+}>
+<sym.Usings:{using| using <using>;
+}>
+<sym.MemberTypeNames:{name| class <name>;
+}>
 >>
 
 >>
 
-classWrapper_h(ident, ext, csds, class1) ::=
+chare_preamble_h(sym) ::=
 <<
 <<
-<if(debug)>/* \<typeDeclaration> */<endif>
-
-#include "<ident>.decl.h"
-
-<classDeclaration_h(ident=ident, ext=ext, csds=csds)>
+<type_preamble_h(sym)>
+>>
 
 
-<if(debug)>/* \</typeDeclaration> */<endif>
+type_epilogue_h(sym) ::=
+<<
 >>
 
 >>
 
-templateDeclaration_h(tident, ident, ext, csds) ::=
+chare_epilogue_h(sym) ::=
 <<
 <<
-#include "<ident>.decl.h"
-template \<class <tident; separator=", class ">\>
-<classDeclaration_h(ident=ident, ext=ext, csds=csds)>
+<type_epilogue_h(sym)>
 >>
 
 >>
 
-classDeclaration_cc(ident, ext, csds) ::=
+classDeclaration_h(sym, ident, ext, csds, tident) ::=
 <<
 <<
-<if(debug)>/* \<typeDeclaration> */<endif>
+<type_preamble_h(sym)>
+<if(tident)>
+<templateDeclaration_h_cont(pds = sym.packageNames, sym = sym, ident = ident, ext = ext, csds = csds, tident = tident)>
+<else>
+<classDeclaration_h_cont(pds = sym.packageNames, sym = sym, ident = ident, ext = ext, csds = csds)>
+<endif>
+<type_epilogue_h(sym)>
+>>
 
 
+classDeclaration_h_cont(pds, sym, ident, ext, csds) ::=
+<<
+<if(first(pds))>namespace <first(pds)>
+{
+    <classDeclaration_h_cont(pds = rest(pds), sym = sym, ident = ident, ext = ext, csds = csds)>
+} // namespace <first(pds)>
+<else>
+<if(ext)>
+class <ident> : public <ext> {
+<else>
+class <ident> {
+<endif>
 
 
-#include "<ident>.decl.h"
-/* superclass: <ext> */
-class <ident>: public CBase_<ident> {
-    <csds; separator="\n">
+    <csds; separator="\n\n">
 };
 };
-#include "<ident>.def.h"
-<if(debug)>/* \</typeDeclaration> */<endif>
+<endif>
+>>
 
 
+templateDeclaration_h(pds, sym, ident, ext, csds, tident) ::=
+<<
+template \<class <tident; separator=", class ">\>
+<classDeclaration_h_cont(pds=pds, sym=sym, ident=ident, ext=ext, csds=csds)>
 >>
 
 >>
 
+classDeclaration_cc(sym, ident, ext, csds) ::=
+<<
+<classDeclaration_cc_cont(pds = sym.packageNames, sym = sym, ident = ident, ext = ext, csds = csds)>
+>>
 
 
-charedeclaration_ci(chareType, arrayDim, ident, ext, csds) ::=
+classDeclaration_cc_cont(pds, sym, ident, ext, csds) ::=
 <<
 <<
-<if(debug)>/* \<typeDeclaration> */<endif>
-module <ident> {
-<if(ext)>
-    extern module <ext>;
-    <chareType><if(arrayDim)> [<arrayDim>]<endif> <ident>: <ext> {
+<if(first(pds))>namespace <first(pds)>
+{
+    <classDeclaration_cc_cont(pds = rest(pds), sym = sym, ident = ident, ext = ext, csds = csds)>
+} // namespace <first(pds)>
 <else>
 <else>
-    <chareType><if(arrayDim)> [<arrayDim>]<endif> <ident> {
+<csds; separator="\n\n">
 <endif>
 <endif>
-        <csds; separator="\n">
-    }
-}
-
-<if(debug)>/* \</typeDeclaration> */<endif>
-
 >>
 
 
 >>
 
 
-funcMethodDecl_h(modl, gtpl, ty, id, fpl, adl, block) ::=
+chareDeclaration_cc(sym, ident, ext, csds) ::=
 <<
 <<
-<if(modl)><modl>: <endif><ty> <gtpl> <id><fpl> <adl>;
+#include "<ident>.decl.h"
+<chareDeclaration_cc_cont(pds = sym.packageNames, sym = sym, ident = ident, ext = ext, csds = csds)>
+#include "<ident>.def.h"
 >>
 
 >>
 
+chareDeclaration_cc_cont(pds, sym, ident, ext, csds) ::=
+<<
+<if(first(pds))>namespace <first(pds)>
+{
+    <chareDeclaration_cc_cont(pds = rest(pds), sym = sym, ident = ident, ext = ext, csds = csds)>
+} // namespace <first(pds)>
+<else>
+<csds; separator="\n\n">
+<endif>
+>>
 
 
-funcMethodDecl_ci(modl, gtpl, ty, id, fpl, adl, block) ::=
+chareDeclaration_h(sym, ident, ext, csds) ::=
 <<
 <<
-entry <ty> <gtpl> <id><fpl> <adl>;
+<chare_preamble_h(sym)>
+#include "<ident>.decl.h"
+<chareDeclaration_h_cont(pds = sym.packageNames, sym = sym, ident = ident, ext = ext, csds = csds)>
+<chare_epilogue_h(sym)>
 >>
 
 >>
 
+chareDeclaration_h_cont(pds, sym, ident, ext, csds) ::=
+<<
+<if(first(pds))>namespace <first(pds)>
+{
+    <chareDeclaration_h_cont(pds = rest(pds), sym = sym, ident = ident, ext = ext, csds = csds)>
+} // namespace <first(pds)>
+<else>
+<if(ext)>/* superclass: <ext> */<endif>
+class <ident>: public CBase_<ident> {
+    <csds; separator="\n">
+};
+<endif>
+>>
 
 
-funcMethodDecl_cc(modl, gtpl, ty, id, fpl, adl, block) ::=
+chareDeclaration_ci(sym, chareType, arrayDim, ident, ext, csds) ::=
 <<
 <<
-<if(modl)><modl>: <endif><ty> <gtpl> <id><fpl> <adl> {
-    <block>
+<if(sym.isMainChare)>main<endif>module <ident> {
+<if(ext)>
+    extern module <ext>;
+<endif>
+    <sym.Externs:{ext| extern module <ext>;
+    }>
+    <chareDeclaration_ci_cont(pds = sym.packageNames, chareType = chareType, arrayDim = arrayDim, ident = ident, ext = ext, csds = csds)>
 }
 >>
 
 
 }
 >>
 
 
-voidMethodDecl_ci(modl, gtpl, id, fpl, block) ::=
+chareDeclaration_ci_cont(pds, sym, chareType, arrayDim, ident, ext, csds) ::=
 <<
 <<
-entry void<gtpl> <id><fpl>;
+<if(first(pds))>namespace <first(pds)>
+{
+    <chareDeclaration_ci_cont(pds = rest(pds), sym = sym, chareType = chareType, arrayDim = arrayDim, ident = ident, ext = ext, csds = csds)>
+} // namespace <first(pds)>
+<else>
+<chareType><if(arrayDim)> [<arrayDim>]<endif> <ident><if(ext)> : <ext><endif> {
+    <csds; separator="\n">
+};
+<endif>
 >>
 
 >>
 
+funcMethodDecl_h(modl, gtpl, ty, id, fpl, adl, block) ::=
+<<
+<modl><ty><gtpl> <id><fpl><adl>;
+>>
 
 
-voidMethodDecl_h(modl, gtpl, id, fpl, block) ::=
+
+funcMethodDecl_ci(modl, gtpl, ty, id, fpl, adl, block) ::=
 <<
 <<
-<if(modl)><modl>: <endif>void<gtpl> <id><fpl>;
+<modl><ty><gtpl> <id><fpl><adl>;
 >>
 
 
 >>
 
 
-voidMethodDecl_cc(modl, gtpl, id, fpl, block) ::=
+funcMethodDecl_cc(sym, modl, gtpl, ty, id, fpl, adl, block) ::=
 <<
 <<
-<if(modl)><modl>: <endif>void<gtpl> <id><fpl> {
-    <block>
-}
+<modl><ty><gtpl> <sym.Name>::<id><fpl><adl>
+<block>
 >>
 
 
 ctorDecl_ci(modl, gtpl, id, fpl, block) ::=
 <<
 >>
 
 
 ctorDecl_ci(modl, gtpl, id, fpl, block) ::=
 <<
-entry void<gtpl> <id><fpl>;
+<modl>void<gtpl> <id><fpl>;
 >>
 
 
 ctorDecl_h(modl, gtpl, id, fpl, block) ::=
 <<
 >>
 
 
 ctorDecl_h(modl, gtpl, id, fpl, block) ::=
 <<
-<if(modl)><modl>:<endif><gtpl> <id><fpl>;
+<modl><id><fpl>;
 >>
 
 
 ctorDecl_cc(modl, gtpl, id, fpl, block) ::=
 <<
 >>
 
 
 ctorDecl_cc(modl, gtpl, id, fpl, block) ::=
 <<
-<if(modl)><modl>:<endif><gtpl> <id><fpl> {
-    <block>
-}
+<modl><id>::<id><fpl>
+<block>
 >>
 
 
 block_cc(bsl) ::=
 <<
 >>
 
 
 block_cc(bsl) ::=
 <<
-<bsl:{s| <s><\n>}>
+{
+    <bsl; separator="\n">
+}
 >>
 
 
 >>
 
 
@@ -217,12 +295,7 @@ embed_cc(str, blk) ::=
 
 class_var_decl(modl, type, declList) ::=
 <<
 
 class_var_decl(modl, type, declList) ::=
 <<
-<if(modl)>
-<modl>:
-<else>
-public: 
-<endif>
-<type> <declList>;
+<modl><type> <declList>;
 >>
 
 
 >>
 
 
@@ -232,11 +305,20 @@ var_decl_list(var_decls) ::=
 >>
 
 
 >>
 
 
-var_decl(id, initializer) ::=
+var_decl_cc(id, initializer) ::=
 <<
 <id><if(initializer)> = <initializer><endif>
 >>
 
 <<
 <id><if(initializer)> = <initializer><endif>
 >>
 
+var_decl_h(id, initializer) ::=
+<<
+<id>
+>>
+
+var_decl_ci(id, initializer) ::=
+<<
+<id><if(initializer)> = <initializer><endif>
+>>
 
 var_decl_id(id, domainExp) ::=
 <<
 
 var_decl_id(id, domainExp) ::=
 <<
@@ -250,34 +332,59 @@ var_id_decl(id, adl) ::=
 >>
 
 
 >>
 
 
-mod_list(mods) ::=
+mod_list_cc(accmods, localmods, charjmods, othermods) ::=
 <<
 <<
-<if(mods)><mods; separator=" "><endif>
+<if(localmods)><localmods; separator=" "> <endif><if(othermods)><othermods; separator=" "> <endif>
 >>
 
 >>
 
+mod_list_h(accmods, localmods, charjmods, othermods) ::=
+<<
+<if(accmods)><accmods; separator=" ">: <endif><if(othermods)><othermods; separator=" "> <endif>
+>>
 
 
-local_mod_list(mods) ::=
+mod_list_ci(accmods, localmods, charjmods, othermods) ::=
 <<
 <<
-<if(mods)><mods; separator=" "><endif>
+<if(charjmods)><charjmods; separator=" "> <endif>
 >>
 >>
 
 local_var_decl(modList, type, declList, domainExps) ::=
 <<
 
 local_var_decl(modList, type, declList, domainExps) ::=
 <<
-<if(modList)>
-<modList> <type> <declList>
-<else>
-<type> <declList>;
-<endif>
+<if(modList)><modList> <endif><type> <declList>;
+>>
+
+local_mod_list(mods) ::= 
+<<
+<mods; separator=" ">
 >>
 
 
 >>
 
 
-type(typeID, arrDeclList) ::=
+simple_type(typeID, arrDeclList) ::=
 <<
 <typeID><arrDeclList>
 >>
 
 
 <<
 <typeID><arrDeclList>
 >>
 
 
+obj_type(typeID, arrDeclList) ::=
+<<
+<typeID><arrDeclList>
+>>
+
+proxy_type(typeID, arrDeclList) ::=
+<<
+CProxy_<typeID><arrDeclList>
+>>
+
+pointer_type(typeID, arrDeclList) ::=
+<<
+<typeID>*<arrDeclList>
+>>
+
+reference_type(typeID, arrDeclList) ::=
+<<
+<typeID>&<arrDeclList>
+>>
+
+
 typeIdent(typeID, generics) ::=
 <<
 <typeID><generics>
 typeIdent(typeID, generics) ::=
 <<
 <typeID><generics>
@@ -318,33 +425,23 @@ CkAssert(<cond>);
 
 if(cond, then, else_) ::=
 <<
 
 if(cond, then, else_) ::=
 <<
-if <cond> {
-    <then>
-}<if(else_)> else {
-    <else_>
-}<endif>
+if <cond> <then><if(else_)> else <else_><endif>
 >>
 
 
 for(initializer, cond, update, body) ::=
 <<
 >>
 
 
 for(initializer, cond, update, body) ::=
 <<
-for (<initializer> <cond> <update>) {
-    <body>
-}
+for (<if(initializer)><initializer><else>;<endif> <cond>; <update; separator=", ">) <body>
 >>
 
 while(cond, body) ::=
 <<
 >>
 
 while(cond, body) ::=
 <<
-while <cond> {
-    <body>
-} 
+while <cond> <body>
 >>
 
 dowhile(cond, body) ::=
 <<
 >>
 
 dowhile(cond, body) ::=
 <<
-do {
-    <body>
-} while <cond>;
+do <body> while <cond>;
 >>
 
 
 >>
 
 
@@ -370,16 +467,6 @@ case(expr, block) ::=
 case <expr>: <block>
 >>
 
 case <expr>: <block>
 >>
 
-for_cond(expr) ::=
-<<
-<expr>
->>
-
-for_update(exprs) ::=
-<<
-<exprs; separator=", ">
->>
-
 method_call(primary, generic_types, args) ::=
 <<
 <if(generic_types)>
 method_call(primary, generic_types, args) ::=
 <<
 <if(generic_types)>
@@ -399,7 +486,7 @@ array_construction_with_init(array_decls, initializer) ::=
 array_construction(exprs, array_decls) ::=
 <<
 [<exprs; separator="][">]<array_decls>
 array_construction(exprs, array_decls) ::=
 <<
 [<exprs; separator="][">]<array_decls>
->> 
+>>
 
 
 arguments(exprs) ::=
 
 
 arguments(exprs) ::=
@@ -407,10 +494,30 @@ arguments(exprs) ::=
 <exprs; separator=", ">
 >>
 
 <exprs; separator=", ">
 >>
 
+print(exprs) ::=
+<<
+<if(first(exprs))>cout <exprs : { n | \<\< <n> }>;<endif>
+>>
+
+println(exprs) ::=
+<<
+cout<if(first(exprs))> <exprs : { n | \<\< <n> }><else> <endif>\<\< endl;
+>>
+
+exit(expr) ::=
+<<
+<if(expr)>exit(<expr>)<else>exit(0)<endif>;
+>>
+
+exitall() ::=
+<<
+CkExit();
+>>
+
 range_constructor(range, others, len) ::=
 <<
 <if(range)>
 Domain\<<len>\>(<range>)<if(others)>, <others; separator=", "><endif>
 <else>
 <endif>
 range_constructor(range, others, len) ::=
 <<
 <if(range)>
 Domain\<<len>\>(<range>)<if(others)>, <others; separator=", "><endif>
 <else>
 <endif>
->>
\ No newline at end of file
+>>