[AST] Lambdas

This commit is contained in:
jeffcheasey88 2023-11-14 08:19:56 +01:00
parent d402407ae2
commit 34b7419af9
2 changed files with 40 additions and 12 deletions

View file

@ -319,13 +319,14 @@ public class JavaParser extends Parser<JavaElement> {
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(), list);
MethodCallValue methodCall = new MethodCallValue(prev, bag.get("gen"), bag.get(), list);
bag.set("prev", methodCall);
bag.remove("gen");
}
bag.set(token);
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(global.<Token>get().concat(local.get())))).then(value_name);
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("]")));
@ -353,7 +354,7 @@ public class JavaParser extends Parser<JavaElement> {
for(int i = 0; i < paramters; i++) list.add(bag.<Bag>get("arg"+i).get());
}
MethodCallValue methodCall = new MethodCallValue(bag.get("prev"), bag.get(), list);
MethodCallValue methodCall = new MethodCallValue(bag.get("prev"), bag.get("gen"), bag.get(), list);
bag.set(methodCall);
return null;
});
@ -395,13 +396,13 @@ public class JavaParser extends Parser<JavaElement> {
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, null));
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(null))).end((a,bag) ->{
bag.set(new LambdaValue(null, null));
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);

View file

@ -1,9 +1,12 @@
package dev.peerat.parser.java;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.Operation.OperationContainer;
import dev.peerat.parser.java.Variable.VariableContainer;
public class Value extends JavaElement{
@ -153,19 +156,25 @@ public class Value extends JavaElement{
public static class MethodCallValue extends Value{
private Value base;
private Token generic;
private Token token;
private List<Value> parameters;
public MethodCallValue(Value base, Token token, List<Value> parameters){
public MethodCallValue(Value base, Token generic, Token token, List<Value> parameters){
this.base = base;
this.generic = generic;
this.token = token;
this.parameters = parameters;
}
private Value base(){
public Value base(){
return this.base;
}
public Token getGeneric(){
return this.generic;
}
public Token getToken(){
return token;
}
@ -176,7 +185,7 @@ public class Value extends JavaElement{
@Override
public String toString(){
return base+token.getValue()+((parameters == null ? "":parameters));
return base+"."+((generic == null ? "":generic.getValue()))+token.getValue()+((parameters == null ? "":parameters));
}
@Override
@ -265,7 +274,7 @@ public class Value extends JavaElement{
}
//TO FILL
public static class LambdaValue extends Value{
public static class LambdaValue extends Value implements OperationContainer, VariableContainer{
private List<Token> parameters;
private List<JavaElement> operations;
@ -275,6 +284,12 @@ public class Value extends JavaElement{
this.operations = operations;
}
public LambdaValue(List<Token> parameters, Value value){
this.parameters = parameters;
this.operations = new ArrayList<>();
this.operations.add(value);
}
public List<Token> getParameters(){
return this.parameters;
}
@ -283,9 +298,20 @@ public class Value extends JavaElement{
return this.operations;
}
@Override
public void addVariable(Variable variable){
this.operations.add(variable);
}
@Override
public void addOperation(Operation operation) {
this.operations.add(operation);
}
@Override
public String toString(){
return "() -> {}";
return "("+parameters+") -> {"+operations+"}";
}
@Override
@ -300,5 +326,6 @@ public class Value extends JavaElement{
@Override
public <E extends JavaElement> void findAll(Function<JavaElement, Boolean> finder, List<E> list){
}
}
}