From f61994fab256a93c1536c0581bfb1ea3fc66c552 Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Wed, 19 Jul 2023 14:07:47 +0200 Subject: [PATCH] Parser -> Value --- .../peeratcode/parser/java/JavaParser.java | 58 ++++++++++++++++++- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java index 961b536..ef636d8 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java @@ -94,7 +94,57 @@ public class JavaParser extends Parser { type_generic_end.end((a,b) -> a); //VALUE - + StateTree value = new StateTree<>(); + StateTree 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 value_call = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("."))); + value_call.then(value_name); + StateTree value_arg_begin = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("("))); + StateTree 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 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 StateTree variable = new StateTree<>(); @@ -108,7 +158,11 @@ public class JavaParser extends Parser { .end((a,b) -> new Variable(b)); StateTree variable_split = variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals(","))); variable_split.then(variable_name); - variable_name.then((validator) -> validator.validate((token) -> token.getValue().equals("="))); + StateTree 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 clazz_container = new StateTree<>(); clazz_container.then(variable);