peer-at-code-parser-java/src/dev/peerat/parser/state/InitialStateTree.java

44 lines
1.1 KiB
Java

package dev.peerat.parser.state;
import java.util.ArrayList;
import java.util.List;
import dev.peerat.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;
if(state.checker == null){
while((builded = state.internalSeed((branch = validator.branch()), element)) != null){
validator.merge(branch);
builded.build(validator, element);
}
}else{
while(state.checker.test((branch = validator.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;
}
}