peer-at-code-parser-java/src/be/jeffcheasey88/peeratcode/parser/state/InitialStateTree.java
2023-07-19 15:35:03 +02:00

44 lines
1.1 KiB
Java

package be.jeffcheasey88.peeratcode.parser.state;
import java.util.ArrayList;
import java.util.List;
import be.jeffcheasey88.peeratcode.parser.TokenValidator;
public class InitialStateTree<E> extends StateTree<E>{
private List<StateTree<E>> multiple;
public InitialStateTree(){
super();
this.multiple = new ArrayList<>();
}
@Override
BuilderStateTree<E, ?> internalSeed(TokenValidator validator, E element){
BuilderStateTree<E, ?> builded;
for(StateTree<E> state : this.multiple){
TokenValidator branch = validator.branch();
if(state.checker == null){
while((builded = state.internalSeed(branch, element)) != null){
validator.merge(branch);
builded.build(validator, element);
}
}else{
while(state.checker.apply(branch)){
builded = state.internalSeed(branch, element);
if(builded == null) break;
validator.merge(branch);
builded.build(validator, element);
}
}
}
return super.internalSeed(validator, element);
}
public <T extends StateTree<E>> StateTree<E> multiple(StateTree<E> child){
this.multiple.add(child);
return child;
}
}