Charj: output only member functions for .cc files, improve formatting
authorAaron Becker <akbecker@gmail.com>
Tue, 25 May 2010 22:51:07 +0000 (17:51 -0500)
committerAaron Becker <akbecker@gmail.com>
Tue, 25 May 2010 22:51:07 +0000 (17:51 -0500)
src/langs/charj/src/charj/translator/Charj.stg
src/langs/charj/src/charj/translator/CharjEmitter.g
src/langs/charj/src/charj/translator/ClassSymbol.java
src/langs/charj/src/charj/translator/Translator.java

index e3241568673e6fdfa9991f01b2c3304b3b47543e..ed7140bb163b6d7314bce7563c355921608cc47a 100644 (file)
@@ -1,30 +1,19 @@
 group Charj;
 
-charjSource_ci(pd, ids, tds, debug) ::= 
-//<pd>
-//<ids>
-<<
-<if(debug)>/* \<charjSource_ci> */<endif>
-/*
- * packageDeclaration disabled...
- * end packageDeclaration
- */
-
-/*
- * importDeclarations disabled...
-<ids>
- * end importDeclarations
- */
+charjSource_ci(basename, pd, ids, tds, debug) ::=
+<<
 
+// interface for <basename>
 <tds>
-<if(debug)>/* \</charjSource_ci> */<endif>
 
 >>
 
 
-charjSource_h(pd, ids, tds, debug) ::=
+charjSource_h(basename, pd, ids, tds, debug) ::=
 <<
-<if(debug)>/* \<CHARJ_SOURCE> */<endif>
+#ifndef __<basename>__
+#define __<basename>__
+
 /**************************************************************************
  * WARNING                                                                *
  **************************************************************************
@@ -35,25 +24,24 @@ charjSource_h(pd, ids, tds, debug) ::=
 <ids>
 <tds>
 
-<if(debug)>/* \</CHARJ_SOURCE> */<endif>
+#endif // __<basename>__
 
 >>
 
 
-charjSource_cc(pd, ids, tds, debug) ::=
+charjSource_cc(basename, pd, ids, tds, debug) ::=
 <<
-<if(debug)>/* \<CHARJ_SOURCE> */<endif>
+#include "<basename>.h"
+
 <ids>
 <tds>
-<if(debug)>/* \</CHARJ_SOURCE> */<endif>
+
 >>
 
 importDeclaration_cc_h(inc_id, use_id) ::= 
 <<
-<if(debug)>/* \<importDeclaration> */<endif>
 #include \<<inc_id>\>
 using <use_id>;
-<if(debug)>/* \</importDeclaration> */<endif>
 >>
 
 classExtends_ci(type) ::= "<type>"
@@ -105,14 +93,7 @@ classDeclaration_cc_cont(pds, sym, ident, ext, csds) ::=
     <classDeclaration_cc_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>
-
-    <csds; separator="\n\n">
-};
+<csds; separator="\n\n">
 <endif>
 >>
 
@@ -130,10 +111,8 @@ chareDeclaration_cc_cont(pds, sym, ident, ext, csds) ::=
 {
     <chareDeclaration_cc_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\n">
-};
+<else>
+<csds; separator="\n\n">
 <endif>
 >>
 
@@ -152,20 +131,18 @@ chareDeclaration_h_cont(pds, sym, ident, ext, csds) ::=
 <else>
 <if(ext)>/* superclass: <ext> */<endif>
 class <ident>: public CBase_<ident> {
-    <csds; separator="\n\n">
+    <csds; separator="\n">
 };
 <endif>
 >>
 
 chareDeclaration_ci(sym, chareType, arrayDim, ident, ext, csds) ::=
 <<
-<if(debug)>/* \<typeDeclaration> */<endif>
 module <ident> {
 <if(ext)>
     extern module <ext>;
 <endif>
     <chareDeclaration_ci_cont(pds = sym.packageNames, chareType = chareType, arrayDim = arrayDim, ident = ident, ext = ext, csds = csds)>
-<if(debug)>/* \</typeDeclaration> */<endif>
 }
 >>
 
@@ -178,7 +155,7 @@ chareDeclaration_ci_cont(pds, sym, chareType, arrayDim, ident, ext, csds) ::=
 } // namespace <first(pds)>
 <else>
 <chareType><if(arrayDim)> [<arrayDim>]<endif> <ident><if(ext)> : <ext><endif> {
-    <csds; separator="\n\n">
+    <csds; separator="\n">
 };
 <endif>
 >>
@@ -195,9 +172,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>
 }
 >>
@@ -217,7 +195,7 @@ ctorDecl_h(modl, gtpl, id, fpl, block) ::=
 
 ctorDecl_cc(modl, gtpl, id, fpl, block) ::=
 <<
-<if(modl)><modl>:<endif><gtpl> <id><fpl> {
+<gtpl> <id>::<id><fpl> {
     <block>
 }
 >>
index 012d6bb3cff08c4a58b55c89f4ff7fc7205e2b33..04f63ee1810ec51ad9911fbcf473e237c1359920 100644 (file)
@@ -33,6 +33,7 @@ package charj.translator;
     private boolean emitCI() { return mode_ == OutputMode.ci; }
     private boolean emitH() { return mode_ == OutputMode.h; }
     private boolean debug() { return translator_.debug(); }
+    private String basename() { return translator_.basename(); }
 
     /**
      *  Override ANTLR's token mismatch behavior so we throw exceptions early.
@@ -85,9 +86,9 @@ charjSource[SymbolTable symtab, OutputMode m]
     :   ^(CHARJ_SOURCE (p=packageDeclaration)? 
         (i+=importDeclaration)* 
         (t=typeDeclaration))
-        -> {emitCC()}? charjSource_cc(pd={$p.names}, ids={$i}, tds={$t.st}, debug={debug()})
-        -> {emitCI()}? charjSource_ci(pd={$p.names}, ids={$i}, tds={$t.st}, debug={debug()})
-        -> {emitH()}? charjSource_h(pd={$p.names}, ids={$i}, tds={$t.st}, debug={debug()})
+        -> {emitCC()}? charjSource_cc(basename={basename()}, pd={$p.names}, ids={$i}, tds={$t.st}, debug={debug()})
+        -> {emitCI()}? charjSource_ci(basename={basename()}, pd={$p.names}, ids={$i}, tds={$t.st}, debug={debug()})
+        -> {emitH()}? charjSource_h(basename={basename()}, pd={$p.names}, ids={$i}, tds={$t.st}, debug={debug()})
         ->
     ;
 
@@ -118,10 +119,11 @@ importDeclaration
     ;
     
 typeDeclaration
-    :   ^(TYPE 'class' IDENT (^('extends' su=type))? (^('implements' type+))? (csds+=classScopeDeclaration)*)
+    :   ^(TYPE 'class' IDENT (^('extends' su=type))? (^('implements' type+))?
         {
             currentClass = (ClassSymbol)$IDENT.symbol;
         }
+        (csds+=classScopeDeclaration)*)
         -> {emitCC()}? classDeclaration_cc(
                 sym={currentClass},
                 ident={$IDENT.text}, 
@@ -137,10 +139,11 @@ typeDeclaration
         -> template(t={$text}) "/*INTERFACE-not implemented*/ <t>"
     |   ^('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;
         }
+        (csds+=classScopeDeclaration)*)
         -> {emitCC()}? chareDeclaration_cc(
                 sym={currentClass},
                 ident={$IDENT.text}, 
@@ -197,6 +200,7 @@ classScopeDeclaration
             }
         }
         -> {emitCC()}? funcMethodDecl_cc(
+                sym={currentClass},
                 modl={modList}, 
                 gtpl={$g.st}, 
                 ty={$ty.st},
@@ -222,13 +226,13 @@ classScopeDeclaration
                 block={$b.st})
         ->
     |   ^(PRIMITIVE_VAR_DECLARATION modifierList? simpleType variableDeclaratorList)
-        -> {emitCC() || emitH()}? class_var_decl(
+        -> {emitH()}? class_var_decl(
             modl={$modifierList.st},
             type={$simpleType.st},
             declList={$variableDeclaratorList.st})
         ->
     |   ^(OBJECT_VAR_DECLARATION modifierList? objectType variableDeclaratorList)
-        -> {emitCC() || emitH()}? class_var_decl(
+        -> {emitH()}? class_var_decl(
             modl={$modifierList.st},
             type={$objectType.st},
             declList={$variableDeclaratorList.st})
index b7e0eb02912040845b57be69891219b489298579..297e39c8d92f38a782b95d02ca8b77410f576668 100644 (file)
@@ -225,4 +225,9 @@ public class ClassSymbol extends SymbolWithScope implements Scope {
         }
         return list;
     }
+
+    public String getName()
+    {
+        return name;
+    }
 }
index b0310e81c524d5accaa40bb9d26ed28334e14065..2f32b21911bcb03a1254ef51e113c3921d1808c1 100644 (file)
@@ -31,6 +31,7 @@ public class Translator {
     private String m_stdlib;
     private List<String> m_usrlibs;
 
+    private String m_basename;
     private SymbolTable m_symtab;
     private CommonTree m_ast;
     private CommonTreeNodeStream m_nodes;
@@ -57,6 +58,7 @@ public class Translator {
 
     public boolean debug()      { return m_debug; }
     public boolean verbose()    { return m_verbose; }
+    public String basename()    { return m_basename; }
 
     public static TreeAdaptor m_adaptor = new CommonTreeAdaptor() {
         public Object create(Token token) {
@@ -72,6 +74,8 @@ public class Translator {
     };
 
     public String translate(String filename) throws Exception {
+        m_basename = filename.substring(0, filename.lastIndexOf("."));
+
         ANTLRFileStream input = new ANTLRFileStream(filename);
             
         CharjLexer lexer = new CharjLexer(input);