Debug + start value refractor
This commit is contained in:
parent
4cbf1be37b
commit
ab2ef0f3f1
4 changed files with 344 additions and 286 deletions
|
@ -38,6 +38,7 @@ public class Bag{
|
||||||
|
|
||||||
public void set(Object value){
|
public void set(Object value){
|
||||||
this.value = value;
|
this.value = value;
|
||||||
|
System.out.println("edit Bag "+this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public <E> E get(String key){
|
public <E> E get(String key){
|
||||||
|
@ -62,6 +63,6 @@ public class Bag{
|
||||||
String map = "";
|
String map = "";
|
||||||
for(Entry<String, Object> entry : this.map.entrySet()) map+=","+(entry.getKey())+" -> "+entry.getValue();
|
for(Entry<String, Object> entry : this.map.entrySet()) map+=","+(entry.getKey())+" -> "+entry.getValue();
|
||||||
if(map.length() > 0) map = map.substring(1);
|
if(map.length() > 0) map = map.substring(1);
|
||||||
return "([bag] | value="+value+" | map["+Arrays.toString(this.map.keySet().toArray())+"]="+map+" )";
|
return "([bag] "+(value != null ? "| value="+value+" ":"")+"| map["+Arrays.toString(this.map.keySet().toArray())+"]="+map+" )";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -306,280 +306,64 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
|
|
||||||
|
|
||||||
//VALUE
|
//VALUE
|
||||||
BiFunction<JavaElement, Bag, JavaElement> value_builder = (parent, bag) -> {
|
StateTree<JavaElement> value = new StateTree<>();
|
||||||
System.out.println("value_builder {");
|
StateTree<JavaElement> value_operation = new StateTree<>();
|
||||||
System.out.println("begin: "+bag);
|
|
||||||
if(bag.has("right")){
|
|
||||||
|
|
||||||
if(!(bag.get("left") instanceof Value)) bag.set("left", new StaticValue(bag.<Token>get("left")));
|
StateTree<JavaElement> value_name = value.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME), (bag, token) -> bag.set("current", token)));
|
||||||
if(!(bag.get("right") instanceof Value)) bag.set("right", new StaticValue(bag.<Token>get("right")));
|
value_name.end((parent, bag) -> {
|
||||||
|
bag.set(new StaticValue(bag.get("current")));
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
value_name.then(value_operation);
|
||||||
|
|
||||||
BiValue result = new BiValue(
|
value_operation.then((validator) -> validator.validate((token) -> token.getValue().equals(">"), (bag, token) -> bag.set("action", ">")))
|
||||||
|
.then(new RedirectStateTree<>(value, (global, local) -> global.set("right", local.get())))
|
||||||
|
.end((parent, bag) -> {
|
||||||
|
if(bag.has("current")){
|
||||||
|
bag.set(new BiValue(new StaticValue(bag.get("current")), bag.get("action"), bag.get("right")));
|
||||||
|
}else {
|
||||||
|
bag.set(new BiValue(bag.get(), bag.get("action"), bag.get("right")));
|
||||||
|
}
|
||||||
|
System.out.println("value_op "+bag);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
|
||||||
bag.get("left"),
|
value_operation.then((validator) -> validator.validate((token) -> token.getValue().equals("&"), (bag, token) -> bag.set("action", "&")))
|
||||||
|
.then((validator) -> validator.validate((token) -> token.getValue().equals("&"), (bag, token) -> bag.set("action", "&&")))
|
||||||
bag.get("action"),
|
.then(new RedirectStateTree<>(value, (global, local) -> global.set("right", local.get())))
|
||||||
|
.end((parent, bag) -> {
|
||||||
bag.get("right"));
|
if(bag.has("current")){
|
||||||
bag.set(result);
|
bag.set(new BiValue(new StaticValue(bag.get("current")), bag.get("action"), bag.get("right")));
|
||||||
|
}else {
|
||||||
|
bag.set(new BiValue(bag.get(), bag.get("action"), bag.get("right")));
|
||||||
}
|
}
|
||||||
System.out.println("end: "+bag);
|
System.out.println("value_op "+bag);
|
||||||
System.out.println("}");
|
|
||||||
return null;
|
return null;
|
||||||
};
|
});
|
||||||
|
|
||||||
BiConsumer<Bag, Bag> value_right = (global, local) -> {
|
value_operation.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "=")))
|
||||||
System.out.println("merge{");
|
.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "==")))
|
||||||
System.out.println("global: "+global);
|
.then(new RedirectStateTree<>(value, (global, local) -> global.set("right", local.get())))
|
||||||
System.out.println("local: "+local);
|
.end((parent, bag) -> {
|
||||||
System.out.println("More than simple merge ? "+local.get().getClass());
|
if(bag.has("current")){
|
||||||
System.out.println("}");
|
bag.set(new BiValue(new StaticValue(bag.get("current")), bag.get("action"), bag.get("right")));
|
||||||
global.set("right", local.get("left"));
|
}else {
|
||||||
};
|
bag.set(new BiValue(bag.get(), bag.get("action"), bag.get("right")));
|
||||||
|
|
||||||
//STRING CONCAT
|
|
||||||
StateTree<JavaElement> value = new StateTree<>();
|
|
||||||
|
|
||||||
StateTree<JavaElement> value_container = new StateTree<>();
|
|
||||||
|
|
||||||
StateTree<JavaElement> value_list = new StateTree<>();
|
|
||||||
StateTree<JavaElement> value_list_element = value_list.then(new RedirectStateTree<>(value_container, (global, local) -> {
|
|
||||||
List<Value> list = global.get();
|
|
||||||
if(list == null){
|
|
||||||
list = new ArrayList<>();
|
|
||||||
global.set(list);
|
|
||||||
}
|
}
|
||||||
list.add(local.get());
|
System.out.println("value_op "+bag);
|
||||||
}));
|
|
||||||
value_list_element.end();
|
|
||||||
value_list_element.then((validator) -> validator.validate((token) -> token.getValue().equals(",")))
|
|
||||||
.then(value_list_element);
|
|
||||||
|
|
||||||
value.then((validator) -> validator.validate(
|
|
||||||
(token) -> token.getType().equals(TokenType.STRING) || token.getType().equals(TokenType.CHAR),
|
|
||||||
(bag, token) -> bag.set(token)))
|
|
||||||
.end((parent,bag) -> {
|
|
||||||
bag.set(new StaticValue(bag.<Token>get()));
|
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
|
|
||||||
StateTree<JavaElement> value_instance = value.then((validator) -> validator.validate(
|
StateTree<JavaElement> value_parenthesis = value.then((validator) -> validator.validate((token) -> token.getValue().equals("(")));
|
||||||
(token) -> token.getValue().equals("new"),
|
StateTree<JavaElement> value_parenthesis_close = value_parenthesis.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
||||||
(bag, token) -> bag.set("newit", token)));
|
StateTree<JavaElement> value_inside = value_parenthesis.then(new RedirectStateTree<>(value, (global, local) -> {
|
||||||
StateTree<JavaElement> value_name = new StateTree<JavaElement>();
|
global.set(local.get());
|
||||||
value.then(value_name);
|
System.out.println("valide_inside "+global);
|
||||||
value_instance.then(new RedirectStateTree<>(value_name, (global, local) -> {
|
|
||||||
System.out.println(local.get()+"");
|
|
||||||
if(global.has("newit")) global.set(new InstanceValue(global.<Token>get("newit"), local.<MethodCallValue>get().getToken(), local.<MethodCallValue>get().getParameters()));
|
|
||||||
else global.set(local.get());
|
|
||||||
}))
|
|
||||||
.end((a,b) -> a)
|
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
|
||||||
.end((a,b) -> a)
|
|
||||||
.multiple(braces_container)
|
|
||||||
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end((a,b) -> a);
|
|
||||||
value_name = value_name.then(new RedirectStateTree<>(type, (global, local) -> {
|
|
||||||
System.out.println("value_name {");
|
|
||||||
System.out.println("global: "+global);
|
|
||||||
System.out.println("local: "+local);
|
|
||||||
System.out.println("}");
|
|
||||||
if(global.get() == null) global.set(local.get());
|
|
||||||
else global.set(global.<Token>get().concat(local.get()));
|
|
||||||
}));
|
}));
|
||||||
value_name.end((parent,bag) -> {
|
value_inside.then(value_parenthesis_close);
|
||||||
System.out.println("{value_name} "+bag);
|
value_inside.then(value_operation);
|
||||||
Value result = new StaticValue(bag.<Token>get());
|
value_parenthesis_close.end();
|
||||||
bag.set(result);
|
value_parenthesis_close.then(value_operation);
|
||||||
return null;
|
|
||||||
});
|
|
||||||
|
|
||||||
value_name.then((validator) -> validator.validate((token) -> token.getValue().equals(":")) && validator.validate((token) -> token.getValue().equals(":")))
|
|
||||||
.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME)))
|
|
||||||
.end((a,b) -> a);
|
|
||||||
|
|
||||||
StateTree<JavaElement> value_call = value_name.then((validator) -> validator.validate(
|
|
||||||
(token) -> token.getValue().equals("."),
|
|
||||||
(bag, token) -> {
|
|
||||||
Value prev = bag.get("prev");
|
|
||||||
if(prev == null){
|
|
||||||
bag.set("prev", new StaticValue(bag.<Token>get()));
|
|
||||||
}else{
|
|
||||||
Integer paramters = bag.get("args");
|
|
||||||
List<Value> list = null;
|
|
||||||
if(paramters != null){
|
|
||||||
list = new ArrayList<>();
|
|
||||||
for(int i = 0; i < paramters; i++) list.add(bag.<Bag>get("arg"+i).get());
|
|
||||||
bag.remove("args");
|
|
||||||
}
|
|
||||||
MethodCallValue methodCall = new MethodCallValue(prev, bag.get("gen"), bag.get(), list);
|
|
||||||
bag.set("prev", methodCall);
|
|
||||||
bag.remove("gen");
|
|
||||||
}
|
|
||||||
bag.set(new Token(token.getLineNumber(), token.getCharacterNumber(), "", TokenType.GROUP));
|
|
||||||
}));
|
|
||||||
value_call.end((a,b) -> a);
|
|
||||||
value_call.then(new RedirectStateTree<>(gen, (global, local) -> global.set("gen", global.<Token>get().concat(local.get())))).then(value_name);
|
|
||||||
value_call.then(value_name);
|
|
||||||
StateTree<JavaElement> value_array_begin = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("[")));
|
|
||||||
StateTree<JavaElement> value_array_end = value_array_begin.then((validator) -> validator.validate((token) -> token.getValue().equals("]")));
|
|
||||||
value_array_begin.then(new RedirectStateTree<>(value_container, (global, local) -> global.set("inside", local)))
|
|
||||||
.then(value_array_end);
|
|
||||||
value_array_end.end((parent,bag) -> {
|
|
||||||
//to change
|
|
||||||
bag.set(new MethodCallValue(null, null, bag.get(), null));
|
|
||||||
return parent;
|
|
||||||
})
|
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
|
||||||
.end((a,b) -> a)
|
|
||||||
.multiple(value_list)
|
|
||||||
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end((a,b) -> a);
|
|
||||||
value_array_end.then(value_call);
|
|
||||||
value_array_end.then(value_array_begin);
|
|
||||||
|
|
||||||
StateTree<JavaElement> value_arg_begin = value_name.then((validator) -> validator.validate(
|
|
||||||
(token) -> token.getValue().equals("("),
|
|
||||||
(bag, token) -> bag.set(bag.<Token>get().concat(token))));
|
|
||||||
StateTree<JavaElement> value_arg_end = value_arg_begin.then((validator) -> validator.validate(
|
|
||||||
(token) -> token.getValue().equals(")"),
|
|
||||||
(bag, token) -> bag.set(bag.<Token>get().concat(token))));
|
|
||||||
value_arg_end.end((parent,bag) -> {
|
|
||||||
Integer paramters = bag.get("args");
|
|
||||||
List<Value> list = null;
|
|
||||||
if(paramters != null){
|
|
||||||
list = new ArrayList<>();
|
|
||||||
for(int i = 0; i < paramters; i++) list.add(bag.<Bag>get("arg"+i).get());
|
|
||||||
}
|
|
||||||
|
|
||||||
MethodCallValue methodCall = new MethodCallValue(bag.get("prev"), bag.get("gen"), bag.get(), list);
|
|
||||||
bag.set(methodCall);
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
value_arg_end.then(value_call);
|
|
||||||
value_arg_end.then(value_array_begin);
|
|
||||||
StateTree<JavaElement> value_generic_begin = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("<")));
|
|
||||||
StateTree<JavaElement> value_generic_name = value_generic_begin.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME)));
|
|
||||||
StateTree<JavaElement> value_generic_split = value_generic_name.then((validator) -> validator.validate((token) -> token.getValue().equals(",")));
|
|
||||||
StateTree<JavaElement> value_generic_end = value_generic_begin.then((validator) -> validator.validate((token) -> token.getValue().equals(">")));
|
|
||||||
value_generic_end.then(value_arg_begin);
|
|
||||||
value_generic_end.then(value_generic_name);
|
|
||||||
value_generic_end.then(value_generic_split);
|
|
||||||
value_generic_name.then(value_generic_begin);
|
|
||||||
value_generic_name.then(value_generic_end);
|
|
||||||
value_generic_split.then(value_generic_name);
|
|
||||||
StateTree<JavaElement> value_arg = value_arg_begin.then(new RedirectStateTree<>(value_container, (global, local) -> {
|
|
||||||
Integer count = global.get("args");
|
|
||||||
if(count == null) count = 0;
|
|
||||||
global.set("arg"+count, local);
|
|
||||||
global.set("args", (count+1));
|
|
||||||
}));
|
|
||||||
value_arg.then((validator) -> validator.validate((token) -> token.getValue().equals(",")))
|
|
||||||
.then(value_arg);
|
|
||||||
value_arg.then(value_arg_end);
|
|
||||||
|
|
||||||
StateTree<JavaElement> value_left = new StateTree<>();
|
|
||||||
|
|
||||||
StateTree<JavaElement> value_parenthesis = value_container.then((validator) -> validator.validate((token) -> token.getValue().equals("(")));
|
|
||||||
StateTree<JavaElement> value_cast = value_parenthesis.then(new RedirectStateTree<>(type, (global, local) -> global.set(null)))
|
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals(")")))
|
|
||||||
.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null)));
|
|
||||||
value_cast.then(value_left);
|
|
||||||
StateTree<JavaElement> value_lambda_arg = value_parenthesis.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME)));
|
|
||||||
value_lambda_arg.then((validator) -> validator.validate((token) -> token.getValue().equals(",")))
|
|
||||||
.then(value_lambda_arg);
|
|
||||||
StateTree<JavaElement> value_lambda = value_parenthesis.then((validator) ->
|
|
||||||
validator.validate((token) -> token.getValue().equals(")")) &&
|
|
||||||
validator.validate((token) -> token.getValue().equals("-")) &&
|
|
||||||
validator.validate((token) -> token.getValue().equals(">")));
|
|
||||||
value_lambda.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
|
||||||
.<JavaElement>end((a,bag) -> {
|
|
||||||
bag.set(new LambdaValue(null, new ArrayList<>()));
|
|
||||||
return a;
|
|
||||||
})
|
|
||||||
.multiple(function_container)
|
|
||||||
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end((a,b) -> a);
|
|
||||||
value_lambda.then(new RedirectStateTree<>(value_container, (global, local) -> global.set("in", local.get()))).end((a,bag) ->{
|
|
||||||
bag.set(new LambdaValue(null, bag.<Value>get("in")));
|
|
||||||
return a;
|
|
||||||
});
|
|
||||||
value_lambda_arg.then(value_lambda);
|
|
||||||
StateTree<JavaElement> value_parenthesis_end = value_parenthesis.then(new RedirectStateTree<>(value_container, (global, local) -> global.set("left", local.get())))
|
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
|
||||||
value_parenthesis_end.end();
|
|
||||||
value_parenthesis_end.then(value_call);
|
|
||||||
value_parenthesis_end.then(value_left);
|
|
||||||
value_container.then((validator) -> validator.validate((token) -> token.getValue().equals("!"))).then(value_container);
|
|
||||||
value_container.then((validator) -> validator.validate((token) -> token.getValue().equals("-"))).then(value_container);
|
|
||||||
value_container.then((validator) -> validator.validate((token) -> token.getValue().equals("+"))).then(value_container);
|
|
||||||
value_container.then((validator) -> validator.validate((token) -> token.getValue().equals("~"))).then(value_container);
|
|
||||||
StateTree<JavaElement> value_inside = value_container.then(new RedirectStateTree<>(value, (global, local) -> {
|
|
||||||
global.set("left", local.get());
|
|
||||||
System.out.println("value_inside "+global);
|
|
||||||
}));
|
|
||||||
value_inside.then((validator) -> validator.validate((token) -> token.getValue().equals("[")))
|
|
||||||
.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null)))
|
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals("]")))
|
|
||||||
.then(value_left);
|
|
||||||
value_inside.then(value_left);
|
|
||||||
value_left.end((parent, bag) -> {
|
|
||||||
System.out.println("value_left -> end "+bag);
|
|
||||||
if(bag.get("left") instanceof Value) bag.set(bag.get("left"));
|
|
||||||
else bag.set(new StaticValue(bag.<Token>get("left")));
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
StateTree<JavaElement> value_equals = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "=")));
|
|
||||||
value_equals.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_equals.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "=="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
StateTree<JavaElement> value_minus = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("<"), (bag, token) -> bag.set("action", "<"))).loop();
|
|
||||||
value_minus.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_minus.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "<="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
StateTree<JavaElement> value_max = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals(">"), (bag, token) -> bag.set("action", ">"))).loop();
|
|
||||||
value_max.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_max.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", ">="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("!")) && validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "!="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
StateTree<JavaElement> value_or = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("|"), (bag, token) -> bag.set("action", "|")));
|
|
||||||
value_or.then((validator) -> validator.validate((token) -> token.getValue().equals("|"), (bag, token) -> bag.set("action", "||"))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_or.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "|="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_or.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
StateTree<JavaElement> value_and = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("&"), (bag, token) -> bag.set("action", "&")));
|
|
||||||
value_and.then((validator) -> validator.validate((token) -> token.getValue().equals("&"), (bag, token) -> bag.set("action", "&&"))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_and.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "&="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_and.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
StateTree<JavaElement> value_plus = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("+"), (bag, token) -> bag.set("action", "+")));
|
|
||||||
value_plus.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_plus.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "+="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_plus.then((validator) -> validator.validate((token) -> token.getValue().equals("+"), (bag, token) -> bag.set("action", "++"))).end(value_builder);
|
|
||||||
StateTree<JavaElement> value_min = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("-"), (bag, token) -> bag.set("action", "-")));
|
|
||||||
value_min.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_min.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "-="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_min.then((validator) -> validator.validate((token) -> token.getValue().equals("-"), (bag, token) -> bag.set("action", "--"))).end(value_builder);
|
|
||||||
StateTree<JavaElement> value_div = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("/"), (bag, token) -> bag.set("action", "/")));
|
|
||||||
value_div.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_div.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "/="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
StateTree<JavaElement> value_mod = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("%"), (bag, token) -> bag.set("action", "%")));
|
|
||||||
value_mod.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_mod.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "%="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
StateTree<JavaElement> value_xor = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("^"), (bag, token) -> bag.set("action", "^")));
|
|
||||||
value_xor.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_xor.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "^="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
StateTree<JavaElement> value_mult = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("*"), (bag, token) -> bag.set("action", "*")));
|
|
||||||
value_mult.then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_mult.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "*="))).then(new RedirectStateTree<>(value_container, value_right)).end(value_builder);
|
|
||||||
value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("?")))
|
|
||||||
.then(new RedirectStateTree<>(value_container, value_right))
|
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals(":"), (bag, token) -> bag.set("action", "?:")))
|
|
||||||
.then(new RedirectStateTree<>(value_container, value_right))
|
|
||||||
.end(value_builder);
|
|
||||||
StateTree<JavaElement> value_instanceof = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("instanceof"), (bag, token) -> bag.set("action", "instanceof")))
|
|
||||||
.then(new RedirectStateTree<>(type, value_right));
|
|
||||||
value_instanceof.end(value_builder);
|
|
||||||
value_instanceof.then(value_left);
|
|
||||||
|
|
||||||
braces_container.then(clazz_container);
|
|
||||||
StateTree<JavaElement> braces_array = braces_container.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null)));
|
|
||||||
braces_array.then((validator) -> validator.validate((token) -> token.getValue().equals(",")))
|
|
||||||
.then(braces_array);
|
|
||||||
braces_array.end((a,b) -> a);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//ENUM VALUE
|
//ENUM VALUE
|
||||||
|
@ -589,7 +373,7 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
enum_name.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))).end((a,b) -> a);
|
enum_name.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))).end((a,b) -> a);
|
||||||
enum_name.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(enum_name);
|
enum_name.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(enum_name);
|
||||||
StateTree<JavaElement> enum_arg = enum_name.then((validator) -> validator.validate((token) -> token.getValue().equals("(")))
|
StateTree<JavaElement> enum_arg = enum_name.then((validator) -> validator.validate((token) -> token.getValue().equals("(")))
|
||||||
.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null)));
|
.then(new RedirectStateTree<>(value, (global, local) -> global.set(null)));
|
||||||
StateTree<JavaElement> enum_end = enum_arg.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
StateTree<JavaElement> enum_end = enum_arg.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
||||||
enum_end.end((a,b) -> a);
|
enum_end.end((a,b) -> a);
|
||||||
enum_end.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))).end((a,b) -> a);
|
enum_end.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))).end((a,b) -> a);
|
||||||
|
@ -645,7 +429,7 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
}));
|
}));
|
||||||
annotation_value.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(annotation_var);
|
annotation_value.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(annotation_var);
|
||||||
annotation_value.then(annotation_end);
|
annotation_value.then(annotation_end);
|
||||||
annotation_begin.then(new RedirectStateTree<>(value_container, (global, local) -> {
|
annotation_begin.then(new RedirectStateTree<>(value, (global, local) -> {
|
||||||
Map<Token, Value> map = global.get("values");
|
Map<Token, Value> map = global.get("values");
|
||||||
if(map == null){
|
if(map == null){
|
||||||
map = new LinkedHashMap<>();
|
map = new LinkedHashMap<>();
|
||||||
|
@ -690,7 +474,7 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
StateTree<JavaElement> variable_split = variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals(",")));
|
StateTree<JavaElement> variable_split = variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals(",")));
|
||||||
variable_split.then(variable_name);
|
variable_split.then(variable_name);
|
||||||
StateTree<JavaElement> variable_value = variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals("=")))
|
StateTree<JavaElement> variable_value = variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals("=")))
|
||||||
.then(new RedirectStateTree<>(value_container, (global, local) -> {
|
.then(new RedirectStateTree<>(value, (global, local) -> {
|
||||||
global.<Map<Token, Value>>get("vars").put(global.get("last"), local.get());
|
global.<Map<Token, Value>>get("vars").put(global.get("last"), local.get());
|
||||||
}));
|
}));
|
||||||
variable_value.then(variable_split);
|
variable_value.then(variable_split);
|
||||||
|
@ -701,12 +485,12 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
//OPERATION
|
//OPERATION
|
||||||
StateTree<JavaElement> operation = new StateTree<>();
|
StateTree<JavaElement> operation = new StateTree<>();
|
||||||
// operation_name.then((validator) -> validator.validate((token) -> token.getValue().equals("=")))
|
// operation_name.then((validator) -> validator.validate((token) -> token.getValue().equals("=")))
|
||||||
// .then(new RedirectStateTree<>(value_container, (global, local) -> global.set("newer", local.get())))
|
// .then(new RedirectStateTree<>(value, (global, local) -> global.set("newer", local.get())))
|
||||||
// .then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
// .then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
||||||
// .end((parent, bag) -> parent);
|
// .end((parent, bag) -> parent);
|
||||||
|
|
||||||
StateTree<JavaElement> operation_return = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("return")));
|
StateTree<JavaElement> operation_return = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("return")));
|
||||||
operation_return.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(local.get())))
|
operation_return.then(new RedirectStateTree<>(value, (global, local) -> global.set(local.get())))
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
||||||
.end((parent,bag) -> {
|
.end((parent,bag) -> {
|
||||||
ReturnOperation op = new ReturnOperation(bag.get());
|
ReturnOperation op = new ReturnOperation(bag.get());
|
||||||
|
@ -722,7 +506,7 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
});
|
});
|
||||||
|
|
||||||
operation.then((validator) -> validator.validate((token) -> token.getValue().equals("throw")))
|
operation.then((validator) -> validator.validate((token) -> token.getValue().equals("throw")))
|
||||||
.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(local.get())))
|
.then(new RedirectStateTree<>(value, (global, local) -> global.set(local.get())))
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
||||||
.end((parent,bag) -> {
|
.end((parent,bag) -> {
|
||||||
ThrowOperation op = new ThrowOperation(bag.get());
|
ThrowOperation op = new ThrowOperation(bag.get());
|
||||||
|
@ -802,7 +586,7 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
System.out.println("inside IF");
|
System.out.println("inside IF");
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(local.get())))
|
.then(new RedirectStateTree<>(value, (global, local) -> global.set(local.get())))
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals(")")))
|
.then((validator) -> validator.validate((token) -> token.getValue().equals(")")))
|
||||||
.end((parent,bag) -> {
|
.end((parent,bag) -> {
|
||||||
System.out.println("if "+bag);
|
System.out.println("if "+bag);
|
||||||
|
@ -819,7 +603,7 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
|
|
||||||
StateTree<JavaElement> switch_cases = new StateTree<>();
|
StateTree<JavaElement> switch_cases = new StateTree<>();
|
||||||
StateTree<JavaElement> switch_case_begin = switch_cases.then((validator) -> validator.validate((token) -> token.getValue().equals("case")));
|
StateTree<JavaElement> switch_case_begin = switch_cases.then((validator) -> validator.validate((token) -> token.getValue().equals("case")));
|
||||||
StateTree<JavaElement> switch_case = switch_case_begin.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null)))
|
StateTree<JavaElement> switch_case = switch_case_begin.then(new RedirectStateTree<>(value, (global, local) -> global.set(null)))
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals(":")));
|
.then((validator) -> validator.validate((token) -> token.getValue().equals(":")));
|
||||||
switch_case.then(switch_case_begin);
|
switch_case.then(switch_case_begin);
|
||||||
switch_case.end((a,b) -> a)
|
switch_case.end((a,b) -> a)
|
||||||
|
@ -833,7 +617,7 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
|
|
||||||
operation.then((validator) -> validator.validate((token) -> token.getValue().equals("switch")))
|
operation.then((validator) -> validator.validate((token) -> token.getValue().equals("switch")))
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals("(")))
|
.then((validator) -> validator.validate((token) -> token.getValue().equals("(")))
|
||||||
.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null)))
|
.then(new RedirectStateTree<>(value, (global, local) -> global.set(null)))
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals(")"))
|
.then((validator) -> validator.validate((token) -> token.getValue().equals(")"))
|
||||||
&& validator.validate((token) -> token.getValue().equals("{")))
|
&& validator.validate((token) -> token.getValue().equals("{")))
|
||||||
.end((a,b) -> a)
|
.end((a,b) -> a)
|
||||||
|
@ -858,7 +642,7 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
operation_for_type.then(operation_for_assign);
|
operation_for_type.then(operation_for_assign);
|
||||||
|
|
||||||
StateTree<JavaElement> operation_for_assign_end = operation_for_assign.then((validator) -> validator.validate((token) -> token.getValue().equals("=")))
|
StateTree<JavaElement> operation_for_assign_end = operation_for_assign.then((validator) -> validator.validate((token) -> token.getValue().equals("=")))
|
||||||
.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null)));
|
.then(new RedirectStateTree<>(value, (global, local) -> global.set(null)));
|
||||||
|
|
||||||
operation_for_assign.then(operation_for_assign);
|
operation_for_assign.then(operation_for_assign);
|
||||||
operation_for_assign.then(operation_for_first_part);
|
operation_for_assign.then(operation_for_first_part);
|
||||||
|
@ -871,7 +655,7 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
|
|
||||||
StateTree<JavaElement> operation_for_second_part = operation_for_first_part.then((validator) -> validator.validate((token) -> token.getValue().equals(";")));
|
StateTree<JavaElement> operation_for_second_part = operation_for_first_part.then((validator) -> validator.validate((token) -> token.getValue().equals(";")));
|
||||||
|
|
||||||
operation_for_first_part.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null)))
|
operation_for_first_part.then(new RedirectStateTree<>(value, (global, local) -> global.set(null)))
|
||||||
.then(operation_for_second_part);
|
.then(operation_for_second_part);
|
||||||
|
|
||||||
StateTree<JavaElement> operation_for_end = operation_for_second_part.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
StateTree<JavaElement> operation_for_end = operation_for_second_part.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
||||||
|
@ -893,17 +677,17 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
.end((a,b) -> a);
|
.end((a,b) -> a);
|
||||||
|
|
||||||
operation_for_assign.then((validator) -> validator.validate((token) -> token.getValue().equals(":")))
|
operation_for_assign.then((validator) -> validator.validate((token) -> token.getValue().equals(":")))
|
||||||
.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null)))
|
.then(new RedirectStateTree<>(value, (global, local) -> global.set(null)))
|
||||||
.then(operation_for_end);
|
.then(operation_for_end);
|
||||||
|
|
||||||
StateTree<JavaElement> operation_for_update = operation_for_second_part.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null)));
|
StateTree<JavaElement> operation_for_update = operation_for_second_part.then(new RedirectStateTree<>(value, (global, local) -> global.set(null)));
|
||||||
operation_for_update.then(operation_for_end);
|
operation_for_update.then(operation_for_end);
|
||||||
operation_for_update.then((validator) -> validator.validate((token) -> token.getValue().equals(",")))
|
operation_for_update.then((validator) -> validator.validate((token) -> token.getValue().equals(",")))
|
||||||
.then(operation_for_update);
|
.then(operation_for_update);
|
||||||
|
|
||||||
StateTree<JavaElement> operation_while = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("while")))
|
StateTree<JavaElement> operation_while = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("while")))
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals("(")))
|
.then((validator) -> validator.validate((token) -> token.getValue().equals("(")))
|
||||||
.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null)))
|
.then(new RedirectStateTree<>(value, (global, local) -> global.set(null)))
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
||||||
operation_while.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
operation_while.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
||||||
.<JavaElement>end((parent,bag) -> {
|
.<JavaElement>end((parent,bag) -> {
|
||||||
|
@ -923,7 +707,7 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
|
|
||||||
operation.then((validator) -> validator.validate((token) -> token.getValue().equals("synchronized")))
|
operation.then((validator) -> validator.validate((token) -> token.getValue().equals("synchronized")))
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals("(")))
|
.then((validator) -> validator.validate((token) -> token.getValue().equals("(")))
|
||||||
.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(local.get())))
|
.then(new RedirectStateTree<>(value, (global, local) -> global.set(local.get())))
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals(")")))
|
.then((validator) -> validator.validate((token) -> token.getValue().equals(")")))
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
||||||
.<JavaElement>end((parent,bag) -> {
|
.<JavaElement>end((parent,bag) -> {
|
||||||
|
@ -935,7 +719,7 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}")))
|
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}")))
|
||||||
.end((a,b) -> a);
|
.end((a,b) -> a);
|
||||||
|
|
||||||
StateTree<JavaElement> operation_name = operation.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(local.get())));
|
StateTree<JavaElement> operation_name = operation.then(new RedirectStateTree<>(value, (global, local) -> global.set(local.get())));
|
||||||
operation_name.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))).end((parent,bag) -> {
|
operation_name.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))).end((parent,bag) -> {
|
||||||
Value action = bag.get();
|
Value action = bag.get();
|
||||||
if(action instanceof BiValue){
|
if(action instanceof BiValue){
|
||||||
|
@ -958,7 +742,7 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
operation_end.then(operation_call);
|
operation_end.then(operation_call);
|
||||||
operation_end.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
operation_end.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
||||||
.end((a,b) -> a);
|
.end((a,b) -> a);
|
||||||
StateTree<JavaElement> operation_value = operation_begin.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null)));
|
StateTree<JavaElement> operation_value = operation_begin.then(new RedirectStateTree<>(value, (global, local) -> global.set(null)));
|
||||||
operation_value.then(operation_end);
|
operation_value.then(operation_end);
|
||||||
operation_value.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(operation_value);
|
operation_value.then((validator) -> validator.validate((token) -> token.getValue().equals(","))).then(operation_value);
|
||||||
|
|
||||||
|
@ -1010,7 +794,7 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end();
|
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end();
|
||||||
function_end.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))).end();
|
function_end.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))).end();
|
||||||
function_end.then((validator) -> validator.validate((token) -> token.getValue().equals("default")))
|
function_end.then((validator) -> validator.validate((token) -> token.getValue().equals("default")))
|
||||||
.then(new RedirectStateTree<>(value_container, (global, local) -> System.out.println("TODO DEFAULT IN FUNCTION")))
|
.then(new RedirectStateTree<>(value, (global, local) -> System.out.println("TODO DEFAULT IN FUNCTION")))
|
||||||
.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
||||||
.end(function_builder);
|
.end(function_builder);
|
||||||
|
|
||||||
|
@ -1301,4 +1085,252 @@ public class JavaParser extends Parser<JavaElement> {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
|
||||||
|
StateTree<JavaElement> value = new StateTree<>();
|
||||||
|
|
||||||
|
StateTree<JavaElement> value_list = new StateTree<>();
|
||||||
|
StateTree<JavaElement> value_list_element = value_list.then(new RedirectStateTree<>(value, (global, local) -> {
|
||||||
|
List<Value> list = global.get();
|
||||||
|
if(list == null){
|
||||||
|
list = new ArrayList<>();
|
||||||
|
global.set(list);
|
||||||
|
}
|
||||||
|
list.add(local.get());
|
||||||
|
}));
|
||||||
|
value_list_element.end();
|
||||||
|
value_list_element.then((validator) -> validator.validate((token) -> token.getValue().equals(",")))
|
||||||
|
.then(value_list_element);
|
||||||
|
|
||||||
|
value.then((validator) -> validator.validate(
|
||||||
|
(token) -> token.getType().equals(TokenType.STRING) || token.getType().equals(TokenType.CHAR),
|
||||||
|
(bag, token) -> bag.set(token)))
|
||||||
|
.end((parent,bag) -> {
|
||||||
|
bag.set(new StaticValue(bag.<Token>get()));
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
|
||||||
|
StateTree<JavaElement> value_instance = value.then((validator) -> validator.validate(
|
||||||
|
(token) -> token.getValue().equals("new"),
|
||||||
|
(bag, token) -> bag.set("newit", token)));
|
||||||
|
StateTree<JavaElement> value_name = new StateTree<JavaElement>();
|
||||||
|
value.then(value_name);
|
||||||
|
value_instance.then(new RedirectStateTree<>(value_name, (global, local) -> {
|
||||||
|
System.out.println(local.get()+"");
|
||||||
|
if(global.has("newit")) global.set(new InstanceValue(global.<Token>get("newit"), local.<MethodCallValue>get().getToken(), local.<MethodCallValue>get().getParameters()));
|
||||||
|
else global.set(local.get());
|
||||||
|
}))
|
||||||
|
.end((a,b) -> a)
|
||||||
|
.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
||||||
|
.end((a,b) -> a)
|
||||||
|
.multiple(braces_container)
|
||||||
|
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end((a,b) -> a);
|
||||||
|
value_name = value_name.then(new RedirectStateTree<>(type, (global, local) -> {
|
||||||
|
System.out.println("value_name {");
|
||||||
|
System.out.println("global: "+global);
|
||||||
|
System.out.println("local: "+local);
|
||||||
|
System.out.println("}");
|
||||||
|
if(global.get() == null) global.set(local.get());
|
||||||
|
else global.set(global.<Token>get().concat(local.get()));
|
||||||
|
}));
|
||||||
|
value_name.end((parent,bag) -> {
|
||||||
|
System.out.println("{value_name} "+bag);
|
||||||
|
Value result = new StaticValue(bag.<Token>get());
|
||||||
|
bag.set(result);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
|
||||||
|
value_name.then((validator) -> validator.validate((token) -> token.getValue().equals(":")) && validator.validate((token) -> token.getValue().equals(":")))
|
||||||
|
.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME)))
|
||||||
|
.end((a,b) -> a);
|
||||||
|
|
||||||
|
StateTree<JavaElement> value_call = value_name.then((validator) -> validator.validate(
|
||||||
|
(token) -> token.getValue().equals("."),
|
||||||
|
(bag, token) -> {
|
||||||
|
Value prev = bag.get("prev");
|
||||||
|
if(prev == null){
|
||||||
|
bag.set("prev", new StaticValue(bag.<Token>get()));
|
||||||
|
}else{
|
||||||
|
Integer paramters = bag.get("args");
|
||||||
|
List<Value> list = null;
|
||||||
|
if(paramters != null){
|
||||||
|
list = new ArrayList<>();
|
||||||
|
for(int i = 0; i < paramters; i++) list.add(bag.<Bag>get("arg"+i).get());
|
||||||
|
bag.remove("args");
|
||||||
|
}
|
||||||
|
MethodCallValue methodCall = new MethodCallValue(prev, bag.get("gen"), bag.get(), list);
|
||||||
|
bag.set("prev", methodCall);
|
||||||
|
bag.remove("gen");
|
||||||
|
}
|
||||||
|
bag.set(new Token(token.getLineNumber(), token.getCharacterNumber(), "", TokenType.GROUP));
|
||||||
|
}));
|
||||||
|
value_call.end((a,b) -> a);
|
||||||
|
value_call.then(new RedirectStateTree<>(gen, (global, local) -> global.set("gen", global.<Token>get().concat(local.get())))).then(value_name);
|
||||||
|
value_call.then(value_name);
|
||||||
|
StateTree<JavaElement> value_array_begin = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("[")));
|
||||||
|
StateTree<JavaElement> value_array_end = value_array_begin.then((validator) -> validator.validate((token) -> token.getValue().equals("]")));
|
||||||
|
value_array_begin.then(new RedirectStateTree<>(value, (global, local) -> global.set("inside", local)))
|
||||||
|
.then(value_array_end);
|
||||||
|
value_array_end.end((parent,bag) -> {
|
||||||
|
//to change
|
||||||
|
bag.set(new MethodCallValue(null, null, bag.get(), null));
|
||||||
|
return parent;
|
||||||
|
})
|
||||||
|
.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
||||||
|
.end((a,b) -> a)
|
||||||
|
.multiple(value_list)
|
||||||
|
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end((a,b) -> a);
|
||||||
|
value_array_end.then(value_call);
|
||||||
|
value_array_end.then(value_array_begin);
|
||||||
|
|
||||||
|
StateTree<JavaElement> value_arg_begin = value_name.then((validator) -> validator.validate(
|
||||||
|
(token) -> token.getValue().equals("("),
|
||||||
|
(bag, token) -> bag.set(bag.<Token>get().concat(token))));
|
||||||
|
StateTree<JavaElement> value_arg_end = value_arg_begin.then((validator) -> validator.validate(
|
||||||
|
(token) -> token.getValue().equals(")"),
|
||||||
|
(bag, token) -> bag.set(bag.<Token>get().concat(token))));
|
||||||
|
value_arg_end.end((parent,bag) -> {
|
||||||
|
Integer paramters = bag.get("args");
|
||||||
|
List<Value> list = null;
|
||||||
|
if(paramters != null){
|
||||||
|
list = new ArrayList<>();
|
||||||
|
for(int i = 0; i < paramters; i++) list.add(bag.<Bag>get("arg"+i).get());
|
||||||
|
}
|
||||||
|
|
||||||
|
MethodCallValue methodCall = new MethodCallValue(bag.get("prev"), bag.get("gen"), bag.get(), list);
|
||||||
|
bag.set(methodCall);
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
value_arg_end.then(value_call);
|
||||||
|
value_arg_end.then(value_array_begin);
|
||||||
|
StateTree<JavaElement> value_generic_begin = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("<")));
|
||||||
|
StateTree<JavaElement> value_generic_name = value_generic_begin.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME)));
|
||||||
|
StateTree<JavaElement> value_generic_split = value_generic_name.then((validator) -> validator.validate((token) -> token.getValue().equals(",")));
|
||||||
|
StateTree<JavaElement> value_generic_end = value_generic_begin.then((validator) -> validator.validate((token) -> token.getValue().equals(">")));
|
||||||
|
value_generic_end.then(value_arg_begin);
|
||||||
|
value_generic_end.then(value_generic_name);
|
||||||
|
value_generic_end.then(value_generic_split);
|
||||||
|
value_generic_name.then(value_generic_begin);
|
||||||
|
value_generic_name.then(value_generic_end);
|
||||||
|
value_generic_split.then(value_generic_name);
|
||||||
|
StateTree<JavaElement> value_arg = value_arg_begin.then(new RedirectStateTree<>(value, (global, local) -> {
|
||||||
|
Integer count = global.get("args");
|
||||||
|
if(count == null) count = 0;
|
||||||
|
global.set("arg"+count, local);
|
||||||
|
global.set("args", (count+1));
|
||||||
|
}));
|
||||||
|
value_arg.then((validator) -> validator.validate((token) -> token.getValue().equals(",")))
|
||||||
|
.then(value_arg);
|
||||||
|
value_arg.then(value_arg_end);
|
||||||
|
|
||||||
|
StateTree<JavaElement> value_left = new StateTree<>();
|
||||||
|
|
||||||
|
StateTree<JavaElement> value_parenthesis = value.then((validator) -> validator.validate((token) -> token.getValue().equals("(")));
|
||||||
|
StateTree<JavaElement> value_cast = value_parenthesis.then(new RedirectStateTree<>(type, (global, local) -> global.set(null)))
|
||||||
|
.then((validator) -> validator.validate((token) -> token.getValue().equals(")")))
|
||||||
|
.then(new RedirectStateTree<>(value, (global, local) -> global.set(null)));
|
||||||
|
value_cast.then(value_left);
|
||||||
|
StateTree<JavaElement> value_lambda_arg = value_parenthesis.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME)));
|
||||||
|
value_lambda_arg.then((validator) -> validator.validate((token) -> token.getValue().equals(",")))
|
||||||
|
.then(value_lambda_arg);
|
||||||
|
StateTree<JavaElement> value_lambda = value_parenthesis.then((validator) ->
|
||||||
|
validator.validate((token) -> token.getValue().equals(")")) &&
|
||||||
|
validator.validate((token) -> token.getValue().equals("-")) &&
|
||||||
|
validator.validate((token) -> token.getValue().equals(">")));
|
||||||
|
value_lambda.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
||||||
|
.<JavaElement>end((a,bag) -> {
|
||||||
|
bag.set(new LambdaValue(null, new ArrayList<>()));
|
||||||
|
return a;
|
||||||
|
})
|
||||||
|
.multiple(function_container)
|
||||||
|
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end((a,b) -> a);
|
||||||
|
value_lambda.then(new RedirectStateTree<>(value, (global, local) -> global.set("in", local.get()))).end((a,bag) ->{
|
||||||
|
bag.set(new LambdaValue(null, bag.<Value>get("in")));
|
||||||
|
return a;
|
||||||
|
});
|
||||||
|
value_lambda_arg.then(value_lambda);
|
||||||
|
StateTree<JavaElement> value_parenthesis_end = value_parenthesis.then(new RedirectStateTree<>(value, (global, local) -> global.set("left", local.get())))
|
||||||
|
.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
||||||
|
value_parenthesis_end.end();
|
||||||
|
value_parenthesis_end.then(value_call);
|
||||||
|
value_parenthesis_end.then(value_left);
|
||||||
|
value.then((validator) -> validator.validate((token) -> token.getValue().equals("!"))).then(value);
|
||||||
|
value.then((validator) -> validator.validate((token) -> token.getValue().equals("-"))).then(value);
|
||||||
|
value.then((validator) -> validator.validate((token) -> token.getValue().equals("+"))).then(value);
|
||||||
|
value.then((validator) -> validator.validate((token) -> token.getValue().equals("~"))).then(value);
|
||||||
|
StateTree<JavaElement> value_inside = value.then(new RedirectStateTree<>(value, (global, local) -> {
|
||||||
|
global.set("left", local.get());
|
||||||
|
System.out.println("value_inside "+global);
|
||||||
|
}));
|
||||||
|
value_inside.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("]")))
|
||||||
|
.then(value_left);
|
||||||
|
value_inside.then(value_left);
|
||||||
|
value_left.end((parent, bag) -> {
|
||||||
|
System.out.println("value_left -> end "+bag);
|
||||||
|
if(bag.get("left") instanceof Value) bag.set(bag.get("left"));
|
||||||
|
else bag.set(new StaticValue(bag.<Token>get("left")));
|
||||||
|
return null;
|
||||||
|
});
|
||||||
|
StateTree<JavaElement> value_equals = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "=")));
|
||||||
|
value_equals.then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_equals.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "=="))).then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
StateTree<JavaElement> value_minus = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("<"), (bag, token) -> bag.set("action", "<"))).loop();
|
||||||
|
value_minus.then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_minus.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "<="))).then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
StateTree<JavaElement> value_max = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals(">"), (bag, token) -> bag.set("action", ">"))).loop();
|
||||||
|
value_max.then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_max.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", ">="))).then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("!")) && validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "!="))).then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
StateTree<JavaElement> value_or = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("|"), (bag, token) -> bag.set("action", "|")));
|
||||||
|
value_or.then((validator) -> validator.validate((token) -> token.getValue().equals("|"), (bag, token) -> bag.set("action", "||"))).then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_or.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "|="))).then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_or.then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
StateTree<JavaElement> value_and = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("&"), (bag, token) -> bag.set("action", "&")));
|
||||||
|
value_and.then((validator) -> validator.validate((token) -> token.getValue().equals("&"), (bag, token) -> bag.set("action", "&&"))).then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_and.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "&="))).then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_and.then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
StateTree<JavaElement> value_plus = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("+"), (bag, token) -> bag.set("action", "+")));
|
||||||
|
value_plus.then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_plus.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "+="))).then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_plus.then((validator) -> validator.validate((token) -> token.getValue().equals("+"), (bag, token) -> bag.set("action", "++"))).end(value_builder);
|
||||||
|
StateTree<JavaElement> value_min = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("-"), (bag, token) -> bag.set("action", "-")));
|
||||||
|
value_min.then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_min.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "-="))).then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_min.then((validator) -> validator.validate((token) -> token.getValue().equals("-"), (bag, token) -> bag.set("action", "--"))).end(value_builder);
|
||||||
|
StateTree<JavaElement> value_div = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("/"), (bag, token) -> bag.set("action", "/")));
|
||||||
|
value_div.then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_div.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "/="))).then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
StateTree<JavaElement> value_mod = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("%"), (bag, token) -> bag.set("action", "%")));
|
||||||
|
value_mod.then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_mod.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "%="))).then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
StateTree<JavaElement> value_xor = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("^"), (bag, token) -> bag.set("action", "^")));
|
||||||
|
value_xor.then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_xor.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "^="))).then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
StateTree<JavaElement> value_mult = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("*"), (bag, token) -> bag.set("action", "*")));
|
||||||
|
value_mult.then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_mult.then((validator) -> validator.validate((token) -> token.getValue().equals("="), (bag, token) -> bag.set("action", "*="))).then(new RedirectStateTree<>(value, value_right)).end(value_builder);
|
||||||
|
value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("?")))
|
||||||
|
.then(new RedirectStateTree<>(value, value_right))
|
||||||
|
.then((validator) -> validator.validate((token) -> token.getValue().equals(":"), (bag, token) -> bag.set("action", "?:")))
|
||||||
|
.then(new RedirectStateTree<>(value, value_right))
|
||||||
|
.end(value_builder);
|
||||||
|
StateTree<JavaElement> value_instanceof = value_left.then((validator) -> validator.validate((token) -> token.getValue().equals("instanceof"), (bag, token) -> bag.set("action", "instanceof")))
|
||||||
|
.then(new RedirectStateTree<>(type, value_right));
|
||||||
|
value_instanceof.end(value_builder);
|
||||||
|
value_instanceof.then(value_left);
|
||||||
|
|
||||||
|
braces_container.then(clazz_container);
|
||||||
|
StateTree<JavaElement> braces_array = braces_container.then(new RedirectStateTree<>(value, (global, local) -> global.set(null)));
|
||||||
|
braces_array.then((validator) -> validator.validate((token) -> token.getValue().equals(",")))
|
||||||
|
.then(braces_array);
|
||||||
|
braces_array.end((a,b) -> a);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ public class BaseElementTests{
|
||||||
System.out.println("["+getClass().getSimpleName()+"] passed "+size+" tests");
|
System.out.println("["+getClass().getSimpleName()+"] passed "+size+" tests");
|
||||||
}catch(Exception|AssertionError e){
|
}catch(Exception|AssertionError e){
|
||||||
System.err.println("["+getClass().getSimpleName()+"] failed "+text+" for cause "+e.getMessage());
|
System.err.println("["+getClass().getSimpleName()+"] failed "+text+" for cause "+e.getMessage());
|
||||||
e.printStackTrace();
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -71,6 +71,31 @@ public class TypeOfValuesTests extends BaseElementTests{
|
||||||
+ " if(a && b == c){}"
|
+ " if(a && b == c){}"
|
||||||
+ "}"
|
+ "}"
|
||||||
+ "}",
|
+ "}",
|
||||||
|
(javafile) -> {
|
||||||
|
BiValue value = gotoValue(javafile);
|
||||||
|
printObject(value);
|
||||||
|
StaticValue left = (StaticValue) value.left();
|
||||||
|
BiValue right = (BiValue) value.right();
|
||||||
|
|
||||||
|
StaticValue rightLeft = (StaticValue) right.left();
|
||||||
|
StaticValue rightRight = (StaticValue) right.right();
|
||||||
|
|
||||||
|
assertToken("a", left.getToken());
|
||||||
|
assertEquals("&&", value.getAction());
|
||||||
|
assertToken("b", rightLeft.getToken());
|
||||||
|
|
||||||
|
assertEquals("==", right.getAction());
|
||||||
|
assertToken("c", rightRight.getToken());
|
||||||
|
});
|
||||||
|
|
||||||
|
register(
|
||||||
|
"package be.jeffcheasey88;"
|
||||||
|
+ ""
|
||||||
|
+ "public static class Test{ "
|
||||||
|
+ " void test(){ "
|
||||||
|
+ " if((a && b) == c){}"
|
||||||
|
+ "}"
|
||||||
|
+ "}",
|
||||||
(javafile) -> {
|
(javafile) -> {
|
||||||
BiValue value = gotoValue(javafile);
|
BiValue value = gotoValue(javafile);
|
||||||
printObject(value);
|
printObject(value);
|
||||||
|
|
Loading…
Add table
Reference in a new issue