From e81a509f4881b64a47768792a74d661bc91a2d36 Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Sun, 16 Jul 2023 21:57:38 +0200 Subject: [PATCH] StateTree -> Modifier & set bag after confirmed --- .../peeratcode/parser/java/JavaParser.java | 21 +++++++++++++++++-- .../parser/state/RedirectStateTree.java | 13 ++++-------- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java index c9327d6..e8e732a 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java +++ b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java @@ -13,6 +13,7 @@ import be.jeffcheasey88.peeratcode.parser.Parser; import be.jeffcheasey88.peeratcode.parser.Token; import be.jeffcheasey88.peeratcode.parser.Tokenizer; import be.jeffcheasey88.peeratcode.parser.state.BuilderStateTree; +import be.jeffcheasey88.peeratcode.parser.state.RedirectStateTree; import be.jeffcheasey88.peeratcode.parser.state.StateTree; public class JavaParser extends Parser { @@ -37,8 +38,24 @@ public class JavaParser extends Parser { public JavaParser(){ Tokenizer tokenizer = new Tokenizer(); + StateTree modifier = new StateTree().then((validator) -> { + boolean mod = false; + while(validator.validate( + (token) -> getModifier(token.getValue()) > 0, + (bag, token) -> { + int m = getModifier(token.getValue()); + Integer current = bag.get(); + bag.set(current == null ? m : current+m); + })) mod = true; + return mod; + }); + + StateTree clazz_ = new StateTree<>(); StateTree clazz = new StateTree<>(); + clazz_.then(new RedirectStateTree<>(modifier, (bag) -> "modifier")); + + StateTree importState = new StateTree<>(); importState.then((validator) -> { if(validator.validate( @@ -62,7 +79,7 @@ public class JavaParser extends Parser { StateTree main = new StateTree<>(); - BuilderStateTree pack = main.then((validator) -> { + BuilderStateTree pack = main.then((validator) -> { if(validator.validate( (token) -> token.getValue().equals("package"), (bag, token) -> bag.set(new LinkedList<>()))){ @@ -77,7 +94,7 @@ public class JavaParser extends Parser { return false; }).end((javafile, bag) -> javafile.setPackage(bag)); pack.multiple(importState); - pack.thenNoChild(clazz); + pack.thenNoChild(clazz_); System.out.println((System.currentTimeMillis()-time)+"ms"); diff --git a/src/be/jeffcheasey88/peeratcode/parser/state/RedirectStateTree.java b/src/be/jeffcheasey88/peeratcode/parser/state/RedirectStateTree.java index 25649aa..40ab8c0 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/state/RedirectStateTree.java +++ b/src/be/jeffcheasey88/peeratcode/parser/state/RedirectStateTree.java @@ -21,19 +21,14 @@ public class RedirectStateTree extends StateTree{ Bag currentBag = validator.getBag(); Bag localBag = new Bag(); - String g = group.apply(currentBag); - localBag.addPath(currentBag.path()+"/"+g); -// System.out.println("redirect "+localBag.path()); - currentBag.set(g, localBag); - validator.setBag(localBag); - TokenValidator branch = validator.branch(); + branch.setBag(localBag); Object builded = redirect.internalSeed(branch, (E) element); -// System.out.println("redirect "+localBag.path()+" builded "+builded); if(builded == null) return null; - + + currentBag.set(this.group.apply(currentBag), localBag); + branch.setBag(currentBag); validator.merge(branch); - validator.setBag(currentBag); return super.internalSeed(validator, element); }