Changes
authorbdemsky <bdemsky>
Thu, 16 Feb 2006 01:11:50 +0000 (01:11 +0000)
committerbdemsky <bdemsky>
Thu, 16 Feb 2006 01:11:50 +0000 (01:11 +0000)
22 files changed:
Robust/src/IR/Flat/FlatNode.java
Robust/src/IR/State.java
Robust/src/IR/Tree/AssignmentNode.java
Robust/src/IR/Tree/BlockExpressionNode.java
Robust/src/IR/Tree/BlockNode.java
Robust/src/IR/Tree/BlockStatementNode.java
Robust/src/IR/Tree/BuildIR.java
Robust/src/IR/Tree/CastNode.java
Robust/src/IR/Tree/ClassNode.java [deleted file]
Robust/src/IR/Tree/CreateObjectNode.java
Robust/src/IR/Tree/DeclarationNode.java
Robust/src/IR/Tree/FieldAccessNode.java
Robust/src/IR/Tree/IfStatementNode.java
Robust/src/IR/Tree/LiteralNode.java
Robust/src/IR/Tree/LoopNode.java
Robust/src/IR/Tree/MethodInvokeNode.java
Robust/src/IR/Tree/NameNode.java
Robust/src/IR/Tree/OpNode.java
Robust/src/IR/Tree/ReturnNode.java
Robust/src/IR/Tree/SubBlockNode.java
Robust/src/IR/Tree/TreeNode.java
Robust/src/Main/Main.java

index 06a67977efe62588df8eeba6ddbfdecf91b780a7..b53eb4331c337c67a9fa9bdd42da75116049b948 100644 (file)
@@ -1,8 +1,14 @@
 package IR.Flat;
+import java.util.Vector;
 
 public class FlatNode {
+    Vector next;
+
 
     public String toString() {
        throw new Error();
     }
+    public void addNext(FlatNode n) {
+       next.add(n);
+    }
 }
index 701c92c2a0831f88c4141d22a7b83a40a1af0d6b..1bd8067e1b3562c9d2ccc20c2e931c4e6c0585ca 100644 (file)
@@ -1,26 +1,52 @@
 package IR;
 import IR.Tree.*;
+import IR.Flat.*;
+import IR.*;
 import java.util.*;
 
 public class State {
     public State(ParseNode parsetree) {
        globals=new SymbolTable();
        this.parsetree=parsetree;
-       this.set=new HashSet();
+       this.classset=new HashSet();
+       this.treemethodmap=new Hashtable();
+       this.flatmethodmap=new Hashtable();
     }
+
     public SymbolTable globals;
     public ParseNode parsetree;
-    public HashSet set;
+    public HashSet classset;
+    public Hashtable treemethodmap;
+    public Hashtable flatmethodmap;
 
     public static TypeDescriptor getTypeDescriptor(int t) {
        TypeDescriptor td=new TypeDescriptor(t);
        return td;
     }
+
     public static TypeDescriptor getTypeDescriptor(NameDescriptor n) {
        TypeDescriptor td=new TypeDescriptor(n);
        return td;
     }
-    public void addClass(ClassNode tdn) {
-       set.add(tdn);
+
+    public void addClass(ClassDescriptor tdn) {
+       classset.add(tdn);
+    }
+
+    public BlockNode getMethodBody(MethodDescriptor md) {
+       return (BlockNode)treemethodmap.get(md);
+       
+    }
+
+    public FlatMethod getMethodFlat(MethodDescriptor md) {
+       return (FlatMethod)flatmethodmap.get(md);
+    }
+
+    public void addTreeCode(MethodDescriptor md, BlockNode bn) {
+       treemethodmap.put(md,bn);
+    }
+
+    public void addFlatCode(MethodDescriptor md, FlatMethod bn) {
+       flatmethodmap.put(md,bn);
     }
 }
index 7829b41f8f39d648155fa3418bae3cf05bd57462..f30ccb56a0f00560779426172b48ac7ee3397340 100644 (file)
@@ -15,4 +15,8 @@ public class AssignmentNode extends ExpressionNode {
     public String printNode(int indent) {
        return left.printNode(indent)+" "+op.toString()+" "+right.printNode(indent);
     }
+
+    public int kind() {
+       return Kind.AssignmentNode;
+    }
 }
index ca725cff64bb98b1e1f0261c4969b462e8d6c57b..9cfd9d29d54734bd71a3ad91ef5cbb9f510f46bb 100644 (file)
@@ -9,4 +9,8 @@ class BlockExpressionNode extends BlockStatementNode {
     public String printNode(int indent) {
        return en.printNode(indent);
     }
+
+    public int kind() {
+       return Kind.BlockExpressionNode;
+    }
 }
index 6851ea892bd6ebc2ed73d1f665ca015659b14ef4..94179eea6be06b0784de6ef07e9d915311d15b61 100644 (file)
@@ -1,7 +1,7 @@
 package IR.Tree;
 import java.util.Vector;
 
-class BlockNode extends TreeNode {
+public class BlockNode extends TreeNode {
     Vector blockstatements;
     int printStyle=0;
     public final static int NORMAL=0;
@@ -15,10 +15,19 @@ class BlockNode extends TreeNode {
     public void addBlockStatement(BlockStatementNode bsn) {
        blockstatements.add(bsn);
     }
+
     public void setStyle(int style) {
        printStyle=style;
     }
 
+    public int size() {
+       return blockstatements.size();
+    }
+
+    public BlockStatementNode get(int i) {
+       return (BlockStatementNode) blockstatements.get(i);
+    }
+
     public String printNode(int indent) {
        if (printStyle==NORMAL) {
            String st="{\n";
@@ -56,4 +65,8 @@ class BlockNode extends TreeNode {
            return st;
        } else throw new Error();
     }
+    
+    public int kind() {
+       return Kind.BlockNode;
+    }
 }
index 23f9a03c83d00ae2d5238f4e3eb4fd1fc7d8879d..88981f8c0404b369ec55685d6a770f8d3cd9cbff 100644 (file)
@@ -1,6 +1,6 @@
 package IR.Tree;
 
-class BlockStatementNode extends TreeNode {
+public class BlockStatementNode extends TreeNode {
     public BlockStatementNode() {
     }
     
index a937ef48a9b1f2cafe209e1497760253fbed4aed..cba6239026b9708c3b057ed961eb445f230ab6f6 100644 (file)
@@ -21,15 +21,15 @@ public class BuildIR {
                ParseNode type_pn=pnv.elementAt(i);
                if (isEmpty(type_pn)) /* Skip the semicolon */
                    continue;
-               ClassNode cn=parseTypeDecl(type_pn);
+               ClassDescriptor cn=parseTypeDecl(type_pn);
                state.addClass(cn);
            }
        }
     }
 
-    public ClassNode parseTypeDecl(ParseNode pn) {
+    public ClassDescriptor parseTypeDecl(ParseNode pn) {
        if (isNode(pn, "class_declaration")) {
-           ClassNode cn=new ClassNode();
+           ClassDescriptor cn=new ClassDescriptor();
            cn.setName(pn.getChild("name").getTerminal());
            if (!isEmpty(pn.getChild("super").getTerminal())) {
                /* parse superclass name */
@@ -40,7 +40,7 @@ public class BuildIR {
        } else throw new Error();
     }
 
-    private void parseClassBody(ClassNode cn, ParseNode pn) {
+    private void parseClassBody(ClassDescriptor cn, ParseNode pn) {
        ParseNode decls=pn.getChild("class_body_declaration_list");
        if (decls!=null) {
            ParseNodeVector pnv=decls.getChildren();
@@ -55,7 +55,7 @@ public class BuildIR {
        }
     }
 
-    private void parseClassMember(ClassNode cn, ParseNode pn) {
+    private void parseClassMember(ClassDescriptor cn, ParseNode pn) {
        ParseNode fieldnode=pn.getChild("field");
 
        if (fieldnode!=null) {
@@ -106,7 +106,7 @@ public class BuildIR {
        
     }
 
-    private void parseFieldDecl(ClassNode cn,ParseNode pn) {
+    private void parseFieldDecl(ClassDescriptor cn,ParseNode pn) {
        ParseNode mn=pn.getChild("modifier");
        Modifiers m=parseModifiersList(mn);
 
@@ -226,12 +226,13 @@ public class BuildIR {
     }
 
 
-    private void parseMethodDecl(ClassNode cn, ParseNode pn) {
+    private void parseMethodDecl(ClassDescriptor cn, ParseNode pn) {
        ParseNode headern=pn.getChild("method_header");
        ParseNode bodyn=pn.getChild("body");
        MethodDescriptor md=parseMethodHeader(headern);
        BlockNode bn=parseBlock(bodyn);
-       cn.addMethod(md,bn);
+       cn.addMethod(md);
+       state.addTreeCode(md,bn);
     }
 
     public BlockNode parseBlock(ParseNode pn) {
index d9dc92765a97437b3dcaa679c16c55f97f2335e3..e4f82ec4144b7a8e3f9433c5d81e361042c01349 100644 (file)
@@ -24,4 +24,8 @@ public class CastNode extends ExpressionNode  {
        else
            return "("+etd.printNode(indentlevel)+")"+exp.printNode(indentlevel);
     }
+
+    public int kind() {
+       return Kind.CastNode;
+    }
 }
diff --git a/Robust/src/IR/Tree/ClassNode.java b/Robust/src/IR/Tree/ClassNode.java
deleted file mode 100644 (file)
index f01f8e0..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-package IR.Tree;
-import java.util.Vector;
-import java.util.Hashtable;
-import IR.FieldDescriptor;
-import IR.MethodDescriptor;
-import IR.NameDescriptor;
-
-public class ClassNode extends TreeNode {
-    ClassNode() {
-       classname=null;
-       superclass=null;
-       fields=new Vector();
-       methods=new Vector();
-       methodmap=new Hashtable();
-    }
-    String classname;
-    NameDescriptor superclass;
-    Modifiers modifiers;
-    Vector fields;
-    Vector methods;
-    Hashtable methodmap;
-    
-    public String printNode(int indent) {
-       String st=modifiers.toString()+"class "+classname;
-       if (superclass!=null) 
-           st+="extends "+superclass.toString();
-       st+=" {\n";
-       indent+=INDENT;
-       for(int i=0;i<fields.size();i++) {
-           FieldDescriptor fd=(FieldDescriptor)fields.get(i);
-           st+=printSpace(indent)+fd.toString()+"\n";
-       }
-       if (fields.size()>0)
-           st+="\n";
-
-       for(int i=0;i<methods.size();i++) {
-           MethodDescriptor md=(MethodDescriptor)methods.get(i);
-           st+=printSpace(indent)+md.toString()+" ";
-           BlockNode bn=(BlockNode)methodmap.get(md);
-           st+=bn.printNode(indent)+"\n\n";
-       }
-       st+="}\n";
-       return st;
-    }
-
-    public void addField(FieldDescriptor fd) {
-       fields.add(fd);
-    }
-
-    public void addMethod(MethodDescriptor md, BlockNode b) {
-       methods.add(md);
-       methodmap.put(md,b);
-    }
-  
-    public void setModifiers(Modifiers modifiers) {
-       this.modifiers=modifiers;
-    }
-    void setName(String name) {
-       classname=name;
-    }
-    void setSuper(NameDescriptor superclass) {
-       this.superclass=superclass;
-    }
-}
index 3497e3dabf09e91d04424a039777e37c9de9077b..99b6783bc76d6046be29e289102e70faa6e989d4 100644 (file)
@@ -24,4 +24,8 @@ public class CreateObjectNode extends ExpressionNode {
        }
        return st+")";
     }
+
+    public int kind() {
+       return Kind.CreateObjectNode;
+    }
 }
index 75d1a165a2cd99d6d3b6071b4cded3c8d367c346..ec0933234cfffd30f967559e5ac6d57ba5857aaa 100644 (file)
@@ -11,4 +11,7 @@ class DeclarationNode extends BlockStatementNode {
        return vd.toString();
     }
 
+    public int kind() {
+       return Kind.DeclarationNode;
+    }
 }
index b2b953baaca31528ecc25d47ca1208a304b8b14c..a2284d1990a032f7ed5f40fba2f7d64b21ef1d61 100644 (file)
@@ -12,4 +12,7 @@ public class FieldAccessNode extends ExpressionNode {
     public String printNode(int indent) {
        return left.printNode(indent)+"."+fieldname;
     }
+    public int kind() {
+       return Kind.FieldAccessNode;
+    }
 }
index 2dbf459e18b28ac51b005eb03a1aed2207e1f28c..2077409b712db5cd8317639c12de7d8db4c751c1 100644 (file)
@@ -17,4 +17,7 @@ class IfStatementNode extends BlockStatementNode {
        else 
            return "if("+cond.printNode(indent)+") "+true_st.printNode(indent)+" else "+        else_st.printNode(indent);
     }
+    public int kind() {
+       return Kind.IfStatementNode;
+    }
 }
index 0997e6d3bbac985569ea2b162e5a659f6cd3c16b..4f273fde4467a6f4252beee4f2e592ed53979e95 100644 (file)
@@ -70,4 +70,7 @@ public class LiteralNode extends ExpressionNode {
        }
        return new_st;
     }
+    public int kind() {
+       return Kind.LiteralNode;
+    }
 }
index baa86d010d2a7961b0c1524006db7fca8c30059c..f387d6c0fdca624e32b04b4eae7d9abc7a8ff96c 100644 (file)
@@ -38,4 +38,7 @@ class LoopNode extends BlockStatementNode {
        } else throw new Error();
     }
 
+    public int kind() {
+       return Kind.LoopNode;
+    }
 }
index a2888493c612f6cbf70a809e169045c7a59234cc..705b316c735ab8bf3089ccc187275dd34b49316a 100644 (file)
@@ -41,4 +41,7 @@ public class MethodInvokeNode extends ExpressionNode {
        }
        return st+")";
     }
+    public int kind() {
+       return Kind.MethodInvokeNode;
+    }
 }
index 26e5f5244323583dceb24894353b54f702200a43..79885640a6894de4bb61743fdaf09839fdfba5ad 100644 (file)
@@ -10,4 +10,7 @@ public class NameNode extends ExpressionNode {
     public String printNode(int indent) {
        return name.toString();
     }
+    public int kind() {
+       return Kind.NameNode;
+    }
 }
index 3c370fd84a0497a5523193a5d5212b4ccd1e350e..c85b951b8e3aa1c1ca0ceb1981fd4693be0c192e 100644 (file)
@@ -24,4 +24,7 @@ public class OpNode extends ExpressionNode {
        else
            return left.printNode(indent)+" "+op.toString()+" "+right.printNode(indent);
     }
+    public int kind() {
+       return Kind.OpNode;
+    }
 }
index 60ae5762d90eff54c0f3ca331b45f5ad9c1245ef..aef5a0d3de79c9e1785a2df5baa7f7007fd70217 100644 (file)
@@ -17,5 +17,7 @@ class ReturnNode extends BlockStatementNode {
        else
            return "return "+en.printNode(indent);
     }
-
+    public int kind() {
+       return Kind.ReturnNode;
+    }
 }
index 2ad0beb1b358e08725ea83db3e6bf4b6bbc45988..f2ff9358f28555d8428b0958fb4c389263615e4a 100644 (file)
@@ -9,5 +9,7 @@ class SubBlockNode extends BlockStatementNode {
     public String printNode(int indent) {
        return bn.printNode(indent);
     }
-
+    public int kind() {
+       return Kind.SubBlockNode;
+    }
 }
index 5aabe20c76c6e29a97ddf3d9c724238998872598..35233fc3ff43de24028f87b0639503f18b89dd44 100644 (file)
@@ -1,6 +1,6 @@
 package IR.Tree;
 
-class TreeNode {
+public class TreeNode {
     public static final int INDENT=2;
 
     public String printNode(int indent) {
@@ -12,4 +12,7 @@ class TreeNode {
            sp+=" ";
        return sp;
     }
+    public int kind() {
+       throw new Error();
+    }
 }
index 31309bc38c8c16dba200c7d3b0b4299a25f43d41..027781da26a9eb895ab561e7ba430811c1be72cd 100644 (file)
@@ -5,14 +5,9 @@ import java.io.BufferedReader;
 import java.io.FileReader;
 import IR.Tree.ParseNode;
 import IR.Tree.BuildIR;
+import IR.Flat.BuildFlat;
 import IR.State;
 
-/* Test skeleton for java parser/lexer.
- * Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu>
- * This is released under the terms of the GPL with NO WARRANTY.
- * See the file COPYING for more details.
- */
-
 public class Main {
   public static void main(String args[]) throws Exception {
       if (args.length<1) {
@@ -28,6 +23,10 @@ public class Main {
     State state=new State(p);
     BuildIR bir=new BuildIR(state);
     bir.buildtree();
+    
+    BuildFlat bf=new BuildFlat(state);
+    bf.buildflat();
+
     System.exit(l.numErrors());
   }
 }