From 39a20c42a006a63372309d99c37838bd283562a0 Mon Sep 17 00:00:00 2001 From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com> Date: Tue, 18 Jul 2023 18:36:50 +0200 Subject: [PATCH] Add multiple multiple & reduce trace --- .../parser/state/BuilderStateTree.java | 56 +++++++++---------- 1 file changed, 25 insertions(+), 31 deletions(-) diff --git a/src/be/jeffcheasey88/peeratcode/parser/state/BuilderStateTree.java b/src/be/jeffcheasey88/peeratcode/parser/state/BuilderStateTree.java index 1e82f7c..7853380 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/state/BuilderStateTree.java +++ b/src/be/jeffcheasey88/peeratcode/parser/state/BuilderStateTree.java @@ -13,13 +13,14 @@ public class BuilderStateTree extends StateTree{ private BiFunction builder; private List> childs; - private StateTree multiple; + private List> multiple; public BuilderStateTree(BiFunction builder){ super(); this.builder = builder; this.childs = new ArrayList<>(); + this.multiple = new ArrayList<>(); } B build(TokenValidator validator, E element){ @@ -29,50 +30,43 @@ public class BuilderStateTree extends StateTree{ BuilderStateTree builded = super.internalSeed(validator, build); if(builded != null) builded.build(validator, build); - internalSeedNoChilds(validator, element); + BuilderStateTree sub_builded; - return build; - } - - void internalSeedNoChilds(TokenValidator validator, E element){ - if(multiple != null){ + for(StateTree state : this.multiple){ TokenValidator branch = validator.branch(); - if(multiple.checker == null){ - BuilderStateTree builded; - while((builded = multiple.internalSeed(branch, element)) != null){ + if(state.checker == null){ + while((sub_builded = state.internalSeed(branch, element)) != null){ validator.merge(branch); - builded.build(validator, element); + sub_builded.build(validator, element); } }else{ - while(multiple.checker.apply(branch)){ - BuilderStateTree builded = multiple.internalSeed(branch, element); - if(builded != null){ - validator.merge(branch); - builded.build(validator, element); - } + while(state.checker.apply(branch)){ + sub_builded = state.internalSeed(branch, element); + if(sub_builded == null) break; + validator.merge(branch); + sub_builded.build(validator, element); } } } for(StateTree child : this.childs){ TokenValidator branch = validator.branch(); if(child.checker == null){ - BuilderStateTree builded = child.internalSeed(branch, element); - if(builded != null){ - validator.merge(branch); - builded.build(validator, element); - return; - } - continue; + sub_builded = child.internalSeed(branch, element); + if(sub_builded == null) continue; + validator.merge(branch); + sub_builded.build(validator, element); + break; } if(child.checker.apply(branch)){ - BuilderStateTree builded = child.internalSeed(branch, element); - if(builded != null){ - validator.merge(branch); - builded.build(validator, element); - return; - } + sub_builded = child.internalSeed(branch, element); + if(sub_builded == null) continue; + validator.merge(branch); + sub_builded.build(validator, element); + break; } } + + return build; } public > StateTree thenNoChild(StateTree child){ @@ -88,7 +82,7 @@ public class BuilderStateTree extends StateTree{ } public > StateTree multiple(StateTree child){ - this.multiple = child; + this.multiple.add(child); return child; } }