diff --git a/src/be/jeffcheasey88/peeratcode/parser/Bag.java b/src/be/jeffcheasey88/peeratcode/parser/Bag.java index 4f5cd0f..d600abf 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/Bag.java +++ b/src/be/jeffcheasey88/peeratcode/parser/Bag.java @@ -15,6 +15,7 @@ public class Bag{ public Bag(){ this.map = new HashMap<>(); + path = Thread.currentThread().getStackTrace()[2].toString(); } public E get(){ diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java index 7de128a..784d914 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java @@ -138,6 +138,7 @@ public class JavaParser extends Parser { StateTree clazz_container = new StateTree<>(); + StateTree braces_container = new StateTree<>(); //VALUE StateTree value = new StateTree<>(); @@ -186,8 +187,15 @@ public class JavaParser extends Parser { StateTree value_instance = value.then((validator) -> validator.validate((token) -> token.getValue().equals("new"))); StateTree value_name = new StateTree(); value.then(value_name); - value_instance = value_instance - .then(new RedirectStateTree<>(value_name, (global, local) -> global.set(null))); + value_instance.then(new RedirectStateTree<>(value_name, (global, local) -> global.set(local))) + .end((a,b) -> { + System.out.println("new "+b); + return a; + }) + .then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) + .end((a,b) -> a) + .multiple(braces_container) + .unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))).end((a,b) -> a); value_name = value_name.then((validator) -> validator.validate( (token) -> token.getType().equals(TokenType.NAME), (bag, token) -> { @@ -195,20 +203,18 @@ public class JavaParser extends Parser { if(current == null) current = token; else current = current.concat(token); bag.set(current); + System.out.println("set bag "+bag); })); value_name.end((a,b) -> a); - StateTree instance = value_instance.end((a,b) -> a); - instance.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) - .end((a,b) -> a) - .multiple(clazz_container); StateTree value_call = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("."))); value_call.then(value_name); - StateTree value_array = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("["))) - .then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))) - .then((validator) -> validator.validate((token) -> token.getValue().equals("]"))); - value_array.end((a,b) -> a); - value_array.then(value_call); + StateTree value_array_begin = value_name.then((validator) -> validator.validate((token) -> token.getValue().equals("["))); + StateTree value_array_end = value_array_begin.then((validator) -> validator.validate((token) -> token.getValue().equals("]"))); + value_array_begin.then(new RedirectStateTree<>(value_container, (global, local) -> global.set("inside", local))) + .then(value_array_end); + value_array_end.end((a,b) -> a); + value_array_end.then(value_call); 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(")"))); @@ -271,6 +277,11 @@ public class JavaParser extends Parser { return false; }).end((a,b) -> a); + StateTree braces_array = braces_container.then(new RedirectStateTree<>(value_container, (global, local) -> global.set(null))); + braces_array.then((validator) -> validator.validate((token) -> token.getValue().equals(","))) + .then(braces_array); + braces_array.end((a,b) -> a); + //ENUM VALUE StateTree enum_value = new StateTree<>(); StateTree enum_name = enum_value.then((validator) -> validator.validate((token) -> token.getType().equals(TokenType.NAME))); @@ -455,6 +466,8 @@ public class JavaParser extends Parser { clazz_container.then(function); clazz_container.then(variable); + braces_container.then(clazz_container); + //CLASS StateTree clazz_ = new StateTree<>(); StateTree clazz = new StateTree<>(); @@ -604,7 +617,7 @@ public class JavaParser extends Parser { } public static void main(String[] args) throws Exception{ - File file = new File("C:\\Users\\jeffc\\eclipse-workspace\\adventofcode\\src\\be\\jeffcheasey88\\Main.java"); + File file = new File("C:\\Users\\jeffc\\eclipse-workspace\\B1PRB_Janvier2021_Oral_LhoistXavier\\src\\be\\lhoistxavier\\GameFrame.java"); BufferedReader reader = new BufferedReader(new FileReader(file)); diff --git a/src/be/jeffcheasey88/peeratcode/parser/state/RedirectStateTree.java b/src/be/jeffcheasey88/peeratcode/parser/state/RedirectStateTree.java index 98264c2..00b58d8 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/state/RedirectStateTree.java +++ b/src/be/jeffcheasey88/peeratcode/parser/state/RedirectStateTree.java @@ -25,7 +25,7 @@ public class RedirectStateTree extends StateTree{ branch.setBag(localBag); BuilderStateTree builded = redirect.internalSeed(branch, (E) element); if(builded == null) return null; - builded.build(validator, element); + builded.build(branch, element); this.group.accept(currentBag, localBag); branch.setBag(currentBag);