code cleanup, template tweak
authorAaron Becker <abecker3@illinois.edu>
Tue, 10 Jun 2008 08:49:59 +0000 (08:49 +0000)
committerAaron Becker <abecker3@illinois.edu>
Tue, 10 Jun 2008 08:49:59 +0000 (08:49 +0000)
src/langs/charj/src/charj/translator/Charj.g
src/langs/charj/src/charj/translator/Charj.stg
src/langs/charj/src/charj/translator/CharjEmitter.g

index 6e39a4582fb5c911ea12ee92c7833c47226eebbd..2ea190e00ef9cf67df329164694c3a41932331fd 100644 (file)
@@ -1089,7 +1089,7 @@ WS  :  (' '|'\r'|'\t'|'\u000C'|'\n')
     ;
 
 EMBED_BLOCK
-    :   DOUBLE_LCURLY '\n'?
+    :   DOUBLE_LCURLY
         ( options {greedy=false;} : . )* 
         DOUBLE_RCURLY 
     ;
index edc97eefcf1155be25eac4616aa0d95ce8187bb4..714a10386118e85a47d710da7f59e053543ba5be 100644 (file)
@@ -153,7 +153,7 @@ block_cc(bsl) ::=
 
 embed_cc(str, blk) ::=
 <<
-// embedded block: <str>
+// begin embedded block: <str>
 <blk>
 // end embedded block: <str>
 >>
index e2dd50c762ed7ac31ffa2f35449ed8abf9167279..a6459c4c6f4d4e15d6338ce7e2e758b6b390e720 100644 (file)
@@ -85,6 +85,20 @@ package charj.translator;
     public boolean hasErrors() {
         return m_hasErrors;
     }
+
+    /**
+     *  Test a list of CharjAST nodes to see if any of them has the given token
+     *  type.
+     */
+    public boolean listContainsToken(List<CharjAST> list, int tokenType) {
+        for (CharjAST node : list) {
+            if (node.token.getType() == tokenType) {
+                return true;
+            }
+        }
+        return false;
+    }
+
 }
 
 // Starting point for parsing a Charj file.
@@ -201,12 +215,13 @@ classScopeDeclarations
             tc=throwsClause? b=block?)
         { 
             // determine whether this is an entry method
-            CharjAST modList = (CharjAST)$m.start;
-            for (CharjAST mod : (List<CharjAST>)modList.getChildren()) {
-                if (mod.token.getType() == ENTRY) {
-                    entry = true;
-                }
-            }
+            entry = listContainsToken($m.start.getChildren(), ENTRY);
+//            CharjAST modList = (CharjAST)$m.start;
+//            for (CharjAST mod : (List<CharjAST>)modList.getChildren()) {
+//                if (mod.token.getType() == ENTRY) {
+//                    entry = true;
+//                }
+//            }
         }
         -> {emitCC()}? funcMethodDecl_cc(
                 modl={$m.st}, 
@@ -269,8 +284,6 @@ classScopeDeclarations
                 tc={$t.st}, 
                 block={$b.st})
         ->
-
-// template(t={$text}) "/*voidmethod*/ <t>"
     |   ^(VAR_DECLARATION modifierList type variableDeclaratorList)
         -> template(t={$text}) "vardecl <t>"
     |   ^(CONSTRUCTOR_DECL m=modifierList g=genericTypeParameterList? IDENT f=formalParameterList