StateTree -> Modifier & set bag after confirmed
This commit is contained in:
parent
a0b096745a
commit
e81a509f48
2 changed files with 23 additions and 11 deletions
|
@ -13,6 +13,7 @@ import be.jeffcheasey88.peeratcode.parser.Parser;
|
||||||
import be.jeffcheasey88.peeratcode.parser.Token;
|
import be.jeffcheasey88.peeratcode.parser.Token;
|
||||||
import be.jeffcheasey88.peeratcode.parser.Tokenizer;
|
import be.jeffcheasey88.peeratcode.parser.Tokenizer;
|
||||||
import be.jeffcheasey88.peeratcode.parser.state.BuilderStateTree;
|
import be.jeffcheasey88.peeratcode.parser.state.BuilderStateTree;
|
||||||
|
import be.jeffcheasey88.peeratcode.parser.state.RedirectStateTree;
|
||||||
import be.jeffcheasey88.peeratcode.parser.state.StateTree;
|
import be.jeffcheasey88.peeratcode.parser.state.StateTree;
|
||||||
|
|
||||||
public class JavaParser extends Parser<JavaFile> {
|
public class JavaParser extends Parser<JavaFile> {
|
||||||
|
@ -37,8 +38,24 @@ public class JavaParser extends Parser<JavaFile> {
|
||||||
public JavaParser(){
|
public JavaParser(){
|
||||||
Tokenizer tokenizer = new Tokenizer();
|
Tokenizer tokenizer = new Tokenizer();
|
||||||
|
|
||||||
|
StateTree<JavaFile> modifier = new StateTree<JavaFile>().then((validator) -> {
|
||||||
|
boolean mod = false;
|
||||||
|
while(validator.validate(
|
||||||
|
(token) -> getModifier(token.getValue()) > 0,
|
||||||
|
(bag, token) -> {
|
||||||
|
int m = getModifier(token.getValue());
|
||||||
|
Integer current = bag.get();
|
||||||
|
bag.set(current == null ? m : current+m);
|
||||||
|
})) mod = true;
|
||||||
|
return mod;
|
||||||
|
});
|
||||||
|
|
||||||
|
StateTree<JavaFile> clazz_ = new StateTree<>();
|
||||||
StateTree<JavaFile> clazz = new StateTree<>();
|
StateTree<JavaFile> clazz = new StateTree<>();
|
||||||
|
|
||||||
|
clazz_.then(new RedirectStateTree<>(modifier, (bag) -> "modifier"));
|
||||||
|
|
||||||
|
|
||||||
StateTree<JavaFile> importState = new StateTree<>();
|
StateTree<JavaFile> importState = new StateTree<>();
|
||||||
importState.then((validator) -> {
|
importState.then((validator) -> {
|
||||||
if(validator.validate(
|
if(validator.validate(
|
||||||
|
@ -77,7 +94,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));
|
||||||
pack.multiple(importState);
|
pack.multiple(importState);
|
||||||
pack.thenNoChild(clazz);
|
pack.thenNoChild(clazz_);
|
||||||
|
|
||||||
|
|
||||||
System.out.println((System.currentTimeMillis()-time)+"ms");
|
System.out.println((System.currentTimeMillis()-time)+"ms");
|
||||||
|
|
|
@ -21,19 +21,14 @@ public class RedirectStateTree<E, T extends E> extends StateTree<T>{
|
||||||
Bag currentBag = validator.getBag();
|
Bag currentBag = validator.getBag();
|
||||||
Bag localBag = new Bag();
|
Bag localBag = new Bag();
|
||||||
|
|
||||||
String g = group.apply(currentBag);
|
|
||||||
localBag.addPath(currentBag.path()+"/"+g);
|
|
||||||
// System.out.println("redirect "+localBag.path());
|
|
||||||
currentBag.set(g, localBag);
|
|
||||||
validator.setBag(localBag);
|
|
||||||
|
|
||||||
TokenValidator branch = validator.branch();
|
TokenValidator branch = validator.branch();
|
||||||
|
branch.setBag(localBag);
|
||||||
Object builded = redirect.internalSeed(branch, (E) element);
|
Object builded = redirect.internalSeed(branch, (E) element);
|
||||||
// System.out.println("redirect "+localBag.path()+" builded "+builded);
|
|
||||||
if(builded == null) return null;
|
if(builded == null) return null;
|
||||||
|
|
||||||
|
currentBag.set(this.group.apply(currentBag), localBag);
|
||||||
|
branch.setBag(currentBag);
|
||||||
validator.merge(branch);
|
validator.merge(branch);
|
||||||
validator.setBag(currentBag);
|
|
||||||
|
|
||||||
return super.internalSeed(validator, element);
|
return super.internalSeed(validator, element);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue