Ternaire Value
This commit is contained in:
parent
5ad4f66c8a
commit
73a093cf4d
2 changed files with 53 additions and 4 deletions
|
@ -242,15 +242,33 @@ public class JavaParser extends Parser<JavaFile> {
|
||||||
};
|
};
|
||||||
BiFunction<JavaElement, TokenValidator, JavaElement> END_BIVALUE = (element, validator) -> {
|
BiFunction<JavaElement, TokenValidator, JavaElement> END_BIVALUE = (element, validator) -> {
|
||||||
//create new value from parent & created single value
|
//create new value from parent & created single value
|
||||||
Value v = new BiValue((Value)element, validator.getBag().<Bag>get("?").get(), validator.getBag().get("type"));
|
|
||||||
Value origin = (Value)element;
|
Value origin = (Value)element;
|
||||||
|
Value right = validator.getBag().<Bag>get("?").get();
|
||||||
|
if(right.get() != null) right = right.get();
|
||||||
|
if(right instanceof TriValue){
|
||||||
|
TriValue last = (TriValue)right;
|
||||||
|
last.getCondition().switchInto(null);
|
||||||
|
BiValue condition = new BiValue(origin, last.getCondition(), validator.getBag().get("type"));
|
||||||
|
TriValue result = new TriValue(condition, last.success(), last.fail());
|
||||||
|
origin.switchInto(result);
|
||||||
|
validator.getBag().set(result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
Value v = new BiValue(origin, right, validator.getBag().get("type"));
|
||||||
origin.switchInto(v);
|
origin.switchInto(v);
|
||||||
validator.getBag().set(v);
|
validator.getBag().set(v);
|
||||||
return v;
|
return v;
|
||||||
};
|
};
|
||||||
BiFunction<JavaElement, TokenValidator, JavaElement> END_TRIVALUE = (element, validator) -> {
|
BiFunction<JavaElement, TokenValidator, JavaElement> END_TRIVALUE = (element, validator) -> {
|
||||||
//same but for val ? val : val
|
//same but for val ? val : val
|
||||||
return new TriValue();
|
System.out.println("\t"+element);
|
||||||
|
System.out.println("\t"+validator.getBag());
|
||||||
|
Bag bag = validator.getBag();
|
||||||
|
Value origin = (Value)element;
|
||||||
|
Value v = new TriValue(origin, bag.<Bag>get("true").get(), bag.<Bag>get("false").get());
|
||||||
|
origin.switchInto(v);
|
||||||
|
validator.getBag().set(v);
|
||||||
|
return v;
|
||||||
};
|
};
|
||||||
StateTree<JavaElement> value_q0 = new StateTree<>();
|
StateTree<JavaElement> value_q0 = new StateTree<>();
|
||||||
StateTree<JavaElement> value_q22 = new StateTree<>();
|
StateTree<JavaElement> value_q22 = new StateTree<>();
|
||||||
|
@ -275,7 +293,7 @@ public class JavaParser extends Parser<JavaFile> {
|
||||||
StateTree<JavaElement> value_q26 = value_q22.then(LAMBDA_10);
|
StateTree<JavaElement> value_q26 = value_q22.then(LAMBDA_10);
|
||||||
value_q26.then(new RedirectStateTree<>(value_q0,(bag) -> "?")).<JavaElement>end(END_BIVALUE); // !
|
value_q26.then(new RedirectStateTree<>(value_q0,(bag) -> "?")).<JavaElement>end(END_BIVALUE); // !
|
||||||
value_q26.then(LAMBDA_8).then(new RedirectStateTree<>(value_q0,(bag) -> "?")).<JavaElement>end(END_BIVALUE); // !=
|
value_q26.then(LAMBDA_8).then(new RedirectStateTree<>(value_q0,(bag) -> "?")).<JavaElement>end(END_BIVALUE); // !=
|
||||||
value_q22.then(LAMBDA_11).then(new RedirectStateTree<>(value_q0,(bag) -> "?")).then(LAMBDA_12).then(new RedirectStateTree<>(value_q0,(bag) -> "?")).<JavaElement>end(END_TRIVALUE); //? :
|
value_q22.then(LAMBDA_11).then(new RedirectStateTree<>(value_q0,(bag) -> "true")).then(LAMBDA_12).then(new RedirectStateTree<>(value_q0,(bag) -> "false")).<JavaElement>end(END_TRIVALUE); //? :
|
||||||
value_q22.then(LAMBDA_13).then(new RedirectStateTree<>(value_q0,(bag) -> "?")).<JavaElement>end(END_BIVALUE); // ~
|
value_q22.then(LAMBDA_13).then(new RedirectStateTree<>(value_q0,(bag) -> "?")).<JavaElement>end(END_BIVALUE); // ~
|
||||||
StateTree<JavaElement> value_q29 = value_q22.then(LAMBDA_14);
|
StateTree<JavaElement> value_q29 = value_q22.then(LAMBDA_14);
|
||||||
value_q29.then(new RedirectStateTree<>(value_q0,(bag) -> "?")).<JavaElement>end(END_BIVALUE); // +
|
value_q29.then(new RedirectStateTree<>(value_q0,(bag) -> "?")).<JavaElement>end(END_BIVALUE); // +
|
||||||
|
|
|
@ -16,6 +16,7 @@ public class Value extends JavaElement{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void switchInto(Value value){
|
public void switchInto(Value value){
|
||||||
|
System.out.println("\tswitch "+this+" onto "+value);
|
||||||
this.value = value;
|
this.value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,8 +52,38 @@ public class Value extends JavaElement{
|
||||||
|
|
||||||
public static class TriValue extends Value{
|
public static class TriValue extends Value{
|
||||||
|
|
||||||
public TriValue(){
|
private Value condition;
|
||||||
|
|
||||||
|
private Value success;
|
||||||
|
private Value fail;
|
||||||
|
|
||||||
|
public TriValue(Value condition, Value success, Value fail){
|
||||||
|
this.condition = condition;
|
||||||
|
this.success = success;
|
||||||
|
this.fail = fail;
|
||||||
|
|
||||||
|
System.out.println(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCondition(Value value){
|
||||||
|
this.condition = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Value getCondition(){
|
||||||
|
return this.condition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Value success(){
|
||||||
|
return this.success;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Value fail(){
|
||||||
|
return this.fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(){
|
||||||
|
return "[TriValue "+condition+" ? "+success+" : "+fail+"]";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue