[Build] Base Operations
This commit is contained in:
parent
74a1f3be08
commit
939d07108c
1 changed files with 32 additions and 12 deletions
|
@ -7,6 +7,7 @@ import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
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.DoOperation;
|
||||||
import be.jeffcheasey88.peeratcode.parser.java.operation.ElseOperation;
|
import be.jeffcheasey88.peeratcode.parser.java.operation.ElseOperation;
|
||||||
import be.jeffcheasey88.peeratcode.parser.java.operation.FinallyOperation;
|
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.IfOperation;
|
||||||
import be.jeffcheasey88.peeratcode.parser.java.operation.ReturnOperation;
|
import be.jeffcheasey88.peeratcode.parser.java.operation.ReturnOperation;
|
||||||
import be.jeffcheasey88.peeratcode.parser.java.operation.SynchronizedOperation;
|
import be.jeffcheasey88.peeratcode.parser.java.operation.SynchronizedOperation;
|
||||||
|
@ -35,12 +37,6 @@ import be.jeffcheasey88.peeratcode.parser.state.StateTree;
|
||||||
public class OperationTests {
|
public class OperationTests {
|
||||||
|
|
||||||
public static StateTree<JavaElement> get(){
|
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 = new StateTree<>();
|
||||||
StateTree<JavaElement> operation_name = operation.then(new RedirectStateTree<>(ValueTests.get(), (global, local) -> global.set("left", local.get())));
|
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();
|
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(";")));
|
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);
|
.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(")")));
|
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("{")))
|
operation_for_end.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
||||||
.end((a,b) -> a)
|
.end(operation_for_builder)
|
||||||
// .multiple(function_container)
|
// .multiple(function_container)
|
||||||
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}")))
|
.unique((validator) -> validator.validate((token) -> token.getValue().equals("}")))
|
||||||
.end((a,b) -> a);
|
.end();
|
||||||
|
|
||||||
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<>(ValueTests.get(), (global, local) -> global.set(null)))
|
.then(new RedirectStateTree<>(ValueTests.get(), (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<>(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(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);
|
||||||
|
@ -370,6 +388,8 @@ public class OperationTests {
|
||||||
@Test
|
@Test
|
||||||
void forOp() throws Exception{
|
void forOp() throws Exception{
|
||||||
testCase("for(;;){}");
|
testCase("for(;;){}");
|
||||||
|
testCase("for(int i = 4,j=6;j < i;i++,j++){}");
|
||||||
|
testCase("for(i = 4,j=6;j < i;i++,j++){}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Add table
Reference in a new issue