[Build] Base Operations

This commit is contained in:
jeffcheasey88 2023-09-18 14:01:12 +02:00
parent 74a1f3be08
commit 939d07108c

View file

@ -7,6 +7,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import org.junit.jupiter.api.Test;
@ -23,6 +24,7 @@ import be.jeffcheasey88.peeratcode.parser.java.operation.ContinueOperation;
import be.jeffcheasey88.peeratcode.parser.java.operation.DoOperation;
import be.jeffcheasey88.peeratcode.parser.java.operation.ElseOperation;
import be.jeffcheasey88.peeratcode.parser.java.operation.FinallyOperation;
import be.jeffcheasey88.peeratcode.parser.java.operation.ForOperation;
import be.jeffcheasey88.peeratcode.parser.java.operation.IfOperation;
import be.jeffcheasey88.peeratcode.parser.java.operation.ReturnOperation;
import be.jeffcheasey88.peeratcode.parser.java.operation.SynchronizedOperation;
@ -35,12 +37,6 @@ import be.jeffcheasey88.peeratcode.parser.state.StateTree;
public class OperationTests {
public static StateTree<JavaElement> get(){
BiConsumer<Bag, Token> methodCallConcat = (bag, token) -> {
Token value = bag.get();
if(value == null) bag.set(token);
else bag.set(value.concat(token));
};
StateTree<JavaElement> operation = new StateTree<>();
StateTree<JavaElement> operation_name = operation.then(new RedirectStateTree<>(ValueTests.get(), (global, local) -> global.set("left", local.get())));
operation_name.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))).end();
@ -249,23 +245,45 @@ public class OperationTests {
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<>(ValueTests.get(), (global, local) -> global.set(null)))
operation_for_first_part.then(new RedirectStateTree<>(ValueTests.get(), (global, local) -> global.set("condition", local.get())))
.then(operation_for_second_part);
BiFunction<JavaElement, Bag, JavaElement> operation_for_builder = (parent, bag) -> {
List<Variable> init_vars = new ArrayList<>();
List<Value> init_values = new ArrayList<>();
List<Value> updates = new ArrayList<>();
if(bag.has("init_type")){
}
ForOperation op = new ForOperation(init_vars, init_values, bag.get("condition"), updates);
if(parent instanceof OperationContainer) ((OperationContainer)parent).addOperation(op);
return op;
};
StateTree<JavaElement> operation_for_end = operation_for_second_part.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
operation_for_end.end((a,b) -> a);
operation_for_end.end(operation_for_builder);
operation_for_end.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
.end((a,b) -> a)
.end(operation_for_builder)
// .multiple(function_container)
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}")))
.end((a,b) -> a);
.end();
operation_for_assign.then((validator) -> validator.validate((token) -> token.getValue().equals(":")))
.then(new RedirectStateTree<>(ValueTests.get(), (global, local) -> global.set(null)))
.then(operation_for_end);
StateTree<JavaElement> operation_for_update = operation_for_second_part.then(new RedirectStateTree<>(ValueTests.get(), (global, local) -> global.set(null)));
StateTree<JavaElement> operation_for_update = operation_for_second_part.then(new RedirectStateTree<>(ValueTests.get(), (global, local) -> {
List<Value> list = global.get("updates");
if(list == null){
list = new ArrayList<>();
global.set("updates", list);
}
list.add(local.get());
}));
operation_for_update.then(operation_for_end);
operation_for_update.then((validator) -> validator.validate((token) -> token.getValue().equals(",")))
.then(operation_for_update);
@ -370,6 +388,8 @@ public class OperationTests {
@Test
void forOp() throws Exception{
testCase("for(;;){}");
testCase("for(int i = 4,j=6;j < i;i++,j++){}");
testCase("for(i = 4,j=6;j < i;i++,j++){}");
}
@Test