summaryrefslogtreecommitdiff
path: root/Playground.java
diff options
context:
space:
mode:
Diffstat (limited to 'Playground.java')
-rw-r--r--Playground.java114
1 files changed, 95 insertions, 19 deletions
diff --git a/Playground.java b/Playground.java
index aae1af6..8e9cbc0 100644
--- a/Playground.java
+++ b/Playground.java
@@ -17,28 +17,104 @@ public class Playground {
}
public static void main(String[] args) {
- HashMap<String,AbstractInstance> symt = new HashMap<>();
- symt.put("x", new TypeInstance("x", TypeEnum.integer));
- symt.put("a", new MethodInstance("a", TypeEnum.intarray));
- symt.put("A", new ClassInstance("A", new ClassInstance("B")));
- System.out.println("Our symbol table has lots of symbols: " + HashMapToString(symt));
- System.out.println("It seems class A extends B, but B isn't in the table... " +
- ((ClassInstance) symt.get("A")).getExtend());
+ /*
+ class Factorial{
+ ....public static void main(String[] a){
+ ........System.out.println(new Fac().ComputeFac(10));
+ ....}
+ }
+ class Fac {
+ ....int[] useless_var ;
+ ....public int ComputeFac(int num){
+ ........int num_aux ;
+ ........if (num < 1)
+ ............num_aux = 1 ;
+ ........else
+ ............num_aux = num * (this.ComputeFac(num-1)) ;
+ ........return num_aux ;
+ ....}
+ }
+ class Fac2 extends Fac {
+ }
+
+ The below is a manual practice run of the SymbolTable class.
+ */
SymbolTable ssymt = new SymbolTable();
- ssymt.put("x", new TypeInstance("x", TypeEnum.integer));
- ssymt.put("A", new ClassInstance("A"));
- System.out.println("A smarter approach. Here's type 'x':" +
- ssymt.getType("x"));
- System.out.println("Null class 'x':" +
- ssymt.getClass("x"));
- System.out.println("Null method 'x':" +
- ssymt.getMethod("x"));
- System.out.println("Null type 'y':" +
- ssymt.getType("y"));
- System.out.println("Null type 'A':" +
- ssymt.getType("A"));
+ /* pass one */
+ ssymt.put("Factorial", new ClassInstance("Factorial"));
+ ssymt.put("main", new MethodInstance("main", TypeEnum.ERROR));
+ ssymt.put("Fac", new ClassInstance("Fac"));
+ ssymt.put("useless_var", new TypeInstance("useless_var", TypeEnum.intarray));
+ ssymt.put("ComputeFac", new MethodInstance("ComputeFac", TypeEnum.integer));
+ ssymt.put("num", new TypeInstance("num", TypeEnum.integer));
+ ssymt.put("num_aux", new TypeInstance("num_aux", TypeEnum.integer));
+ ssymt.put("Fac2", new ClassInstance("Fac2"));
+
+ System.out.println("Post pass one: " + ssymt.toString());
+
+ /* pass two */
+ ssymt.setActive("Factorial", TypeEnum.classname);
+ ssymt.setActive("main", TypeEnum.method);
+ ssymt.addMethod("main");
+ ssymt.setActive("Fac", TypeEnum.classname);
+ ssymt.addAttribute("useless_var");
+ ssymt.setActive("ComputeFac", TypeEnum.method);
+ ssymt.addMethod("ComputeFac");
+ ssymt.addParameter("num");
+ ssymt.addLocal("num_aux");
+ ssymt.setActive("Fac2", TypeEnum.classname);
+ ssymt.setExtend("Fac");
+
+ ArrayList<TypeInstance> attrs_in_factorial = new ArrayList<>();
+ ArrayList<MethodInstance> mtds_in_factorial = new ArrayList<>();
+ mtds_in_factorial.add(ssymt.getMethod("main"));
+ ArrayList<TypeInstance> attrs_in_fac = new ArrayList<>();
+ attrs_in_fac.add(ssymt.getType("useless_var"));
+ ArrayList<MethodInstance> mtds_in_fac = new ArrayList<>();
+ mtds_in_fac.add(ssymt.getMethod("ComputeFac"));
+ ArrayList<TypeInstance> attrs_in_fac2 = new ArrayList<>(); // FIXME
+ ArrayList<MethodInstance> mtds_in_fac2 = new ArrayList<>(); // FIXME
+
+ System.out.println("test class children");
+ System.out.println(ssymt.getClass("Factorial").getAttributes().equals(attrs_in_factorial));
+ System.out.println(ssymt.getClass("Factorial").getMethods().equals(mtds_in_factorial));
+ System.out.println(ssymt.getClass("Fac").getAttributes().equals(attrs_in_fac));
+ System.out.println(ssymt.getClass("Fac").getMethods().equals(mtds_in_fac));
+ System.out.println(ssymt.getClass("Fac2").getAttributes().equals(attrs_in_fac2));
+ System.out.println(ssymt.getClass("Fac2").getMethods().equals(mtds_in_fac2));
+
+ ArrayList<TypeInstance> args_in_computefac = new ArrayList<>();
+ args_in_computefac.add(ssymt.getType("num"));
+ ArrayList<TypeInstance> locals_in_computefac = new ArrayList<>(args_in_computefac);
+ locals_in_computefac.add(ssymt.getType("num_aux"));
+
+ System.out.println("test method children");
+ System.out.println(ssymt.getMethod("ComputeFac").getArguments().equals(args_in_computefac));
+ System.out.println(ssymt.getMethod("ComputeFac").getLocals().equals(locals_in_computefac));
+
+ ClassInstance exts_factorial = null;
+ ClassInstance exts_fac = null;
+ ClassInstance exts_fac2 = ssymt.getClass("Fac");
+
+ System.out.println("test inheritance");
+ System.out.println(ssymt.getClass("Factorial").getExtend() == exts_factorial);
+ System.out.println(ssymt.getClass("Fac").getExtend() == exts_fac);
+ System.out.println(ssymt.getClass("Fac2").getExtend() == exts_fac2);
+
+ AbstractInstance scope_main = ssymt.getClass("Factorial");
+ AbstractInstance scope_computefac = ssymt.getClass("Fac");
+ AbstractInstance scope_uselessvar = ssymt.getClass("Fac");
+ AbstractInstance scope_num = ssymt.getMethod("ComputeFac");
+ AbstractInstance scope_numaux = ssymt.getMethod("ComputeFac");
+
+ System.out.println("test scope");
+ System.out.println(ssymt.getMethod("main").getScope() == scope_main);
+ System.out.println(ssymt.getMethod("ComputeFac").getScope() == scope_computefac);
+ System.out.println(ssymt.getType("useless_var").getScope() == scope_uselessvar);
+ System.out.println(ssymt.getType("num").getScope() == scope_num);
+ System.out.println(ssymt.getType("num_aux").getScope() == scope_numaux);
}
}