diff --git a/src/dev/peerat/parser/Bag.java b/src/dev/peerat/parser/Bag.java index dbcdb90..437c751 100644 --- a/src/dev/peerat/parser/Bag.java +++ b/src/dev/peerat/parser/Bag.java @@ -11,36 +11,33 @@ public class Bag{ private Object value; - private String path = ""; +// private String path = ""; public Bag(){ - System.out.println("new empty bag "+hashCode()+" -> "+Thread.currentThread().getStackTrace()[2]); this.map = new HashMap<>(); - path = Thread.currentThread().getStackTrace()[2].toString(); +// path = Thread.currentThread().getStackTrace()[2].toString(); } public Bag(Bag bag){ - System.out.println("bag "+hashCode()+" copy of "+bag.hashCode()); this.map = new HashMap<>(bag.map); this.value = bag.value; - this.path = bag.path; +// this.path = bag.path; } public E get(){ return (E) this.value; } - public void addPath(String s){ - path+=s; - } - - public String path(){ - return this.path; - } +// public void addPath(String s){ +// path+=s; +// } +// +// public String path(){ +// return this.path; +// } public void set(Object value){ this.value = value; - System.out.println("edit Bag "+this+" -> "+Thread.currentThread().getStackTrace()[2]); } public E get(String key){ diff --git a/src/dev/peerat/parser/TokenValidator.java b/src/dev/peerat/parser/TokenValidator.java index 48f16d9..93319a1 100644 --- a/src/dev/peerat/parser/TokenValidator.java +++ b/src/dev/peerat/parser/TokenValidator.java @@ -29,9 +29,7 @@ public class TokenValidator{ public boolean validate(Function action){ if(validated >= this.elements.length) return false; - System.out.println("[validate try] "+this.elements[validated]); if(action.apply(this.elements[validated])){ - System.out.println("validate confirmed! "+this.elements[validated]); if(validated+1 > MAX_VALIDATE){ MAX_VALIDATE = validated+1; TOKENS = elements.length; @@ -40,7 +38,6 @@ public class TokenValidator{ return true; } - System.out.println("valide rejected ! "+this.elements[validated]); return false; } diff --git a/src/dev/peerat/parser/java/tree/ValueTree.java b/src/dev/peerat/parser/java/tree/ValueTree.java index 596ce8e..c5cdf50 100644 --- a/src/dev/peerat/parser/java/tree/ValueTree.java +++ b/src/dev/peerat/parser/java/tree/ValueTree.java @@ -40,14 +40,12 @@ public class ValueTree extends SyntaxTree { //TODO order tree by mo // VALUE StateTree value = this.current.then((validator) -> { validator.getBag().set(new ValueChainBuilder()); - System.out.println("HELLO JAVA "+validator.getBag()); return true; }); StateTree unary_value = new StateTree<>(); StateTree value_operation = new StateTree<>(); StateTree redirectRight = new RedirectStateTree<>(this.current, (global, local) -> { - System.out.println("redirectRight g="+global+" ,l="+local); global.get().right(local.get()); }); @@ -110,14 +108,13 @@ public class ValueTree extends SyntaxTree { //TODO order tree by mo value.equals("!",modifier()).redirect(this.current, (global, local) -> global.get().rebase(local.get())).end(ValueChainBuilder.build((builder) -> builder.buildModifier())); - StateTree left_value = value.then((t) -> {System.out.println("what "+t.getBag()); return true;}).redirect(unary_value, (global, local) -> { System.out.println("merge "+global+" <-> "+local); global.get().rebase(local.get());}); + StateTree left_value = value.redirect(unary_value, (global, local) -> global.get().rebase(local.get())); left_value.end(ValueChainBuilder.build()); left_value.equals("?") .redirect(this.current, (global, local) -> global.set("success", local.get())) .equals(":") .redirect(this.current, (global, local) -> global.set("fail", local.get())) .end((parent, bag) -> { - System.out.println("tri value "+bag); bag.set(new TriValue(bag.get().base, bag.get("success"), bag.get("fail"))); if(parent instanceof ValueContainer) ((ValueContainer)parent).addValue(bag.get()); return null; @@ -180,7 +177,6 @@ public class ValueTree extends SyntaxTree { //TODO order tree by mo static BiFunction build(Consumer builder){ return (parent, bag) -> { - System.out.println("build chain "+bag); ValueChainBuilder chainBuilder = bag.get(); builder.accept(chainBuilder); chainBuilder.build(parent, bag); @@ -190,7 +186,6 @@ public class ValueTree extends SyntaxTree { //TODO order tree by mo static BiFunction build(){ return (parent, bag) -> { - System.out.println("build chain "+bag); ValueChainBuilder chainBuilder = bag.get(); chainBuilder.build(parent, bag); return null; @@ -247,7 +242,6 @@ public class ValueTree extends SyntaxTree { //TODO order tree by mo buildVariableAccess(); this.current = null; } - System.out.println("dot "+this); } public void parameter(Value value){ @@ -262,11 +256,9 @@ public class ValueTree extends SyntaxTree { //TODO order tree by mo buildMethodCall(); this.current = null; this.parameters = null; - System.out.println("parameter "+this); } public void arrayAccess(Value value){ - System.out.println("ARRAY ACCESS "+this); this.base = new ArrayAccessValue(this.base, value); } diff --git a/src/dev/peerat/parser/state/RedirectStateTree.java b/src/dev/peerat/parser/state/RedirectStateTree.java index f7645ec..2239ae1 100644 --- a/src/dev/peerat/parser/state/RedirectStateTree.java +++ b/src/dev/peerat/parser/state/RedirectStateTree.java @@ -10,23 +10,20 @@ public class RedirectStateTree extends StateTree{ private StateTree redirect; private BiConsumer group; - private StackTraceElement calling; - public RedirectStateTree(StateTree redirect, BiConsumer group){ super(); this.redirect = redirect; this.group = group; - StackTraceElement[] trace = Thread.currentThread().getStackTrace(); - int current = 0; - while((current < trace.length) && (!(trace[++current].getClassName().contains("Value")))); - - this.calling = trace[current]; +// StackTraceElement[] trace = Thread.currentThread().getStackTrace(); +// int current = 0; +// while((current < trace.length) && (!(trace[++current].getClassName().contains("Value")))); +// +// this.calling = trace[current]; } @Override BuilderStateTree internalSeed(TokenValidator validator, T element){ - System.out.println("[redirect into] "+calling); Bag currentBag = validator.getBag(); Bag localBag = new Bag(); @@ -36,8 +33,6 @@ public class RedirectStateTree extends StateTree{ if(builded == null) return null; builded.build(branch, element); - System.out.println("[redirect done] "+calling); - this.group.accept(currentBag, localBag); branch.setBag(currentBag); validator.merge(branch); diff --git a/src/dev/peerat/parser/state/StateTree.java b/src/dev/peerat/parser/state/StateTree.java index fcfc9ef..dce2886 100644 --- a/src/dev/peerat/parser/state/StateTree.java +++ b/src/dev/peerat/parser/state/StateTree.java @@ -17,21 +17,11 @@ public class StateTree{ Function checker; private BuilderStateTree builder; - private StackTraceElement origin; - //TODO checker in constructeur ? public StateTree(){ this.childs = new ArrayList<>(); } - private void origin(){ - StackTraceElement[] trace = Thread.currentThread().getStackTrace(); - int current = 0; - while((current < trace.length) && (!(trace[++current].getClassName().contains("Value")))); - - this.origin = trace[current]; - } - public void seed(TokenValidator validator, E container){ while(validator.hasNext()){ BuilderStateTree build = internalSeed(validator, container); @@ -41,12 +31,9 @@ public class StateTree{ } BuilderStateTree internalSeed(TokenValidator validator, E element){ - System.out.println("internalSeed "+origin); for(StateTree child : this.childs){ - System.out.println("internalSeed "+origin+" child: "+child.origin); TokenValidator branch = validator.branch(); if(child.checker == null){ - System.out.println("checker null"); BuilderStateTree builded = child.internalSeed(branch, element); if(builded != null){ validator.merge(branch); @@ -54,9 +41,7 @@ public class StateTree{ } continue; } - System.out.println("try checker"); if(child.checker.apply(branch)){ - System.out.println("pass"); BuilderStateTree builded = child.internalSeed(branch, element); if(builded != null){ validator.merge(branch); @@ -77,7 +62,6 @@ public class StateTree{ StateTree state = new StateTree<>(); state.checker = checker; this.childs.add(state); - state.origin(); return state; } @@ -114,10 +98,7 @@ public class StateTree{ } public StateTree redirect(StateTree target){ - return then(new RedirectStateTree<>(target, (global, local) -> { - System.out.println("\nMERGE:\n\t"+global+"\n\t"+local+"\n"); - global.set(local.get()); - })); + return then(new RedirectStateTree<>(target, (global, local) -> global.set(local.get()))); } public StateTree redirect(StateTree target, BiConsumer group){ diff --git a/test/dev/peerat/parser/java/ValueTypesTests.java b/test/dev/peerat/parser/java/ValueTypesTests.java index 8129248..d9399ee 100644 --- a/test/dev/peerat/parser/java/ValueTypesTests.java +++ b/test/dev/peerat/parser/java/ValueTypesTests.java @@ -14,6 +14,7 @@ import org.junit.jupiter.api.TestInstance.Lifecycle; import dev.peerat.parser.Parser; import dev.peerat.parser.java.tree.JavaTreeType; +import dev.peerat.parser.java.value.ArrayAccessValue; import dev.peerat.parser.java.value.BiValue; import dev.peerat.parser.java.value.MethodCallValue; import dev.peerat.parser.java.value.ModifierValue; @@ -21,6 +22,7 @@ import dev.peerat.parser.java.value.StaticValue; import dev.peerat.parser.java.value.TriValue; import dev.peerat.parser.java.value.Value; import dev.peerat.parser.java.value.Value.ValueContainer; +import dev.peerat.parser.java.value.VariableAccessValue; import dev.peerat.parser.java.visitor.JavaVisitor; import dev.peerat.parser.visitor.VisitorBag; @@ -188,6 +190,25 @@ public class ValueTypesTests { assertEquals("test", v.getToken().getValue()); assertEquals("JavaParserTest", assertInstance(v.base(), StaticValue.class).getToken().getValue()); - v = assertInstance(parse("main.test.here.localvar.run(6)[0].validate(7)"), MethodCallValue.class); + v = assertInstance(parse("main.test.here.localvar.run(6)[0].validate(7)"), MethodCallValue.class); //main.test.here.localvar.run(6)[0].validate(7) + assertEquals("validate", v.getToken().getValue()); + assertEquals(1, v.getParameters().size()); + StaticValue param = assertInstance(v.getParameters().get(0), StaticValue.class); + assertEquals("7", param.getToken().getValue()); + ArrayAccessValue array = assertInstance(v.base(), ArrayAccessValue.class); //main.test.here.localvar.run(6)[0] + param = assertInstance(array.getAccessor(), StaticValue.class); + assertEquals("0", param.getToken().getValue()); + v = assertInstance(array.base(), MethodCallValue.class); //main.test.here.localvar.run(6) + assertEquals("run", v.getToken().getValue()); + param = assertInstance(v.getParameters().get(0), StaticValue.class); + assertEquals("6", param.getToken().getValue()); + VariableAccessValue access = assertInstance(v.base(), VariableAccessValue.class); + assertEquals("localvar", access.getVariable().getValue()); + access = assertInstance(access.base(), VariableAccessValue.class); + assertEquals("here", access.getVariable().getValue()); + access = assertInstance(access.base(), VariableAccessValue.class); + assertEquals("test", access.getVariable().getValue()); + assertEquals("main", assertInstance(access.base(), StaticValue.class).getToken().getValue()); + } }