|
|
@ -23,7 +23,10 @@ import dev.peerat.parser.TokenValidator;
|
|
|
|
import dev.peerat.parser.Tokenizer;
|
|
|
|
import dev.peerat.parser.Tokenizer;
|
|
|
|
import dev.peerat.parser.java.Annotation.AnnotableBuffer;
|
|
|
|
import dev.peerat.parser.java.Annotation.AnnotableBuffer;
|
|
|
|
import dev.peerat.parser.java.Function.FunctionContainer;
|
|
|
|
import dev.peerat.parser.java.Function.FunctionContainer;
|
|
|
|
|
|
|
|
import dev.peerat.parser.java.Operation.OperationContainer;
|
|
|
|
|
|
|
|
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.ReturnOperation;
|
|
|
|
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;
|
|
|
@ -88,6 +91,24 @@ public class JavaParser extends Parser<JavaElement> {
|
|
|
|
token = new Token(lineNumber, i+1, value, TokenType.STRING);
|
|
|
|
token = new Token(lineNumber, i+1, value, TokenType.STRING);
|
|
|
|
i = j-1;
|
|
|
|
i = j-1;
|
|
|
|
System.out.println(token);
|
|
|
|
System.out.println(token);
|
|
|
|
|
|
|
|
}else if(c == '\''){
|
|
|
|
|
|
|
|
String value = "'";
|
|
|
|
|
|
|
|
int j = i+1;
|
|
|
|
|
|
|
|
for(; j < line.length(); j++){
|
|
|
|
|
|
|
|
c = line.charAt(j);
|
|
|
|
|
|
|
|
if(c == '\''){
|
|
|
|
|
|
|
|
value+=c;
|
|
|
|
|
|
|
|
j++;
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}else if(c == '\\'){
|
|
|
|
|
|
|
|
value+=c+line.charAt(++j);
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
|
|
value+=c;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
token = new Token(lineNumber, i+1, value, TokenType.CHAR);
|
|
|
|
|
|
|
|
i = j-1;
|
|
|
|
|
|
|
|
System.out.println(token);
|
|
|
|
}else{
|
|
|
|
}else{
|
|
|
|
if(c == '/' && (i < line.length()-1 && line.charAt(i+1) == '/')) break;
|
|
|
|
if(c == '/' && (i < line.length()-1 && line.charAt(i+1) == '/')) break;
|
|
|
|
if(c == '/' && (i < line.length()-1 && line.charAt(i+1) == '*')){
|
|
|
|
if(c == '/' && (i < line.length()-1 && line.charAt(i+1) == '*')){
|
|
|
@ -199,17 +220,18 @@ public class JavaParser extends Parser<JavaElement> {
|
|
|
|
|
|
|
|
|
|
|
|
//VALUE
|
|
|
|
//VALUE
|
|
|
|
BiFunction<JavaElement, Bag, JavaElement> value_builder = (parent, bag) -> {
|
|
|
|
BiFunction<JavaElement, Bag, JavaElement> value_builder = (parent, bag) -> {
|
|
|
|
// if(bag.has("right")){
|
|
|
|
System.out.println(bag);
|
|
|
|
//
|
|
|
|
if(bag.has("right")){
|
|
|
|
// BiValue result = new BiValue(
|
|
|
|
|
|
|
|
//
|
|
|
|
BiValue result = new BiValue(
|
|
|
|
// bag.get("left"),
|
|
|
|
|
|
|
|
//
|
|
|
|
bag.get("left"),
|
|
|
|
// bag.get("action"),
|
|
|
|
|
|
|
|
//
|
|
|
|
bag.get("action"),
|
|
|
|
// bag.get("right"));
|
|
|
|
|
|
|
|
// bag.set(result);
|
|
|
|
bag.get("right"));
|
|
|
|
// }
|
|
|
|
bag.set(result);
|
|
|
|
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
return null;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
@ -234,21 +256,8 @@ public class JavaParser extends Parser<JavaElement> {
|
|
|
|
value_list_element.then((validator) -> validator.validate((token) -> token.getValue().equals(",")))
|
|
|
|
value_list_element.then((validator) -> validator.validate((token) -> token.getValue().equals(",")))
|
|
|
|
.then(value_list_element);
|
|
|
|
.then(value_list_element);
|
|
|
|
|
|
|
|
|
|
|
|
value.then((validator) -> {
|
|
|
|
|
|
|
|
if(validator.validate((token) -> token.getValue().equals("'"))){
|
|
|
|
|
|
|
|
validator.validate((token) -> token.getValue().equals("\\"));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return
|
|
|
|
|
|
|
|
validator.validate((token) -> token.getValue().equals("'"))
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
(validator.validate((token) -> !token.getValue().equals("'"))
|
|
|
|
|
|
|
|
&& validator.validate((token) -> token.getValue().equals("'")));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
}).end();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
value.then((validator) -> validator.validate(
|
|
|
|
value.then((validator) -> validator.validate(
|
|
|
|
(token) -> token.getType().equals(TokenType.STRING),
|
|
|
|
(token) -> token.getType().equals(TokenType.STRING) || token.getType().equals(TokenType.CHAR),
|
|
|
|
(bag, token) -> bag.set(token)))
|
|
|
|
(bag, token) -> bag.set(token)))
|
|
|
|
.end((parent,bag) -> {
|
|
|
|
.end((parent,bag) -> {
|
|
|
|
bag.set(new Value(bag.<Token>get()));
|
|
|
|
bag.set(new Value(bag.<Token>get()));
|
|
|
@ -258,7 +267,7 @@ public class JavaParser extends Parser<JavaElement> {
|
|
|
|
StateTree<JavaElement> value_instance = value.then((validator) -> validator.validate((token) -> token.getValue().equals("new")));
|
|
|
|
StateTree<JavaElement> value_instance = value.then((validator) -> validator.validate((token) -> token.getValue().equals("new")));
|
|
|
|
StateTree<JavaElement> value_name = new StateTree<JavaElement>();
|
|
|
|
StateTree<JavaElement> value_name = new StateTree<JavaElement>();
|
|
|
|
value.then(value_name);
|
|
|
|
value.then(value_name);
|
|
|
|
value_instance.then(new RedirectStateTree<>(value_name, (global, local) -> global.set(null)))
|
|
|
|
value_instance.then(new RedirectStateTree<>(value_name, (global, local) -> global.set(local.get())))
|
|
|
|
.end((a,b) -> a)
|
|
|
|
.end((a,b) -> a)
|
|
|
|
.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
|
|
|
.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
|
|
|
|
.end((a,b) -> a)
|
|
|
|
.end((a,b) -> a)
|
|
|
@ -548,11 +557,20 @@ public class JavaParser extends Parser<JavaElement> {
|
|
|
|
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);
|
|
|
|
|
|
|
|
|
|
|
|
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(null)))
|
|
|
|
operation_return.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) -> {
|
|
|
|
|
|
|
|
ReturnOperation op = new ReturnOperation(bag.get());
|
|
|
|
|
|
|
|
if(parent instanceof OperationContainer) ((OperationContainer)parent).addOperation(op);
|
|
|
|
|
|
|
|
return null;
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
operation_return.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
|
|
|
operation_return.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
|
|
|
.end((a,b) -> a);
|
|
|
|
.end((parent,bag) -> {
|
|
|
|
|
|
|
|
ReturnOperation op = new ReturnOperation(bag.get());
|
|
|
|
|
|
|
|
if(parent instanceof OperationContainer) ((OperationContainer)parent).addOperation(op);
|
|
|
|
|
|
|
|
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(null)))
|
|
|
|
.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
|
|
|
.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
|
|
|