Unique & start operations
This commit is contained in:
parent
25563254b3
commit
c56f38f506
2 changed files with 68 additions and 3 deletions
|
@ -48,6 +48,7 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
//- Modifier
|
//- Modifier
|
||||||
//- Type
|
//- Type
|
||||||
//- Value
|
//- Value
|
||||||
|
//- Operation
|
||||||
//- Variable
|
//- Variable
|
||||||
//- Function
|
//- Function
|
||||||
//- Class
|
//- Class
|
||||||
|
@ -148,6 +149,24 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
return false;
|
return false;
|
||||||
}).end((a,b) -> a);
|
}).end((a,b) -> a);
|
||||||
|
|
||||||
|
//OPERATION
|
||||||
|
StateTree<JavaElement> operation = new StateTree<>();
|
||||||
|
StateTree<JavaElement> operation_name = operation.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME)));
|
||||||
|
operation_name.then((validator) -> validator.validate((token) -> token.getValue().equals("=")))
|
||||||
|
.then(new RedirectStateTree<>(value, (global, local) -> global.set(null)))
|
||||||
|
.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
||||||
|
.end((a,b) -> a);
|
||||||
|
StateTree<JavaElement> operation_call = operation_name.then((validator) -> validator.validate((token) -> token.getValue().equals(".")));
|
||||||
|
operation_call.then(operation_name);
|
||||||
|
StateTree<JavaElement> operation_begin = operation_name.then((validator) -> validator.validate((token) -> token.getValue().equals("(")));
|
||||||
|
StateTree<JavaElement> operation_end = operation_begin.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
||||||
|
operation_end.then(operation_call);
|
||||||
|
operation_end.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
||||||
|
.end((a,b) -> a);
|
||||||
|
StateTree<JavaElement> operation_value = operation_begin.then(new RedirectStateTree<>(value, (global, local) -> global.set(null)));
|
||||||
|
operation_value.then(operation_end);
|
||||||
|
operation_value.then((validator) -> validator.validate((token) -> token.getValue().equals("."))).then(operation_value);
|
||||||
|
|
||||||
//VARIABLE
|
//VARIABLE
|
||||||
StateTree<JavaElement> variable = new StateTree<>();
|
StateTree<JavaElement> variable = new StateTree<>();
|
||||||
StateTree<JavaElement> variable_mod = variable.then(new RedirectStateTree<>(modifier, (global, local) -> global.set("modifier", local)));
|
StateTree<JavaElement> variable_mod = variable.then(new RedirectStateTree<>(modifier, (global, local) -> global.set("modifier", local)));
|
||||||
|
@ -167,23 +186,32 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
.end((a,b) -> a);
|
.end((a,b) -> a);
|
||||||
|
|
||||||
StateTree<JavaElement> function_container = new StateTree<>();
|
StateTree<JavaElement> function_container = new StateTree<>();
|
||||||
|
function_container.then(variable);
|
||||||
|
function_container.then(operation);
|
||||||
|
|
||||||
//FUNCTION
|
//FUNCTION
|
||||||
StateTree<JavaElement> function = new StateTree<>();
|
StateTree<JavaElement> function = new StateTree<>();
|
||||||
StateTree<JavaElement> function_mod = function.then(new RedirectStateTree<>(modifier, (global, local) -> global.set("modifier", local)));
|
StateTree<JavaElement> function_mod = function.then(new RedirectStateTree<>(modifier, (global, local) -> global.set("modifier", local)));
|
||||||
StateTree<JavaElement> function_type = function.then(new RedirectStateTree<>(type, (global, local) -> global.set("type", local)));
|
StateTree<JavaElement> function_type = function.then(new RedirectStateTree<>(type, (global, local) -> global.set("type", local)));
|
||||||
function_mod.then(function_type);
|
function_mod.then(function_type);
|
||||||
function.then((validator) -> validator.validate((token) -> token.getValue().equals("static")) && validator.validate((token) -> token.getValue().equals("{"))).end((a,b) -> a).multiple(function_container);
|
BuilderStateTree<JavaElement,JavaElement> function_static = function.then((validator) -> validator.validate((token) -> token.getValue().equals("static")) && validator.validate((token) -> token.getValue().equals("{"))).end((a,b) -> a);
|
||||||
|
function_static.multiple(function_container);
|
||||||
|
function_static.unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end((a,b) -> a);
|
||||||
|
|
||||||
StateTree<JavaElement> function_name = function_type.then((validator) -> validator.validate(
|
StateTree<JavaElement> function_name = function_type.then((validator) -> validator.validate(
|
||||||
(token) -> token.getType().equals(TokenType.NAME),
|
(token) -> token.getType().equals(TokenType.NAME),
|
||||||
(bag, token) -> bag.set(token)));
|
(bag, token) -> bag.set(token)));
|
||||||
StateTree<JavaElement> function_begin = function_name.then((validator) -> validator.validate((token) -> token.getValue().equals("(")));
|
StateTree<JavaElement> function_begin = function_name.then((validator) -> validator.validate((token) -> token.getValue().equals("(")));
|
||||||
StateTree<JavaElement> function_end = function_begin.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
StateTree<JavaElement> function_end = function_begin.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
||||||
function_end.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))).end((a,b) -> a).multiple(function_container);
|
BuilderStateTree<JavaElement,JavaElement> function_start = function_end.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))).end((a,b) -> a);
|
||||||
|
function_start.multiple(function_container);
|
||||||
|
function_start.unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end((a,b) -> a);
|
||||||
|
|
||||||
StateTree<JavaElement> function_throws = function_end.then((validator) -> validator.validate((token) -> token.getValue().equals("throws")))
|
StateTree<JavaElement> function_throws = function_end.then((validator) -> validator.validate((token) -> token.getValue().equals("throws")))
|
||||||
.then(new RedirectStateTree<>(type, (global, local) -> global.set(null)));
|
.then(new RedirectStateTree<>(type, (global, local) -> global.set(null)));
|
||||||
function_throws.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))).end((a,b) -> a).multiple(function_container);
|
BuilderStateTree<JavaElement,JavaElement> function_start_throws = function_throws.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))).end((a,b) -> a);
|
||||||
|
function_start_throws.multiple(function_container);
|
||||||
|
function_start_throws.unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end((a,b) -> a);
|
||||||
function_throws.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(function_throws);
|
function_throws.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(function_throws);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ public class BuilderStateTree<E, B> extends StateTree<B>{
|
||||||
|
|
||||||
private List<StateTree<E>> childs;
|
private List<StateTree<E>> childs;
|
||||||
private List<StateTree<B>> multiple;
|
private List<StateTree<B>> multiple;
|
||||||
|
private List<StateTree<B>> unique;
|
||||||
|
|
||||||
public BuilderStateTree(BiFunction<E, Bag, B> builder){
|
public BuilderStateTree(BiFunction<E, Bag, B> builder){
|
||||||
super();
|
super();
|
||||||
|
@ -21,6 +22,7 @@ public class BuilderStateTree<E, B> extends StateTree<B>{
|
||||||
|
|
||||||
this.childs = new ArrayList<>();
|
this.childs = new ArrayList<>();
|
||||||
this.multiple = new ArrayList<>();
|
this.multiple = new ArrayList<>();
|
||||||
|
this.unique = new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
B build(TokenValidator validator, E element){
|
B build(TokenValidator validator, E element){
|
||||||
|
@ -46,6 +48,24 @@ public class BuilderStateTree<E, B> extends StateTree<B>{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(StateTree<B> state : this.unique){
|
||||||
|
TokenValidator branch = validator.branch();
|
||||||
|
if(state.checker == null){
|
||||||
|
if((builded = state.internalSeed(branch, build)) != null){
|
||||||
|
validator.merge(branch);
|
||||||
|
builded.build(validator, build);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(state.checker.apply(branch)){
|
||||||
|
builded = state.internalSeed(branch, build);
|
||||||
|
if(builded == null) break;
|
||||||
|
validator.merge(branch);
|
||||||
|
builded.build(validator, build);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
BuilderStateTree<E, ?> sub_builded;
|
BuilderStateTree<E, ?> sub_builded;
|
||||||
for(StateTree<E> child : this.childs){
|
for(StateTree<E> child : this.childs){
|
||||||
TokenValidator branch = validator.branch();
|
TokenValidator branch = validator.branch();
|
||||||
|
@ -84,4 +104,21 @@ public class BuilderStateTree<E, B> extends StateTree<B>{
|
||||||
this.multiple.add(child);
|
this.multiple.add(child);
|
||||||
return child;
|
return child;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public <T extends StateTree<B>> StateTree<B> multiple(Function<TokenValidator, Boolean> checker){
|
||||||
|
StateTree<B> state = new StateTree<>();
|
||||||
|
state.checker = checker;
|
||||||
|
return multiple(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T extends StateTree<B>> StateTree<B> unique(StateTree<B> child){
|
||||||
|
this.unique.add(child);
|
||||||
|
return child;
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T extends StateTree<B>> StateTree<B> unique(Function<TokenValidator, Boolean> checker){
|
||||||
|
StateTree<B> state = new StateTree<>();
|
||||||
|
state.checker = checker;
|
||||||
|
return unique(state);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue