diff --git a/src/be/jeffcheasey88/peeratcode/parser/state/generator/ParserComposantGenerator.java b/src/be/jeffcheasey88/peeratcode/parser/state/generator/ParserComposantGenerator.java index d6a0f7e..2247f45 100644 --- a/src/be/jeffcheasey88/peeratcode/parser/state/generator/ParserComposantGenerator.java +++ b/src/be/jeffcheasey88/peeratcode/parser/state/generator/ParserComposantGenerator.java @@ -9,6 +9,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import be.jeffcheasey88.peeratcode.parser.Bag; import be.jeffcheasey88.peeratcode.parser.Parser; import be.jeffcheasey88.peeratcode.parser.Token; import be.jeffcheasey88.peeratcode.parser.TokenType; @@ -16,6 +17,8 @@ import be.jeffcheasey88.peeratcode.parser.Tokenizer; import be.jeffcheasey88.peeratcode.parser.state.RedirectStateTree; import be.jeffcheasey88.peeratcode.parser.state.StateTree; import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.Element.SynthaxeComposant; +import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.Element.SynthaxeComposant.Composant.NamedElement; +import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.Element.SynthaxeComposant.Composant.Validator; public class ParserComposantGenerator { @@ -40,7 +43,11 @@ public class ParserComposantGenerator { { StateTree validator = new StateTree<>(); StateTree modifiers = new StateTree<>(); - modifiers.end((composant, bag) -> composant); + modifiers.end((composant, bag) -> { + Element result = new Validator(bag); + bag.set(result); + return result; + }); StateTree end = modifiers.then((v) -> v.validate( (t) -> t.getValue().equals("="), (bag,t) -> bag.set("end", true))); @@ -48,17 +55,25 @@ public class ParserComposantGenerator { (t) -> t.getValue().equals("*"), (bag,t) -> bag.set("loop", true))); loop.then(end); - loop.end((composant, bag) -> composant); - end.end((composant, bag) -> composant); + loop.end((composant, bag) -> { + Element result = new Validator(bag); + bag.set(result); + return result; + }); + end.end((composant, bag) -> { + Element result = new Validator(bag); + bag.set(result); + return result; + }); StateTree simpleAction = validator .then((v) -> v.validate((t) -> t.getValue().equals("["))) .then((v) -> v.validate((t) -> !t.getValue().equals("]"), (bag, t) -> bag.set(t))).loop() - .then((v) -> v.validate((t) -> t.getValue().equals("]"))); + .then((v) -> v.validate((t) -> t.getValue().equals("]"), (bag, t) -> bag.set("type", "simple"))); StateTree customAction = validator .then((v) -> v.validate((t) -> t.getValue().equals("{"))) .then((v) -> v.validate((t) -> !t.getValue().equals("}"), (bag, t) -> bag.set(t))).loop() - .then((v) -> v.validate((t) -> t.getValue().equals("}"))); + .then((v) -> v.validate((t) -> t.getValue().equals("}"), (bag, t) -> bag.set("type", "custom"))); simpleAction.then(modifiers); customAction.then(modifiers); @@ -68,13 +83,13 @@ public class ParserComposantGenerator { .then((v) -> v.validate( (t) -> t.getType().equals(TokenType.NAME), (bag, t) -> bag.set(t))); - leftSide.end((composant, bag) -> composant); + leftSide.end((composant, bag) -> new NamedElement(bag)); leftSide.then((v) -> v.validate((t) -> t.getValue().equals("(")) && v.validate((t) -> t.getType().equals(TokenType.NAME), (bag, t) -> bag.set("inside", t)) && v.validate((t) -> t.getValue().equals(")")) ) - .end((composant, bag) -> composant); + .end((composant, bag) -> new NamedElement(bag)); StateTree gotoValidator = new StateTree<>(); gotoValidator.then((v) -> v.validate( @@ -100,7 +115,9 @@ public class ParserComposantGenerator { StateTree op_childs = new StateTree<>(); op_childs.then((v) -> v.validate((t) -> t.getValue().equals("("))) - .then(new RedirectStateTree<>(operations, (bag) -> "?")) + .then(new RedirectStateTree<>(operations, (bag) -> { + return "operations"; + })) .then((v) -> v.validate((t) -> t.getValue().equals(")"))) .end((composant, bag) -> { System.out.println("\t"+bag); @@ -110,19 +127,22 @@ public class ParserComposantGenerator { operation.then(new RedirectStateTree<>(gotoValidator, (bag) -> "?")) .then(operations); - StateTree op_validator = operation.then(new RedirectStateTree<>(validator, (bag) -> "?")); - op_validator.end((composant, bag) -> composant).then(op_childs); - op_validator.then(new RedirectStateTree<>(namedValidator, (bag) -> "?")).end((composant, bag) -> composant).then(op_childs); + StateTree op_validator = operation.then(new RedirectStateTree<>(validator, (bag) -> "validator")); + op_validator.end((composant, bag) -> { + System.out.println("+\t"+bag); + return composant; + }).then(op_childs); + op_validator.then(new RedirectStateTree<>(namedValidator, (bag) -> "namedValidator")).end((composant, bag) -> composant).then(op_childs); - StateTree op_call = operation.then(new RedirectStateTree<>(methodCall, (bag) -> "?")); + StateTree op_call = operation.then(new RedirectStateTree<>(methodCall, (bag) -> "methodCall")); op_call.end((composant, bag) -> composant).then(op_childs); - op_call.then(new RedirectStateTree<>(namedValidator, (bag) -> "?")).end((composant, bag) -> composant).then(op_childs); + op_call.then(new RedirectStateTree<>(namedValidator, (bag) -> "namedValidator")).end((composant, bag) -> composant).then(op_childs); - StateTree op_redirect = operation.then(new RedirectStateTree<>(redirection, (bag) -> "?")); + StateTree op_redirect = operation.then(new RedirectStateTree<>(redirection, (bag) -> "redirection")); op_redirect.end((composant, bag) -> composant).then(op_childs); - op_redirect.then(new RedirectStateTree<>(namedValidator, (bag) -> "?")).end((composant, bag) -> composant).then(op_childs); + op_redirect.then(new RedirectStateTree<>(namedValidator, (bag) -> "namedValidator")).end((composant, bag) -> composant).then(op_childs); - StateTree suit = operations.then(new RedirectStateTree<>(operation, (bag) -> "?")).loop(); + StateTree suit = operations.then(new RedirectStateTree<>(operation, (bag) -> "operation")).loop(); suit.then((v) -> v.validate((t) -> t.getValue().equals(","))) .then(suit).end((composant, bag) -> composant); suit.then((v) -> v.validate((t) -> t.getValue().equals(";"))) @@ -190,18 +210,39 @@ public class ParserComposantGenerator { private boolean end; private boolean loop; - public Validator(){ - + public Validator(Bag bag){ + String type = bag.get("type"); + action = bag.get().getValue(); + if(type.equals("simple")){ + action = '['+action+']'; + }else{ + action = '{'+action+'}'; + } + this.end = (bag.get("end") != null); + this.loop = (bag.get("loop") != null); + System.out.println(this); + } + + @Override + public String toString(){ + return action+((loop ? "*":""))+((end ? "=":"")); } } - public static class NamedValidator extends Validator{ + public static class NamedElement extends Element{ private String logic; private String name; - public NamedValidator(){ - + public NamedElement(Bag bag){ + Token inside = bag.get("inside"); + if(inside != null){ + this.logic = bag.get().getValue(); + this.name = inside.getValue(); + }else{ + this.name = bag.get().getValue(); + } + System.out.println(logic+"("+name+")"); } } @@ -210,20 +251,7 @@ public class ParserComposantGenerator { private String target; - public Redirection(){ - - } - - } - - public static class NamedRedirection extends Redirection{ - - private String logic; - private String name; - - public NamedRedirection(){ - - } + public Redirection(){} } @@ -237,16 +265,6 @@ public class ParserComposantGenerator { } - public static class NamedComposantCall extends ComposantCall{ - - private String logic; - private String name; - - public NamedComposantCall(){ - - } - - } } } }