Parser -> Value
This commit is contained in:
parent
16773beb88
commit
f61994fab2
1 changed files with 56 additions and 2 deletions
|
@ -94,7 +94,57 @@ public class JavaParser extends Parser<JavaFile> {
|
||||||
type_generic_end.end((a,b) -> a);
|
type_generic_end.end((a,b) -> a);
|
||||||
|
|
||||||
//VALUE
|
//VALUE
|
||||||
|
StateTree<JavaFile> value = new StateTree<>();
|
||||||
|
StateTree<JavaFile> value_name = value.then((validator) -> validator.validate(
|
||||||
|
(token) -> token.getType().equals(TokenType.NAME),
|
||||||
|
(bag, token) -> {
|
||||||
|
Token current = bag.get();
|
||||||
|
if(current == null) current = token;
|
||||||
|
else current = current.concat(token);
|
||||||
|
bag.set(current);
|
||||||
|
}));
|
||||||
|
value_name.end((a,b) -> a);
|
||||||
|
StateTree<JavaFile> value_call = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals(".")));
|
||||||
|
value_call.then(value_name);
|
||||||
|
StateTree<JavaFile> value_arg_begin = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("(")));
|
||||||
|
StateTree<JavaFile> value_arg_end = value_arg_begin.then((validator) -> validator.validate((token) -> token.getValue().equals(")")));
|
||||||
|
value_arg_end.end((a,b) -> a);
|
||||||
|
value_arg_end.then(value_call);
|
||||||
|
StateTree<JavaFile> value_arg = value_arg_begin.then(new RedirectStateTree<>(value, (global, local) -> {
|
||||||
|
Integer count = global.get("args");
|
||||||
|
if(count == null) count = 0;
|
||||||
|
global.set("arg"+count, local);
|
||||||
|
global.set("args", (count+1));
|
||||||
|
}));
|
||||||
|
value_arg.then((validator) -> validator.validate((token) -> token.getValue().equals(",")))
|
||||||
|
.then(value_arg);
|
||||||
|
value.then((validator) -> {
|
||||||
|
if(validator.validate((token) -> token.getValue().equals("'"))){
|
||||||
|
validator.validate((token) -> token.getValue().equals("\\"));
|
||||||
|
return
|
||||||
|
validator.validate(
|
||||||
|
(token) -> true,
|
||||||
|
(bag, token) -> bag.set(token)) &&
|
||||||
|
validator.validate((token) -> token.getValue().equals("'"));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}).end((a,b) -> a);
|
||||||
|
value.then((validator) -> {
|
||||||
|
if(validator.validate((token) -> token.getValue().equals("\""))){
|
||||||
|
|
||||||
|
while(validator.validate(
|
||||||
|
(token) -> !token.getValue().equals("\""),
|
||||||
|
(bag, token) -> {
|
||||||
|
Token current = bag.get();
|
||||||
|
if(current == null) current = token;
|
||||||
|
else current = current.concat(token);
|
||||||
|
bag.set(current);
|
||||||
|
}));
|
||||||
|
|
||||||
|
return validator.validate((token) -> token.getValue().equals("\""));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}).end((a,b) -> a);
|
||||||
|
|
||||||
//VARIABLE
|
//VARIABLE
|
||||||
StateTree<JavaFile> variable = new StateTree<>();
|
StateTree<JavaFile> variable = new StateTree<>();
|
||||||
|
@ -108,7 +158,11 @@ public class JavaParser extends Parser<JavaFile> {
|
||||||
.end((a,b) -> new Variable(b));
|
.end((a,b) -> new Variable(b));
|
||||||
StateTree<JavaFile> variable_split = variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals(",")));
|
StateTree<JavaFile> variable_split = variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals(",")));
|
||||||
variable_split.then(variable_name);
|
variable_split.then(variable_name);
|
||||||
variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals("=")));
|
StateTree<JavaFile> variable_value = variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals("=")))
|
||||||
|
.then(new RedirectStateTree<>(value, (global, local) -> global.set("value", local)));
|
||||||
|
variable_value.then(variable_split);
|
||||||
|
variable_value.then((validator) -> validator.validate((token) -> token.getValue().equals(";")))
|
||||||
|
.end((a,b) -> a);
|
||||||
|
|
||||||
StateTree<JavaFile> clazz_container = new StateTree<>();
|
StateTree<JavaFile> clazz_container = new StateTree<>();
|
||||||
clazz_container.then(variable);
|
clazz_container.then(variable);
|
||||||
|
|
Loading…
Add table
Reference in a new issue