Charj : replaced occurrences of common keywords (eg 'int') with
authorMinas Charalambides <charala1@illinois.edu>
Mon, 24 May 2010 06:10:30 +0000 (01:10 -0500)
committerMinas Charalambides <charala1@illinois.edu>
Mon, 24 May 2010 07:43:22 +0000 (02:43 -0500)
            the respective tokens (eg INT) which have been added to
            Charj.g

src/langs/charj/src/charj/translator/Charj.g
src/langs/charj/src/charj/translator/CharjAST.java
src/langs/charj/src/charj/translator/CharjASTModifier.g
src/langs/charj/src/charj/translator/CharjEmitter.g
src/langs/charj/src/charj/translator/CharjSemantics.g
src/langs/charj/src/charj/translator/PupRoutineCreator.java [new file with mode: 0644]

index 3547067638df15180879f44fa3b2d8cc196731c4..2b1b3581c2301d5573f5355cbfed979b4d6f9e18 100644 (file)
@@ -16,7 +16,55 @@ options {
 }
 
 tokens {
+
+    ENTRY                   = 'entry'           ;
+    PUBLIC                  = 'public'          ;
+    PROTECTED               = 'protected'       ;
     ENTRY                   = 'entry'           ;
+    PRIVATE                 = 'private'         ;
+    ABSTRACT                = 'abstract'        ;
+    NATIVE                  = 'native'          ;
+    FINAL                   = 'final'           ;
+    STATIC                  = 'static'          ;
+    VOLATILE                = 'volatile'        ;
+    VOID                    = 'void'            ;
+    BOOLEAN                 = 'boolean'         ;
+    CHAR                    = 'char'            ;
+    BYTE                    = 'byte'            ;
+    SHORT                   = 'short'           ;
+    INT                     = 'int'             ;
+    LONG                    = 'long'            ;
+    FLOAT                   = 'float'           ;
+    DOUBLE                  = 'double'          ;
+    TRUE                    = 'true'            ;
+    FALSE                   = 'false'           ;
+    NULL                    = 'null'            ;
+    THIS                    = 'this'            ;
+    SUPER                   = 'super'           ;
+    CHARE                   = 'chare'           ;
+    CHARE_ARRAY             = 'chare_array'     ;
+    INTERFACE               = 'interface'       ;
+    PACKAGE                 = 'package'         ;
+    IMPORT                  = 'import'          ;
+    CLASS                   = 'class'           ;
+    EXTENDS                 = 'extends'         ;
+    GROUP                   = 'group'           ;
+    NODEGROUP               = 'nodegroup'       ;
+    ENUM                    = 'enum'            ;
+
+    FOR                     = 'for'             ;
+    WHILE                   = 'while'           ;
+    IF                      = 'if'              ;
+    CASE                    = 'case'            ;
+    SWITCH                  = 'switch'          ;
+    RETURN                  = 'return'          ;
+    ELSE                    = 'else'            ;
+    CONTINUE                = 'continue'        ;
+    DO                      = 'do'              ;
+    DEFAULT                 = 'default'         ;
+    WHILE                   = 'while'           ;
+    THROW                   = 'throw'           ;
+    BREAK                   = 'break'           ;
 
     // C++ keywords that aren't used in charj. 
     // We don't use these ourselves, but they're still reserved
@@ -129,12 +177,12 @@ compilationUnit
     ;
 
 packageDeclaration
-    :   'package' IDENT ('.' IDENT)+ ';'  
-        ->  ^('package' IDENT+)
+    :   PACKAGE IDENT ('.' IDENT)+ ';'  
+        ->  ^(PACKAGE IDENT+)
     ;
 
 importDeclaration
-    :   'import'^ qualifiedIdentifier '.*'? ';'!
+    :   IMPORT^ qualifiedIdentifier '.*'? ';'!
     ;
 
 typeDeclaration
@@ -145,38 +193,38 @@ typeDeclaration
     ;
 
 classDefinition
-    :   'public'? 'class' IDENT ('extends' type)? ('implements' typeList)? '{'
+    :   PUBLIC? CLASS IDENT (EXTENDS type)? ('implements' typeList)? '{'
             classScopeDeclaration*
         '}' ';'?
-        -> ^(TYPE 'class' IDENT ^('extends' type)? ^('implements' typeList)? classScopeDeclaration*)
+        -> ^(TYPE CLASS IDENT ^(EXTENDS type)? ^('implements' typeList)? classScopeDeclaration*)
     ;
 
 chareType
-    :   'chare'
-    |   'group'
-    |   'nodegroup'
-    |   'chare_array' '[' ARRAY_DIMENSION ']' -> ^('chare_array' ARRAY_DIMENSION)
+    :   CHARE
+    |   GROUP
+    |   NODEGROUP
+    |   CHARE_ARRAY '[' ARRAY_DIMENSION ']' -> ^(CHARE_ARRAY ARRAY_DIMENSION)
     ;
 
 chareDefinition
-    :   'public'? chareType IDENT ('extends' type)? ('implements' typeList)? '{'
+    :   PUBLIC? chareType IDENT (EXTENDS type)? ('implements' typeList)? '{'
             classScopeDeclaration*
         '}' ';'?
-        -> ^(TYPE chareType IDENT ^('extends' type)? ^('implements' typeList)? classScopeDeclaration*)
+        -> ^(TYPE chareType IDENT ^(EXTENDS type)? ^('implements' typeList)? classScopeDeclaration*)
     ;
 
 interfaceDefinition
-    :   'interface' IDENT ('extends' typeList)?  '{'
+    :   'interface' IDENT (EXTENDS typeList)?  '{'
             interfaceScopeDeclaration*
         '}' ';'?
-        -> ^('interface' IDENT ^('extends' typeList)? interfaceScopeDeclaration*)
+        -> ^('interface' IDENT ^(EXTENDS typeList)? interfaceScopeDeclaration*)
     ;
 
 enumDefinition
-    :   'enum' IDENT ('implements' typeList)? '{'
+    :   ENUM IDENT ('implements' typeList)? '{'
             enumConstants ','? ';' classScopeDeclaration*
         '}' ';'?
-        -> ^('enum' IDENT ^('implements' typeList)? enumConstants classScopeDeclaration*)
+        -> ^(ENUM IDENT ^('implements' typeList)? enumConstants classScopeDeclaration*)
     ;
 
 enumConstants
@@ -287,7 +335,7 @@ genericTypeParameter
     ;
 
 bound
-    :   e='extends' type ('&' type)*
+    :   e=EXTENDS type ('&' type)*
         ->  ^(EXTENDS_BOUND_LIST[$e, "EXTENDS_BOUND_LIST"] type+)
     ;
 
@@ -297,12 +345,12 @@ modifierList
     ;
 
 modifier
-    :   'public'
-    |   'protected'
-    |   'entry'
-    |   'private'
-    |   'abstract'
-    |   'native'
+    :   PUBLIC
+    |   PROTECTED
+    |   ENTRY
+    |   PRIVATE
+    |   ABSTRACT
+    |   NATIVE
     |   localModifier
     ;
 
@@ -312,15 +360,15 @@ localModifierList
     ;
 
 localModifier
-    :   'final'
-    |   'static'
-    |   'volatile'
+    :   FINAL
+    |   STATIC
+    |   VOLATILE
     ;
 
 type
     :   simpleType
     |   objectType
-    |   'void'
+    |   VOID
     ;
 
 simpleType
@@ -343,14 +391,14 @@ typeIdent
     ;
 
 primitiveType
-    :   'boolean'
-    |   'char'
-    |   'byte'
-    |   'short'
-    |   'int'
-    |   'long'
-    |   'float'
-    |   'double'
+    :   BOOLEAN
+    |   CHAR
+    |   BYTE
+    |   SHORT
+    |   INT
+    |   LONG
+    |   FLOAT
+    |   DOUBLE
     ;
 
 genericTypeArgumentList
@@ -425,32 +473,32 @@ statement
         |   ';'
             ->  ^('assert' $expr1)
         )
-    |   'if' parenthesizedExpression ifStat=statement 
-        (   'else' elseStat=statement
-            ->  ^('if' parenthesizedExpression $ifStat $elseStat)
+    |   IF parenthesizedExpression ifStat=statement 
+        (   ELSE elseStat=statement
+            ->  ^(IF parenthesizedExpression $ifStat $elseStat)
         |
-            ->  ^('if' parenthesizedExpression $ifStat)
+            ->  ^(IF parenthesizedExpression $ifStat)
         )   
-    |   f='for' '('
+    |   f=FOR '('
         (   forInit? ';' expression? ';' expressionList? ')' statement
             -> ^($f forInit? FOR_EXPR expression? FOR_UPDATE expressionList? statement)
         |   localModifierList? type IDENT ':' expression ')' statement
             -> ^(FOR_EACH[$f, "FOR_EACH"] localModifierList? type IDENT expression statement)
         )
-    |   'while' parenthesizedExpression statement
-        ->  ^('while' parenthesizedExpression statement)
-    |   'do' statement 'while' parenthesizedExpression ';'
-        ->  ^('do' statement parenthesizedExpression)
-    |   'switch' parenthesizedExpression '{' switchCaseLabel* '}'
-        ->  ^('switch' parenthesizedExpression switchCaseLabel*)
-    |   'return' expression? ';'
-        ->  ^('return' expression?)
-    |   'throw' expression ';'
-        ->  ^('throw' expression)
-    |   'break' IDENT? ';'
-        ->  ^('break' IDENT?)
-    |   'continue' IDENT? ';'
-        ->  ^('continue' IDENT?)
+    |   WHILE parenthesizedExpression statement
+        ->  ^(WHILE parenthesizedExpression statement)
+    |   DO statement WHILE parenthesizedExpression ';'
+        ->  ^(DO statement parenthesizedExpression)
+    |   SWITCH parenthesizedExpression '{' switchCaseLabel* '}'
+        ->  ^(SWITCH parenthesizedExpression switchCaseLabel*)
+    |   RETURN expression? ';'
+        ->  ^(RETURN expression?)
+    |   THROW expression ';'
+        ->  ^(THROW expression)
+    |   BREAK IDENT? ';'
+        ->  ^(BREAK IDENT?)
+    |   CONTINUE IDENT? ';'
+        ->  ^(CONTINUE IDENT?)
     |   IDENT ':' statement
         ->  ^(LABELED_STATEMENT IDENT statement)
     |   'embed' STRING_LITERAL EMBED_BLOCK
@@ -461,8 +509,8 @@ statement
         
 
 switchCaseLabel
-    :   'case'^ expression ':'! blockStatement*
-    |   'default'^ ':'! blockStatement*
+    :   CASE^ expression ':'! blockStatement*
+    |   DEFAULT^ ':'! blockStatement*
     ;
     
 forInit
@@ -727,9 +775,9 @@ literal
     |   FLOATING_POINT_LITERAL
     |   CHARACTER_LITERAL
     |   STRING_LITERAL
-    |   'true'
-    |   'false'
-    |   'null'
+    |   TRUE
+    |   FALSE
+    |   NULL
     ;
 
 // LEXER
index 53ef518b7c5b241fe909e6f581a5963c5518e406..81fc10ed10ff83e0d96422b502b59b7642b3a3a0 100644 (file)
@@ -3,6 +3,7 @@ package charj.translator;
 import org.antlr.runtime.tree.CommonTree;
 import org.antlr.runtime.Token;
 import org.antlr.runtime.CommonToken;
+import java.util.*;
 
 /**
  * Custom subclass of Antlr's tree node. Doesn't do anything special yet,
@@ -22,6 +23,21 @@ public class CharjAST extends CommonTree
         super(new CommonToken(type, text));
     }
 
+    public CharjAST getParent()
+    {
+        return (CharjAST) super.getParent();
+    }
+
+    public List<CharjAST> getChildren()
+    {
+        return (List<CharjAST>) super.getChildren();
+    }
+
+    public CharjAST getChild(int index)
+    {
+        return (CharjAST) super.getChild(index);
+    }
+
     public String toString() {
         String s = super.toString();
         if (symbol != null) {
index 15120b65ebd6e659654edfef0e0ab7a747281f0a..08d0a464c04c07a5d36895e7827180ef0b0ff21d 100644 (file)
@@ -24,6 +24,8 @@ package charj.translator;
     MethodSymbol currentMethod = null;
     LocalScope currentLocalScope = null;
     Translator translator;
+
+    PupRoutineCreator puper = new PupRoutineCreator();
 }
 
 // Replace default ANTLR generated catch clauses with this action, allowing early failure.
@@ -50,7 +52,7 @@ charjSource[SymbolTable _symtab] returns [ClassSymbol cs]
     ;
 
 packageDeclaration
-    :   ^('package' (ids+=IDENT)+)  
+    :   ^(PACKAGE (ids+=IDENT)+)  
     ;
     
 importDeclarations returns [List<CharjAST> packageNames]
@@ -58,16 +60,16 @@ importDeclarations returns [List<CharjAST> packageNames]
     ;
 
 typeDeclaration[List<CharjAST> imports] returns [ClassSymbol sym]
-    :   ^(TYPE ('class' | chareType) IDENT (^('extends' parent=type))? (^('implements' type+))? classScopeDeclaration*)
-    |   ^('interface' IDENT (^('extends' type+))?  interfaceScopeDeclaration*)
-    |   ^('enum' IDENT (^('implements' type+))? enumConstant+ classScopeDeclaration*)
+    :   ^(TYPE (CLASS | chareType) IDENT (^('extends' parent=type))? (^('implements' type+))? classScopeDeclaration*)
+    |   ^(INTERFACE IDENT (^('extends' type+))?  interfaceScopeDeclaration*)
+    |   ^(ENUM IDENT (^('implements' type+))? enumConstant+ classScopeDeclaration*)
     ;
 
 chareType
-    :   'chare'
-    |   'group'
-    |   'nodegroup'
-    |   ^('chare_array' ARRAY_DIMENSION)
+    :   CHARE
+    |   GROUP
+    |   NODEGROUP
+    |   ^(CHARE_ARRAY ARRAY_DIMENSION)
     ;
 
 enumConstant
@@ -80,7 +82,13 @@ classScopeDeclaration
             b=block?)
 
     |   ^(PRIMITIVE_VAR_DECLARATION modifierList? simpleType variableDeclaratorList)
+        {
+            puper.primitiveVarPup($PRIMITIVE_VAR_DECLARATION); // TODO: arrays
+        }
     |   ^(OBJECT_VAR_DECLARATION modifierList? objectType variableDeclaratorList)
+        {
+            puper.objectVarPup($OBJECT_VAR_DECLARATION);
+        }
     |   ^(CONSTRUCTOR_DECL m=modifierList? g=genericTypeParameterList? IDENT f=formalParameterList 
             b=block)
     ;
@@ -137,12 +145,12 @@ modifierList
     ;
 
 modifier
-    :   'public'
-    |   'protected'
-    |   'private'
-    |   'entry'
-    |   'abstract'
-    |   'native'
+    :   PUBLIC
+    |   PROTECTED
+    |   PRIVATE
+    |   ENTRY
+    |   ABSTRACT
+    |   NATIVE
     |   localModifier
     ;
 
@@ -151,15 +159,15 @@ localModifierList
     ;
 
 localModifier
-    :   'final'
-    |   'static'
-    |   'volatile'
+    :   FINAL
+    |   STATIC
+    |   VOLATILE
     ;
 
 type
     :   simpleType
     |   objectType 
-    |   'void'
+    |   VOID
     ;
 
 simpleType
@@ -179,14 +187,14 @@ typeIdent
     ;
 
 primitiveType
-    :   'boolean'     { $start.symbol = new Symbol(symtab, "bool_primitive", symtab.resolveBuiltinType("bool")); }
-    |   'char'        { $start.symbol = new Symbol(symtab, "char_primitive", symtab.resolveBuiltinType("char")); }
-    |   'byte'        { $start.symbol = new Symbol(symtab, "byte_primitive", symtab.resolveBuiltinType("char")); }
-    |   'short'       { $start.symbol = new Symbol(symtab, "short_primitive", symtab.resolveBuiltinType("short")); }
-    |   'int'         { $start.symbol = new Symbol(symtab, "int_primitive", symtab.resolveBuiltinType("int")); }
-    |   'long'        { $start.symbol = new Symbol(symtab, "long_primitive", symtab.resolveBuiltinType("long")); }
-    |   'float'       { $start.symbol = new Symbol(symtab, "float_primitive", symtab.resolveBuiltinType("float")); }
-    |   'double'      { $start.symbol = new Symbol(symtab, "double_primitive", symtab.resolveBuiltinType("double")); }
+    :   BOOLEAN     { $start.symbol = new Symbol(symtab, "bool_primitive", symtab.resolveBuiltinType("bool")); }
+    |   CHAR        { $start.symbol = new Symbol(symtab, "char_primitive", symtab.resolveBuiltinType("char")); }
+    |   BYTE        { $start.symbol = new Symbol(symtab, "byte_primitive", symtab.resolveBuiltinType("char")); }
+    |   SHORT       { $start.symbol = new Symbol(symtab, "short_primitive", symtab.resolveBuiltinType("short")); }
+    |   INT         { $start.symbol = new Symbol(symtab, "int_primitive", symtab.resolveBuiltinType("int")); }
+    |   LONG        { $start.symbol = new Symbol(symtab, "long_primitive", symtab.resolveBuiltinType("long")); }
+    |   FLOAT       { $start.symbol = new Symbol(symtab, "float_primitive", symtab.resolveBuiltinType("float")); }
+    |   DOUBLE      { $start.symbol = new Symbol(symtab, "double_primitive", symtab.resolveBuiltinType("double")); }
     ;
 
 genericTypeArgumentList
@@ -233,34 +241,34 @@ localVariableDeclaration
 
 statement
     :   block
-    |   ^('assert' expression expression?)
-    |   ^('if' parenthesizedExpression statement statement?)
-    |   ^('for' forInit? FOR_EXPR expression? FOR_UPDATE expression* statement)
+    |   ^(ASSERT expression expression?)
+    |   ^(IF parenthesizedExpression statement statement?)
+    |   ^(FOR forInit? FOR_EXPR expression? FOR_UPDATE expression* statement)
     |   ^(FOR_EACH localModifierList? type IDENT expression statement) 
-    |   ^('while' parenthesizedExpression statement)
-    |   ^('do' statement parenthesizedExpression)
-    |   ^('switch' parenthesizedExpression switchCaseLabel*)
-    |   ^('return' expression?)
-    |   ^('throw' expression)
-    |   ^('break' IDENT?) {
+    |   ^(WHILE parenthesizedExpression statement)
+    |   ^(DO statement parenthesizedExpression)
+    |   ^(SWITCH parenthesizedExpression switchCaseLabel*)
+    |   ^(RETURN expression?)
+    |   ^(THROW expression)
+    |   ^(BREAK IDENT?) {
             if ($IDENT != null) {
                 translator.error(this, "Labeled break not supported yet, ignoring.", $IDENT);
             }
         }
-    |   ^('continue' IDENT?) {
+    |   ^(CONTINUE IDENT?) {
             if ($IDENT != null) {
                 translator.error(this, "Labeled continue not supported yet, ignoring.", $IDENT);
             }
         }
     |   ^(LABELED_STATEMENT IDENT statement)
     |   expression
-    |   ^('embed' STRING_LITERAL EMBED_BLOCK)
+    |   ^(EMBED STRING_LITERAL EMBED_BLOCK)
     |   ';' // Empty statement.
     ;
         
 switchCaseLabel
-    :   ^('case' expression blockStatement*)
-    |   ^('default' blockStatement*)
+    :   ^(CASE expression blockStatement*)
+    |   ^(DEFAULT blockStatement*)
     ;
     
 forInit
@@ -327,8 +335,8 @@ expr
 primaryExpression
     :   ^(  '.' primaryExpression
                 (   IDENT
-                |   'this'
-                |   'super'
+                |   THIS
+                |   SUPER
                 )
         )
     |   parenthesizedExpression
@@ -338,9 +346,9 @@ primaryExpression
     |   ^(ARRAY_ELEMENT_ACCESS primaryExpression expression)
     |   literal
     |   newExpression
-    |   'this'
+    |   THIS
     |   arrayTypeDeclarator
-    |   'super'
+    |   SUPER
     ;
     
 explicitConstructorCall
@@ -376,8 +384,8 @@ literal
     |   FLOATING_POINT_LITERAL
     |   CHARACTER_LITERAL
     |   STRING_LITERAL          
-    |   'true'
-    |   'false'
-    |   'null'
+    |   TRUE
+    |   FALSE
+    |   NULL
     ;
 
index 55407b8e35a31b588b38febbad35a03ce5638371..516b7a09881c2a191d3c069b0ce83ec4b123ebb8 100644 (file)
@@ -118,7 +118,7 @@ importDeclaration
     ;
     
 typeDeclaration
-    :   ^(TYPE 'class' IDENT (^('extends' su=type))? (^('implements' type+))? (csds+=classScopeDeclaration)*)
+    :   ^(TYPE CLASS IDENT (^('extends' su=type))? (^('implements' type+))? (csds+=classScopeDeclaration)*)
         {
             currentClass = (ClassSymbol)$IDENT.symbol;
         }
@@ -133,9 +133,9 @@ typeDeclaration
                 ext={$su.st}, 
                 csds={$csds})
         ->
-    |   ^('interface' IDENT (^('extends' type+))? interfaceScopeDeclaration*)
+    |   ^(INTERFACE IDENT (^('extends' type+))? interfaceScopeDeclaration*)
         -> template(t={$text}) "/*INTERFACE-not implemented*/ <t>"
-    |   ^('enum' IDENT (^('implements' type+))? classScopeDeclaration*)
+    |   ^(ENUM IDENT (^('implements' type+))? classScopeDeclaration*)
         -> template(t={$text}) "/*ENUM-not implemented*/ <t>"
     |   ^(TYPE chareType IDENT (^('extends' type))? (^('implements' type+))? (csds+=classScopeDeclaration)*)
         {
@@ -165,10 +165,10 @@ chareType
 @init {
 $st = %{$start.getText()};
 }
-    :   'chare'
-    |   'group'
-    |   'nodegroup'
-    |   ^('chare_array' ARRAY_DIMENSION)
+    :   CHARE
+    |   GROUP
+    |   NODEGROUP
+    |   ^(CHARE_ARRAY ARRAY_DIMENSION)
         -> template(t={$ARRAY_DIMENSION.text}) "array [<t>]"
     ;
 
@@ -335,12 +335,12 @@ modifier
 @init {
 $st = %{$start.getText()};
 }
-    :   'public'
-    |   'protected'
-    |   'private'
-    |   'entry'
-    |   'abstract'
-    |   'native'
+    :   PUBLIC
+    |   PROTECTED
+    |   PRIVATE
+    |   ENTRY
+    |   ABSTRACT
+    |   NATIVE
     |   localModifier
         -> {$localModifier.st}
     ;
@@ -354,9 +354,9 @@ localModifier
 @init {
 $st = %{$start.getText()};
 }
-    :   'final'
-    |   'static'
-    |   'volatile'
+    :   FINAL
+    |   STATIC
+    |   VOLATILE
     ;
 
     
@@ -365,7 +365,7 @@ type
         -> {$simpleType.st}
     |   objectType 
         -> {$objectType.st}
-    |   'void'
+    |   VOID
     ;
 
 simpleType
@@ -392,16 +392,16 @@ primitiveType
 @init {
 $st = %{$start.getText()};
 }
-    :   'boolean'
+    :   BOOLEAN
         -> template() "bool"
-    |   'char'
-    |   'byte'
+    |   CHAR
+    |   BYTE
         -> template() "char"
-    |   'short'
-    |   'int'
-    |   'long'
-    |   'float'
-    |   'double'
+    |   SHORT
+    |   INT
+    |   LONG
+    |   FLOAT
+    |   DOUBLE
     ;
 
 genericTypeArgumentList
@@ -472,27 +472,27 @@ localVariableDeclaration
 statement
     :   block
         -> {$block.st}
-    |   ^('assert' cond=expression msg=expression?)
+    |   ^(ASSERT cond=expression msg=expression?)
         -> assert(cond={$cond.st}, msg={$msg.st})
-    |   ^('if' parenthesizedExpression then=statement else_=statement?)
+    |   ^(IF parenthesizedExpression then=statement else_=statement?)
         -> if(cond={$parenthesizedExpression.st}, then={$then.st}, else_={$else_.st})
-    |   ^('for' forInit? FOR_EXPR cond=expression? FOR_UPDATE (update+=expression)* s=statement)
+    |   ^(FOR forInit? FOR_EXPR cond=expression? FOR_UPDATE (update+=expression)* s=statement)
         -> for(initializer={$forInit.st}, cond={$cond.st}, update={$update}, body={$s.st})
     |   ^(FOR_EACH localModifierList? type IDENT expression statement) 
         -> template(t={$text}) "/* foreach not implemented */ <t>"
-    |   ^('while' pe=parenthesizedExpression s=statement)
+    |   ^(WHILE pe=parenthesizedExpression s=statement)
         -> while(cond={$pe.st}, body={$s.st})
-    |   ^('do' s=statement pe=parenthesizedExpression)
+    |   ^(DO s=statement pe=parenthesizedExpression)
         -> dowhile(cond={$pe.st}, block={$s.st})
-    |   ^('switch' pe=parenthesizedExpression (scls+=switchCaseLabel)*)
+    |   ^(SWITCH pe=parenthesizedExpression (scls+=switchCaseLabel)*)
         -> switch(expr={$pe.st}, labels={$scls})
-    |   ^('return' e=expression?)
+    |   ^(RETURN e=expression?)
         -> return(val={$e.st})
-    |   ^('throw' expression)
+    |   ^(THROW expression)
         -> template(t={$text}) "/* throw not implemented */ <t>"
-    |   ^('break' IDENT?)
+    |   ^(BREAK IDENT?)
         -> template() "break;" // TODO: support labeling
-    |   ^('continue' IDENT?)
+    |   ^(CONTINUE IDENT?)
         -> template() "continue;" // TODO: support labeling
     |   ^(LABELED_STATEMENT i=IDENT s=statement)
         -> label(text={$i.text}, stmt={$s.st})
@@ -505,9 +505,9 @@ statement
     ;
         
 switchCaseLabel
-    :   ^('case' expression (b+=blockStatement)*)
+    :   ^(CASE expression (b+=blockStatement)*)
         -> case(expr={$expression.st}, block={$b})
-    |   ^('default' (b+=blockStatement)*)
+    |   ^(DEFAULT (b+=blockStatement)*)
         -> template(block={$b}) "default: <block>"
     ;
     
@@ -622,9 +622,9 @@ expr
 primaryExpression
     :   ^('.' prim=primaryExpression IDENT)
         -> template(id={$IDENT}, prim={$prim.st}) "<prim>.<id>"
-    |   ^('.' prim=primaryExpression 'this')
+    |   ^('.' prim=primaryExpression THIS)
         -> template(prim={$prim.st}) "<prim>.this"
-    |   ^('.' prim=primaryExpression 'super')
+    |   ^('.' prim=primaryExpression SUPER)
         -> template(prim={$prim.st}) "<prim>.super"
     |   parenthesizedExpression
         -> {$parenthesizedExpression.st}
@@ -640,11 +640,11 @@ primaryExpression
         -> {$literal.st}
     |   newExpression
         -> {$newExpression.st}
-    |   'this'
+    |   THIS
         -> {%{$start.getText()}}
     |   arrayTypeDeclarator
         -> {$arrayTypeDeclarator.st}
-    |   'super'
+    |   SUPER
         -> {%{$start.getText()}}
     ;
     
@@ -693,8 +693,8 @@ $st = %{$start.getText()};
     |   FLOATING_POINT_LITERAL
     |   CHARACTER_LITERAL
     |   STRING_LITERAL
-    |   'true'
-    |   'false'
-    |   'null'
+    |   TRUE
+    |   FALSE
+    |   NULL
     ;
 
index f6a60bcf98c8c8e2f73342d06fe2097399ea465e..2130bc5df5d238ceeaa302472bb67e1bd7711266 100644 (file)
@@ -115,14 +115,14 @@ importDeclarations returns [List<CharjAST> packageNames]
 @init {
        packageNames = new ArrayList<CharjAST>();
 }
-    :   (^('import' qualifiedIdentifier '.*'?)
+    :   (^(IMPORT qualifiedIdentifier '.*'?)
                { packageNames.add($qualifiedIdentifier.start); })*
     ;
 
 
 typeDeclaration[List<CharjAST> imports] returns [ClassSymbol sym]
 scope ScopeStack; // top-level type scope
-    :   ^(TYPE ('class' | chareType) IDENT
+    :   ^(TYPE (CLASS | chareType) IDENT
             (^('extends' parent=type))? (^('implements' type+))? classScopeDeclaration*)
         {
             Scope outerScope = $ScopeStack[-1]::current;
@@ -140,10 +140,10 @@ scope ScopeStack; // top-level type scope
     ;
 
 chareType
-    :   'chare'
-    |   'group'
-    |   'nodegroup'
-    |   ^('chare_array' ARRAY_DIMENSION)
+    :   CHARE
+    |   GROUP
+    |   NODEGROUP
+    |   ^(CHARE_ARRAY ARRAY_DIMENSION)
     ;
 
 enumConstant
@@ -224,12 +224,12 @@ modifierList
     ;
 
 modifier
-    :   'public'
-    |   'protected'
-    |   'private'
-    |   'entry'
-    |   'abstract'
-    |   'native'
+    :   PUBLIC
+    |   PROTECTED
+    |   ENTRY
+    |   PRIVATE
+    |   ABSTRACT
+    |   NATIVE
     |   localModifier
     ;
 
@@ -238,15 +238,15 @@ localModifierList
     ;
 
 localModifier
-    :   'final'
-    |   'static'
-    |   'volatile'
+    :   FINAL
+    |   STATIC
+    |   VOLATILE
     ;
 
 type
     :   simpleType
-    |   objectType 
-    |   'void'
+    |   objectType
+    |   VOID
     ;
 
 simpleType
@@ -266,14 +266,14 @@ typeIdent
     ;
 
 primitiveType
-    :   'boolean'     { $start.symbol = new Symbol(symtab, "bool_primitive", symtab.resolveBuiltinType("bool")); }
-    |   'char'        { $start.symbol = new Symbol(symtab, "char_primitive", symtab.resolveBuiltinType("char")); }
-    |   'byte'        { $start.symbol = new Symbol(symtab, "byte_primitive", symtab.resolveBuiltinType("char")); }
-    |   'short'       { $start.symbol = new Symbol(symtab, "short_primitive", symtab.resolveBuiltinType("short")); }
-    |   'int'         { $start.symbol = new Symbol(symtab, "int_primitive", symtab.resolveBuiltinType("int")); }
-    |   'long'        { $start.symbol = new Symbol(symtab, "long_primitive", symtab.resolveBuiltinType("long")); }
-    |   'float'       { $start.symbol = new Symbol(symtab, "float_primitive", symtab.resolveBuiltinType("float")); }
-    |   'double'      { $start.symbol = new Symbol(symtab, "double_primitive", symtab.resolveBuiltinType("double")); }
+    :   BOOLEAN     { $start.symbol = new Symbol(symtab, "bool_primitive", symtab.resolveBuiltinType("bool")); }
+    |   CHAR        { $start.symbol = new Symbol(symtab, "char_primitive", symtab.resolveBuiltinType("char")); }
+    |   BYTE        { $start.symbol = new Symbol(symtab, "byte_primitive", symtab.resolveBuiltinType("char")); }
+    |   SHORT       { $start.symbol = new Symbol(symtab, "short_primitive", symtab.resolveBuiltinType("short")); }
+    |   INT         { $start.symbol = new Symbol(symtab, "int_primitive", symtab.resolveBuiltinType("int")); }
+    |   LONG        { $start.symbol = new Symbol(symtab, "long_primitive", symtab.resolveBuiltinType("long")); }
+    |   FLOAT       { $start.symbol = new Symbol(symtab, "float_primitive", symtab.resolveBuiltinType("float")); }
+    |   DOUBLE      { $start.symbol = new Symbol(symtab, "double_primitive", symtab.resolveBuiltinType("double")); }
     ;
 
 genericTypeArgumentList
@@ -320,34 +320,34 @@ localVariableDeclaration
 
 statement
     :   block
-    |   ^('assert' expression expression?)
-    |   ^('if' parenthesizedExpression statement statement?)
-    |   ^('for' forInit? FOR_EXPR expression? FOR_UPDATE expression* statement)
+    |   ^(ASSERT expression expression?)
+    |   ^(IF parenthesizedExpression statement statement?)
+    |   ^(FOR forInit? FOR_EXPR expression? FOR_UPDATE expression* statement)
     |   ^(FOR_EACH localModifierList? type IDENT expression statement) 
-    |   ^('while' parenthesizedExpression statement)
-    |   ^('do' statement parenthesizedExpression)
-    |   ^('switch' parenthesizedExpression switchCaseLabel*)
-    |   ^('return' expression?)
-    |   ^('throw' expression)
-    |   ^('break' IDENT?) {
+    |   ^(WHILE parenthesizedExpression statement)
+    |   ^(DO statement parenthesizedExpression)
+    |   ^(SWITCH parenthesizedExpression switchCaseLabel*)
+    |   ^(RETURN expression?)
+    |   ^(THROW expression)
+    |   ^(BREAK IDENT?) {
             if ($IDENT != null) {
                 translator.error(this, "Labeled break not supported yet, ignoring.", $IDENT);
             }
         }
-    |   ^('continue' IDENT?) {
+    |   ^(CONTINUE IDENT?) {
             if ($IDENT != null) {
                 translator.error(this, "Labeled continue not supported yet, ignoring.", $IDENT);
             }
         }
     |   ^(LABELED_STATEMENT IDENT statement)
     |   expression
-    |   ^('embed' STRING_LITERAL EMBED_BLOCK)
+    |   ^(EMBED STRING_LITERAL EMBED_BLOCK)
     |   ';' // Empty statement.
     ;
         
 switchCaseLabel
-    :   ^('case' expression blockStatement*)
-    |   ^('default' blockStatement*)
+    :   ^(CASE expression blockStatement*)
+    |   ^(DEFAULT blockStatement*)
     ;
     
 forInit
@@ -414,8 +414,8 @@ expr
 primaryExpression
     :   ^(  '.' primaryExpression
                 (   IDENT
-                |   'this'
-                |   'super'
+                |   THIS
+                |   SUPER
                 )
         )
     |   parenthesizedExpression
@@ -425,9 +425,9 @@ primaryExpression
     |   ^(ARRAY_ELEMENT_ACCESS primaryExpression expression)
     |   literal
     |   newExpression
-    |   'this'
+    |   THIS
     |   arrayTypeDeclarator
-    |   'super'
+    |   SUPER
     ;
     
 explicitConstructorCall
@@ -463,8 +463,8 @@ literal
     |   FLOATING_POINT_LITERAL
     |   CHARACTER_LITERAL
     |   STRING_LITERAL          
-    |   'true'
-    |   'false'
-    |   'null'
+    |   TRUE
+    |   FALSE
+    |   NULL 
     ;
 
diff --git a/src/langs/charj/src/charj/translator/PupRoutineCreator.java b/src/langs/charj/src/charj/translator/PupRoutineCreator.java
new file mode 100644 (file)
index 0000000..c01c363
--- /dev/null
@@ -0,0 +1,65 @@
+package charj.translator;
+
+import org.antlr.runtime.tree.CommonTree;
+import org.antlr.runtime.Token;
+import org.antlr.runtime.CommonToken;
+
+class PupRoutineCreator
+{
+    private CharjAST pupNode;
+    private CharjAST block;
+
+    PupRoutineCreator()
+    {
+        createPupNode();
+        block = pupNode.getChild(4);
+    }
+
+    private CharjAST createNode(int type, String text)
+    {
+        return new CharjAST(new CommonToken(type, text));
+    }    
+
+    private void createPupNode()
+    {
+        pupNode = createNode(CharjParser.FUNCTION_METHOD_DECL, "FUNCTION_METHOD_DECL");
+        
+        CharjAST modlist = createNode(CharjParser.MODIFIER_LIST, "MODIFIER_LIST");
+        modlist.addChild(createNode(CharjParser.PUBLIC, "public"));
+        pupNode.addChild(modlist);
+
+        pupNode.addChild(createNode(CharjParser.VOID, "void"));
+
+        pupNode.addChild(createNode(CharjParser.IDENT, "pup"));
+
+        CharjAST paramlist = createNode(CharjParser.FORMAL_PARAM_LIST, "FORMAL_PARAM_LIST");
+
+        CharjAST param = createNode(CharjParser.FORMAL_PARAM_STD_DECL, "FORMAL_PARAM_STD_DECL");
+
+        CharjAST type = createNode(CharjParser.TYPE, "TYPE");
+        
+        CharjAST qualifiedtypeid = createNode(CharjParser.QUALIFIED_TYPE_IDENT, "QUALIFIED_TYPE_IDENT");
+        qualifiedtypeid.addChild(createNode(CharjParser.IDENT, "PUP::er&"));
+
+        type.addChild(qualifiedtypeid);
+        param.addChild(type);
+        paramlist.addChild(param);
+        
+        pupNode.addChild(createNode(CharjParser.BLOCK, "BLOCK"));
+    }
+
+    protected CharjAST getEnclosingType(CharjAST varDeclNode)
+    {
+        for(CharjAST p = varDeclNode.getParent(); p != null; p = p.getParent())
+            if(p.getType() == CharjParser.TYPE)
+                return p;
+        return null;
+    }         
+
+    protected void primitiveVarPup(CharjAST varDeclNode)
+    {
+        CharjAST enclTypeNode = getEnclosingType(varDeclNode);
+    }
+    
+    protected void objectVarPup(CharjAST varDeclNode){}
+}