From 2358457c56bb7cdd19fbac95bd96fdffb4c5c62f Mon Sep 17 00:00:00 2001 From: PhorDath Date: Mon, 22 May 2017 13:41:33 -0300 Subject: [PATCH 1/2] test --- src/main/java/AST.java | 5 ++++- src/main/java/AssignStm.java | 7 +++++++ src/main/java/CompoundStm.java | 7 +++++++ src/main/java/EseqExp.java | 7 +++++++ src/main/java/IdExp.java | 7 +++++++ src/main/java/Main.java | 4 ++++ src/main/java/NumExp.java | 7 +++++++ src/main/java/OpExp.java | 7 +++++++ src/main/java/PrintStm.java | 7 +++++++ straightline.iml | 20 ++++++++++++++++++++ 10 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 straightline.iml diff --git a/src/main/java/AST.java b/src/main/java/AST.java index 7ed4bb6..784e5dc 100644 --- a/src/main/java/AST.java +++ b/src/main/java/AST.java @@ -1,2 +1,5 @@ -public abstract class AST { +import javaslang.render.ToTree; + +public abstract class AST implements ToTree{ + } diff --git a/src/main/java/AssignStm.java b/src/main/java/AssignStm.java index d9d1a6e..ec7950a 100644 --- a/src/main/java/AssignStm.java +++ b/src/main/java/AssignStm.java @@ -1,3 +1,5 @@ +import javaslang.collection.Tree; + public class AssignStm extends Stm { public final String id; @@ -15,4 +17,9 @@ public String toString() { ", exp=" + exp + '}'; } + + @Override + public Tree.Node toTree() { + return Tree.of("AssignStm", Tree.of(id), exp.toTree()); + } } diff --git a/src/main/java/CompoundStm.java b/src/main/java/CompoundStm.java index f566e4d..45cb88e 100644 --- a/src/main/java/CompoundStm.java +++ b/src/main/java/CompoundStm.java @@ -1,3 +1,5 @@ +import javaslang.collection.Tree; + public class CompoundStm extends Stm { public final Stm stm1; @@ -15,4 +17,9 @@ public String toString() { ", stm2=" + stm2 + '}'; } + + @Override + public Tree.Node toTree() { + return Tree.of("CompoundStm", stm1.toTree(), stm2.toTree()); + } } diff --git a/src/main/java/EseqExp.java b/src/main/java/EseqExp.java index a9902cf..db1eb7c 100644 --- a/src/main/java/EseqExp.java +++ b/src/main/java/EseqExp.java @@ -1,3 +1,5 @@ +import javaslang.collection.Tree; + public class EseqExp extends Exp { public final Stm stm; @@ -15,4 +17,9 @@ public String toString() { ", exp=" + exp + '}'; } + + @Override + public Tree.Node toTree() { + return Tree.of("EseqExp", stm.toTree(), exp.toTree()); + } } diff --git a/src/main/java/IdExp.java b/src/main/java/IdExp.java index 32ba2df..a4f3bec 100644 --- a/src/main/java/IdExp.java +++ b/src/main/java/IdExp.java @@ -1,3 +1,5 @@ +import javaslang.collection.Tree; + public class IdExp extends Exp { public final String id; @@ -11,4 +13,9 @@ public String toString() { "id='" + id + '\'' + '}'; } + + @Override + public Tree.Node toTree() { + return Tree.of("IdExp " + id); + } } diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 24a7a0d..813d107 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,4 +1,6 @@ import javaslang.collection.List; +import javaslang.render.text.Box; +import javaslang.render.text.Boxes; public class Main { @@ -14,5 +16,7 @@ public static void main(String[] args) { System.out.println(p); + System.out.println(p.toTree().draw()); + System.out.println(Boxes.box(p.toTree())); } } diff --git a/src/main/java/NumExp.java b/src/main/java/NumExp.java index 1e070b9..9eca0e5 100644 --- a/src/main/java/NumExp.java +++ b/src/main/java/NumExp.java @@ -1,3 +1,5 @@ +import javaslang.collection.Tree; + public class NumExp extends Exp { public final int num; @@ -11,4 +13,9 @@ public String toString() { "num=" + num + '}'; } + + @Override + public Tree.Node toTree() { + return Tree.of("NumExp " + num); + } } diff --git a/src/main/java/OpExp.java b/src/main/java/OpExp.java index a25cf35..0ed25d6 100644 --- a/src/main/java/OpExp.java +++ b/src/main/java/OpExp.java @@ -1,3 +1,5 @@ +import javaslang.collection.Tree; + public class OpExp extends Exp { public enum Op { PLUS, MINUS, TIMES, DIV } @@ -20,4 +22,9 @@ public String toString() { ", op=" + op + '}'; } + + @Override + public Tree.Node toTree() { + return Tree.of("OpExp " + op, left.toTree(), right.toTree()); + } } diff --git a/src/main/java/PrintStm.java b/src/main/java/PrintStm.java index ba730ef..68ad314 100644 --- a/src/main/java/PrintStm.java +++ b/src/main/java/PrintStm.java @@ -1,4 +1,6 @@ import javaslang.collection.List; +import javaslang.collection.Tree; +import javaslang.render.ToTree; public class PrintStm extends Stm { @@ -14,4 +16,9 @@ public String toString() { "exps=" + exps + '}'; } + + @Override + public Tree.Node toTree() { + return Tree.of("PrintStm", exps.map(Exp::toTree)); + } } diff --git a/straightline.iml b/straightline.iml new file mode 100644 index 0000000..993e87b --- /dev/null +++ b/straightline.iml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 8be74db9837c381eb36c7553aabf3c2f91bb38fe Mon Sep 17 00:00:00 2001 From: PhorDath Date: Mon, 22 May 2017 15:10:37 -0300 Subject: [PATCH 2/2] test --- src/main/java/AST.java | 2 +- src/main/java/AssignStm.java | 12 ++++++++++++ src/main/java/CompoundStm.java | 13 +++++++++++++ src/main/java/EseqExp.java | 13 +++++++++++++ src/main/java/Exp.java | 4 ++++ src/main/java/IdExp.java | 13 +++++++++++++ src/main/java/Main.java | 8 +++++++- src/main/java/NumExp.java | 13 +++++++++++++ src/main/java/OpExp.java | 22 ++++++++++++++++++++++ src/main/java/PrintStm.java | 18 ++++++++++++++++++ src/main/java/Stm.java | 4 ++++ 11 files changed, 120 insertions(+), 2 deletions(-) diff --git a/src/main/java/AST.java b/src/main/java/AST.java index 784e5dc..24ce6e4 100644 --- a/src/main/java/AST.java +++ b/src/main/java/AST.java @@ -1,5 +1,5 @@ import javaslang.render.ToTree; public abstract class AST implements ToTree{ - + public abstract int maxargs(); } diff --git a/src/main/java/AssignStm.java b/src/main/java/AssignStm.java index ec7950a..ba392c5 100644 --- a/src/main/java/AssignStm.java +++ b/src/main/java/AssignStm.java @@ -1,5 +1,7 @@ import javaslang.collection.Tree; +import java.util.Map; + public class AssignStm extends Stm { public final String id; @@ -22,4 +24,14 @@ public String toString() { public Tree.Node toTree() { return Tree.of("AssignStm", Tree.of(id), exp.toTree()); } + + @Override + public int maxargs() { + return exp.maxargs(); + } + + @Override + public void interp(Map mem) { + mem.put(id, exp.eval(mem)); + } } diff --git a/src/main/java/CompoundStm.java b/src/main/java/CompoundStm.java index 45cb88e..c15352a 100644 --- a/src/main/java/CompoundStm.java +++ b/src/main/java/CompoundStm.java @@ -1,5 +1,7 @@ import javaslang.collection.Tree; +import java.util.Map; + public class CompoundStm extends Stm { public final Stm stm1; @@ -22,4 +24,15 @@ public String toString() { public Tree.Node toTree() { return Tree.of("CompoundStm", stm1.toTree(), stm2.toTree()); } + + @Override + public int maxargs() { + return Math.max(stm1.maxargs(), stm2.maxargs()); + } + + @Override + public void interp(Map mem) { + stm1.interp(mem); + stm2.interp(mem); + } } diff --git a/src/main/java/EseqExp.java b/src/main/java/EseqExp.java index db1eb7c..7048745 100644 --- a/src/main/java/EseqExp.java +++ b/src/main/java/EseqExp.java @@ -1,5 +1,7 @@ import javaslang.collection.Tree; +import java.util.Map; + public class EseqExp extends Exp { public final Stm stm; @@ -22,4 +24,15 @@ public String toString() { public Tree.Node toTree() { return Tree.of("EseqExp", stm.toTree(), exp.toTree()); } + + @Override + public int maxargs() { + return Math.max(stm.maxargs(), exp.maxargs()); + } + + @Override + public Integer eval(Map mem) { + stm.interp(mem); + return exp.eval(mem); + } } diff --git a/src/main/java/Exp.java b/src/main/java/Exp.java index 4dd4145..e1cc0a4 100644 --- a/src/main/java/Exp.java +++ b/src/main/java/Exp.java @@ -1,2 +1,6 @@ +import javaslang.collection.Tree; +import java.util.Map; + public abstract class Exp extends AST { + public abstract Integer eval(Map mem); } diff --git a/src/main/java/IdExp.java b/src/main/java/IdExp.java index a4f3bec..684b4ad 100644 --- a/src/main/java/IdExp.java +++ b/src/main/java/IdExp.java @@ -1,5 +1,7 @@ import javaslang.collection.Tree; +import java.util.Map; + public class IdExp extends Exp { public final String id; @@ -18,4 +20,15 @@ public String toString() { public Tree.Node toTree() { return Tree.of("IdExp " + id); } + + @Override + public int maxargs() { + return 0; + } + + @Override + public Integer eval(Map mem) { + Integer x = mem.get(id); + return x == null ? 0 : x; + } } diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 813d107..4efb10b 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -2,6 +2,8 @@ import javaslang.render.text.Box; import javaslang.render.text.Boxes; +import java.util.HashMap; + public class Main { public static void main(String[] args) { @@ -15,8 +17,12 @@ public static void main(String[] args) { new PrintStm(List.of(new IdExp("x")))); System.out.println(p); - System.out.println(p.toTree().draw()); System.out.println(Boxes.box(p.toTree())); + + System.out.printf("maxargs: %d%n", p.maxargs()); + + System.out.println("Execução: "); + p.interp(new HashMap()); } } diff --git a/src/main/java/NumExp.java b/src/main/java/NumExp.java index 9eca0e5..5566d74 100644 --- a/src/main/java/NumExp.java +++ b/src/main/java/NumExp.java @@ -1,5 +1,7 @@ import javaslang.collection.Tree; +import java.util.Map; + public class NumExp extends Exp { public final int num; @@ -18,4 +20,15 @@ public String toString() { public Tree.Node toTree() { return Tree.of("NumExp " + num); } + + @Override + public int maxargs() { + return 0; + } + + @Override + public Integer eval(Map mem) { + return num; + } } + diff --git a/src/main/java/OpExp.java b/src/main/java/OpExp.java index 0ed25d6..5e27b60 100644 --- a/src/main/java/OpExp.java +++ b/src/main/java/OpExp.java @@ -1,5 +1,7 @@ import javaslang.collection.Tree; +import java.util.Map; + public class OpExp extends Exp { public enum Op { PLUS, MINUS, TIMES, DIV } @@ -27,4 +29,24 @@ public String toString() { public Tree.Node toTree() { return Tree.of("OpExp " + op, left.toTree(), right.toTree()); } + + @Override + public int maxargs() { + return Math.max(left.maxargs(), right.maxargs()); + } + + @Override + public Integer eval(Map mem) { + Integer x = left.eval(mem); + Integer y = right.eval(mem); + + switch (op){ + case PLUS: return x + y; + case MINUS: return x - y; + case TIMES: return x * y; + case DIV: return x/y; + default: return 0; + + } + } } diff --git a/src/main/java/PrintStm.java b/src/main/java/PrintStm.java index 68ad314..fc7f869 100644 --- a/src/main/java/PrintStm.java +++ b/src/main/java/PrintStm.java @@ -2,6 +2,8 @@ import javaslang.collection.Tree; import javaslang.render.ToTree; +import java.util.Map; + public class PrintStm extends Stm { public final List exps; @@ -21,4 +23,20 @@ public String toString() { public Tree.Node toTree() { return Tree.of("PrintStm", exps.map(Exp::toTree)); } + + @Override + public int maxargs() { + int aux = exps.length(); + + for(Exp e : exps) + aux = Math.max(e.maxargs(), aux); + + return exps.length(); + } + + @Override + public void interp(Map mem) { + exps.forEach(e -> System.out.println(e.eval(mem) + " ")); + System.out.println(); + } } diff --git a/src/main/java/Stm.java b/src/main/java/Stm.java index d406e8b..288a2b5 100644 --- a/src/main/java/Stm.java +++ b/src/main/java/Stm.java @@ -1,2 +1,6 @@ +import java.util.Map; + public abstract class Stm extends AST { + public abstract void interp(Map mem); + }