Add Throw, Continue, Break, If and Synchronized operations

This commit is contained in:
jeffcheasey88 2023-11-07 09:22:58 +01:00
parent d319163f60
commit 9137136ef7

View file

@ -26,7 +26,12 @@ import dev.peerat.parser.java.Function.FunctionContainer;
import dev.peerat.parser.java.Operation.OperationContainer; import dev.peerat.parser.java.Operation.OperationContainer;
import dev.peerat.parser.java.Value.BiValue; import dev.peerat.parser.java.Value.BiValue;
import dev.peerat.parser.java.Variable.VariableContainer; import dev.peerat.parser.java.Variable.VariableContainer;
import dev.peerat.parser.java.operation.BreakOperation;
import dev.peerat.parser.java.operation.ContinueOperation;
import dev.peerat.parser.java.operation.IfOperation;
import dev.peerat.parser.java.operation.ReturnOperation; import dev.peerat.parser.java.operation.ReturnOperation;
import dev.peerat.parser.java.operation.SynchronizedOperation;
import dev.peerat.parser.java.operation.ThrowOperation;
import dev.peerat.parser.state.BuilderStateTree; import dev.peerat.parser.state.BuilderStateTree;
import dev.peerat.parser.state.InitialStateTree; import dev.peerat.parser.state.InitialStateTree;
import dev.peerat.parser.state.RedirectStateTree; import dev.peerat.parser.state.RedirectStateTree;
@ -571,10 +576,16 @@ public class JavaParser extends Parser<JavaElement> {
if(parent instanceof OperationContainer) ((OperationContainer)parent).addOperation(op); if(parent instanceof OperationContainer) ((OperationContainer)parent).addOperation(op);
return null; return null;
}); });
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(null))) .then(new RedirectStateTree<>(value_container, (global, local) -> global.set(local.get())))
.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) .then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
.end((a,b) -> a); .end((parent,bag) -> {
ThrowOperation op = new ThrowOperation(bag.get());
if(parent instanceof OperationContainer) ((OperationContainer)parent).addOperation(op);
return null;
});
operation.then((validator) -> validator.validate((token) -> token.getValue().equals("do"))) operation.then((validator) -> validator.validate((token) -> token.getValue().equals("do")))
.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) .then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
.end((a,b) -> a) .end((a,b) -> a)
@ -627,15 +638,29 @@ public class JavaParser extends Parser<JavaElement> {
operation.then((validator) -> validator.validate((token) -> token.getValue().equals("continue"))) operation.then((validator) -> validator.validate((token) -> token.getValue().equals("continue")))
.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) .then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
.end((a,b) -> a); .end((parent,bag) -> {
ContinueOperation op = new ContinueOperation();
if(parent instanceof OperationContainer) ((OperationContainer)parent).addOperation(op);
return null;
});
operation.then((validator) -> validator.validate((token) -> token.getValue().equals("break"))) operation.then((validator) -> validator.validate((token) -> token.getValue().equals("break")))
.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))) .then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
.end((a,b) -> a); .end((parent,bag) -> {
BreakOperation op = new BreakOperation();
if(parent instanceof OperationContainer) ((OperationContainer)parent).addOperation(op);
return null;
});
StateTree<JavaElement> operation_if = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("if"))) StateTree<JavaElement> operation_if = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("if")))
.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_container, (global, local) -> global.set(local.get())))
.then((validator) -> validator.validate((token) -> token.getValue().equals(")"))) .then((validator) -> validator.validate((token) -> token.getValue().equals(")")))
.end((a,b) -> a); .end((parent,bag) -> {
IfOperation op = new IfOperation(bag.get());
if(parent instanceof OperationContainer) ((OperationContainer)parent).addOperation(op);
return op;
});
operation_if.then(operation); operation_if.then(operation);
operation_if.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) operation_if.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
.end((a,b) -> a) .end((a,b) -> a)
@ -736,10 +761,14 @@ 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(null))) .then(new RedirectStateTree<>(value_container, (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("{")))
.end((a,b) -> a) .<JavaElement>end((parent,bag) -> {
SynchronizedOperation op = new SynchronizedOperation(bag.get());
if(parent instanceof OperationContainer) ((OperationContainer)parent).addOperation(op);
return op;
})
.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((a,b) -> a);