StateTree -> reduce trace by recalling Builder on base call
This commit is contained in:
parent
0327cd8a28
commit
255e78f034
4 changed files with 10 additions and 10 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue