StateTree -> multiple case & import (all)
This commit is contained in:
parent
12155a6bc8
commit
3256c1986e
4 changed files with 33 additions and 8 deletions
|
@ -55,6 +55,7 @@ public class TokenValidator{
|
||||||
public void merge(TokenValidator branch){
|
public void merge(TokenValidator branch){
|
||||||
this.index = branch.index;
|
this.index = branch.index;
|
||||||
this.validated = branch.validated;
|
this.validated = branch.validated;
|
||||||
|
this.bag = branch.bag;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setBag(Bag bag){
|
public void setBag(Bag bag){
|
||||||
|
|
|
@ -74,7 +74,7 @@ public class JavaParser extends Parser<JavaFile> {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}).<JavaElement>end((javafile, bag) -> javafile.setPackage(bag))
|
}).<JavaElement>end((javafile, bag) -> javafile.setPackage(bag))
|
||||||
.thenNoChild(importState);
|
.multiple(importState);
|
||||||
|
|
||||||
|
|
||||||
System.out.println((System.currentTimeMillis()-time)+"ms");
|
System.out.println((System.currentTimeMillis()-time)+"ms");
|
||||||
|
|
|
@ -13,6 +13,7 @@ public class BuilderStateTree<E, B> extends StateTree<B>{
|
||||||
private BiFunction<E, Bag, B> builder;
|
private BiFunction<E, Bag, B> builder;
|
||||||
|
|
||||||
private List<StateTree<E>> childs;
|
private List<StateTree<E>> childs;
|
||||||
|
private StateTree<E> multiple;
|
||||||
|
|
||||||
public BuilderStateTree(BiFunction<E, Bag, B> builder){
|
public BuilderStateTree(BiFunction<E, Bag, B> builder){
|
||||||
super();
|
super();
|
||||||
|
@ -28,20 +29,20 @@ public class BuilderStateTree<E, B> extends StateTree<B>{
|
||||||
BuilderStateTree<B, ?> builded = super.internalSeed(validator, build);
|
BuilderStateTree<B, ?> builded = super.internalSeed(validator, build);
|
||||||
if(builded != null) builded.build(validator, build);
|
if(builded != null) builded.build(validator, build);
|
||||||
|
|
||||||
BuilderStateTree<E, ?> buildedNoChilds = internalSeedNoChilds(validator, element);
|
internalSeedNoChilds(validator, element);
|
||||||
if(buildedNoChilds != null) buildedNoChilds.build(validator, element);
|
|
||||||
|
|
||||||
return build;
|
return build;
|
||||||
}
|
}
|
||||||
|
|
||||||
BuilderStateTree<E, ?> internalSeedNoChilds(TokenValidator validator, E element){
|
void internalSeedNoChilds(TokenValidator validator, E element){
|
||||||
for(StateTree<E> child : this.childs){
|
for(StateTree<E> child : this.childs){
|
||||||
TokenValidator branch = validator.branch();
|
TokenValidator branch = validator.branch();
|
||||||
if(child.checker == null){
|
if(child.checker == null){
|
||||||
BuilderStateTree<E, ?> builded = child.internalSeed(branch, element);
|
BuilderStateTree<E, ?> builded = child.internalSeed(branch, element);
|
||||||
if(builded != null){
|
if(builded != null){
|
||||||
validator.merge(branch);
|
validator.merge(branch);
|
||||||
return builded;
|
builded.build(validator, element);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -49,11 +50,30 @@ public class BuilderStateTree<E, B> extends StateTree<B>{
|
||||||
BuilderStateTree<E, ?> builded = child.internalSeed(branch, element);
|
BuilderStateTree<E, ?> builded = child.internalSeed(branch, element);
|
||||||
if(builded != null){
|
if(builded != null){
|
||||||
validator.merge(branch);
|
validator.merge(branch);
|
||||||
return builded;
|
builded.build(validator, element);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(multiple != null){
|
||||||
|
TokenValidator branch = validator.branch();
|
||||||
|
if(multiple.checker == null){
|
||||||
|
BuilderStateTree<E, ?> builded;
|
||||||
|
while((builded = multiple.internalSeed(branch, element)) != null){
|
||||||
|
validator.merge(branch);
|
||||||
|
builded.build(validator, element);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
while(multiple.checker.apply(branch)){
|
||||||
|
BuilderStateTree<E, ?> builded = multiple.internalSeed(branch, element);
|
||||||
|
if(builded != null){
|
||||||
|
validator.merge(branch);
|
||||||
|
builded.build(validator, element);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public <T extends StateTree<E>> StateTree<E> thenNoChild(StateTree<E> child){
|
public <T extends StateTree<E>> StateTree<E> thenNoChild(StateTree<E> child){
|
||||||
|
@ -67,4 +87,9 @@ public class BuilderStateTree<E, B> extends StateTree<B>{
|
||||||
this.childs.add(state);
|
this.childs.add(state);
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public <T extends StateTree<E>> StateTree<E> multiple(StateTree<E> child){
|
||||||
|
this.multiple = child;
|
||||||
|
return child;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,6 @@ public class StateTree<E>{
|
||||||
public void seed(Tokenizer tokenizer, E container){
|
public void seed(Tokenizer tokenizer, E container){
|
||||||
TokenValidator validator = new TokenValidator(tokenizer.getTokens().toArray(new Token[0]));
|
TokenValidator validator = new TokenValidator(tokenizer.getTokens().toArray(new Token[0]));
|
||||||
while(validator.hasNext()){
|
while(validator.hasNext()){
|
||||||
System.out.println("seed");
|
|
||||||
BuilderStateTree<E, ?> build = internalSeed(validator, container);
|
BuilderStateTree<E, ?> build = internalSeed(validator, container);
|
||||||
System.out.println("Validate "+validator.MAX_VALIDATE+"/"+tokenizer.getTokens().size()+" tokens !");
|
System.out.println("Validate "+validator.MAX_VALIDATE+"/"+tokenizer.getTokens().size()+" tokens !");
|
||||||
if(build == null) break;
|
if(build == null) break;
|
||||||
|
|
Loading…
Add table
Reference in a new issue