StateTree -> reduce trace by recalling Builder on base call

This commit is contained in:
jeffcheasey88 2023-07-16 16:22:52 +02:00
parent 0327cd8a28
commit 255e78f034
4 changed files with 10 additions and 10 deletions

View file

@ -21,7 +21,6 @@ public class JavaFile extends JavaElement{
JavaFile setPackage(Bag bag){
this.pack = bag.<List<Token>>get();
System.out.println("setPackage "+pack);
System.out.println(Thread.currentThread().getStackTrace().length+" traces");
return this;
}

View file

@ -18,7 +18,7 @@ public class BinaryStateTree<E> extends StateTree<E>{
}
@Override
<B> B internalSeed(TokenValidator validator, E element){
BuilderStateTree<E, ?> internalSeed(TokenValidator validator, E element){
return ((this.condition.apply(validator)) ? success : fail).internalSeed(validator, element);
}

View file

@ -17,7 +17,7 @@ public class RedirectStateTree<E, T extends E> extends StateTree<T>{
}
@Override
<B> B internalSeed(TokenValidator validator, T element){
BuilderStateTree<T, ?> internalSeed(TokenValidator validator, T element){
Bag currentBag = validator.getBag();
Bag localBag = new Bag();

View file

@ -25,32 +25,33 @@ public class StateTree<E>{
TokenValidator validator = new TokenValidator(tokenizer.getTokens().toArray(new Token[0]));
while(validator.hasNext()) {
System.out.println("seed");
E build = internalSeed(validator, container);
BuilderStateTree<E, ?> build = internalSeed(validator, container);
System.out.println("Validate "+validator.MAX_VALIDATE+"/"+tokenizer.getTokens().size()+" tokens !");
if(build == null) break;
build.build(validator, container);
}
}
<B> B internalSeed(TokenValidator validator, E element){
BuilderStateTree<E, ?> internalSeed(TokenValidator validator, E element){
for(StateTree<E> child : this.childs){
TokenValidator branch = validator.branch();
if(child.checker == null){
E builded = child.internalSeed(branch, element);
BuilderStateTree<E, ?> builded = child.internalSeed(branch, element);
if(builded != null){
validator.merge(branch);
return (B) builded;
return builded;
}
continue;
}
if(child.checker.apply(branch)){
E builded = child.internalSeed(branch, element);
BuilderStateTree<E, ?> builded = child.internalSeed(branch, element);
if(builded != null){
validator.merge(branch);
return (B) builded;
return builded;
}
}
}
if(this.builder != null) return (B) this.builder.build(validator, element);
if(this.builder != null) return this.builder;
return null;
}