Capture base composant + named
This commit is contained in:
parent
da9bb2df4d
commit
6372fbea83
1 changed files with 65 additions and 16 deletions
|
@ -17,7 +17,9 @@ 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.ComposantCall;
|
||||
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.Element.SynthaxeComposant.Composant.NamedElement;
|
||||
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.Element.SynthaxeComposant.Composant.Redirection;
|
||||
import be.jeffcheasey88.peeratcode.parser.state.generator.ParserComposantGenerator.Element.SynthaxeComposant.Composant.Validator;
|
||||
|
||||
public class ParserComposantGenerator {
|
||||
|
@ -83,13 +85,21 @@ public class ParserComposantGenerator {
|
|||
.then((v) -> v.validate(
|
||||
(t) -> t.getType().equals(TokenType.NAME),
|
||||
(bag, t) -> bag.set(t)));
|
||||
leftSide.end((composant, bag) -> new NamedElement(bag));
|
||||
leftSide.end((composant, bag) -> {
|
||||
Element result = new NamedElement(bag);
|
||||
bag.set(result);
|
||||
return result;
|
||||
});
|
||||
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) -> new NamedElement(bag));
|
||||
.end((composant, bag) -> {
|
||||
Element result = new NamedElement(bag);
|
||||
bag.set(result);
|
||||
return result;
|
||||
});
|
||||
|
||||
StateTree<Element> gotoValidator = new StateTree<>();
|
||||
gotoValidator.then((v) -> v.validate(
|
||||
|
@ -99,16 +109,25 @@ public class ParserComposantGenerator {
|
|||
.end((composant, bag) -> composant);
|
||||
|
||||
StateTree<Element> redirection = new StateTree<>();
|
||||
redirection.then((v) -> v.validate((t) -> {
|
||||
return t.getType().equals(TokenType.NAME);
|
||||
})).end((composant, bag) -> composant);
|
||||
redirection.then((v) -> v.validate((t) ->
|
||||
t.getType().equals(TokenType.NAME),
|
||||
(bag, t) -> bag.set(t)
|
||||
)).end((composant, bag) -> {
|
||||
Element result = new Redirection(bag);
|
||||
bag.set(result);
|
||||
return result;
|
||||
});
|
||||
|
||||
StateTree<Element> methodCall = new StateTree<>();
|
||||
methodCall.then((v) -> v.validate((t) -> t.getValue().equals(":")))
|
||||
.then((v) -> v.validate(
|
||||
(t) -> t.getType().equals(TokenType.NAME),
|
||||
(bag, t) -> bag.set(t)))
|
||||
.end((composant, bag) -> composant);
|
||||
.end((composant, bag) -> {
|
||||
Element result = new ComposantCall(bag);
|
||||
bag.set(result);
|
||||
return result;
|
||||
});
|
||||
|
||||
StateTree<Element> operations = new StateTree<>();
|
||||
StateTree<Element> operation = new StateTree<>();
|
||||
|
@ -129,18 +148,30 @@ public class ParserComposantGenerator {
|
|||
|
||||
StateTree<Element> op_validator = operation.then(new RedirectStateTree<>(validator, (bag) -> "validator"));
|
||||
op_validator.end((composant, bag) -> {
|
||||
System.out.println("+\t"+bag);
|
||||
return bag.<Bag>get("validator").<Element>get();
|
||||
}).then(op_childs);
|
||||
op_validator.then(new RedirectStateTree<>(namedValidator, (bag) -> "namedValidator")).end((composant, bag) -> {
|
||||
bag.<Bag>get("namedValidator").<NamedElement>get().child = bag.<Bag>get("validator").<Validator>get();
|
||||
return composant;
|
||||
}).then(op_childs);
|
||||
op_validator.then(new RedirectStateTree<>(namedValidator, (bag) -> "namedValidator")).end((composant, bag) -> composant).then(op_childs);
|
||||
|
||||
StateTree<Element> 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) -> "namedValidator")).end((composant, bag) -> composant).then(op_childs);
|
||||
op_call.end((composant, bag) -> {
|
||||
return bag.<Bag>get("methodCall").<Element>get();
|
||||
}).then(op_childs);
|
||||
op_call.then(new RedirectStateTree<>(namedValidator, (bag) -> "namedValidator")).end((composant, bag) -> {
|
||||
bag.<Bag>get("namedValidator").<NamedElement>get().child = bag.<Bag>get("methodCall").<Validator>get();
|
||||
return composant;
|
||||
}).then(op_childs);
|
||||
|
||||
StateTree<Element> 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) -> "namedValidator")).end((composant, bag) -> composant).then(op_childs);
|
||||
op_redirect.end((composant, bag) -> {
|
||||
return bag.<Bag>get("redirection").<Element>get();
|
||||
}).then(op_childs);
|
||||
op_redirect.then(new RedirectStateTree<>(namedValidator, (bag) -> "namedValidator")).end((composant, bag) -> {
|
||||
bag.<Bag>get("namedValidator").<NamedElement>get().child = bag.<Bag>get("redirection").<Validator>get();
|
||||
return composant;
|
||||
}).then(op_childs);
|
||||
|
||||
StateTree<Element> suit = operations.then(new RedirectStateTree<>(operation, (bag) -> "operation")).loop();
|
||||
suit.then((v) -> v.validate((t) -> t.getValue().equals(",")))
|
||||
|
@ -234,6 +265,8 @@ public class ParserComposantGenerator {
|
|||
private String logic;
|
||||
private String name;
|
||||
|
||||
private Element child;
|
||||
|
||||
public NamedElement(Bag bag){
|
||||
Token inside = bag.get("inside");
|
||||
if(inside != null){
|
||||
|
@ -242,7 +275,11 @@ public class ParserComposantGenerator {
|
|||
}else{
|
||||
this.name = bag.<Token>get().getValue();
|
||||
}
|
||||
System.out.println(logic+"("+name+")");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
return child+" -> "+((logic == null) ? name : logic+"("+name+")");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -251,18 +288,30 @@ public class ParserComposantGenerator {
|
|||
|
||||
private String target;
|
||||
|
||||
public Redirection(){}
|
||||
public Redirection(Bag bag){
|
||||
this.target = bag.<Token>get().getValue();
|
||||
System.out.println(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
return target;
|
||||
}
|
||||
}
|
||||
|
||||
public static class ComposantCall extends Element{
|
||||
|
||||
private String name;
|
||||
|
||||
public ComposantCall(){
|
||||
|
||||
public ComposantCall(Bag bag){
|
||||
this.name = bag.<Token>get().getValue();
|
||||
System.out.println(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
return ":"+name;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue