diff --git a/src/main/java/models/terms/DependencyTerm.java b/src/main/java/models/terms/DependencyTerm.java index 201d109..981bd56 100644 --- a/src/main/java/models/terms/DependencyTerm.java +++ b/src/main/java/models/terms/DependencyTerm.java @@ -4,6 +4,7 @@ import java.util.Arrays; import java.util.List; import java.util.TreeMap; +import java.util.stream.IntStream; import exceptions.SyntaxException; import lombok.Getter; @@ -26,17 +27,13 @@ throw new SyntaxException("Args size must be odd."); } this.size = dependingTerm.getSize(); - boolean argOrderType = terms.get(0).getOrder() <= terms.get(1).getOrder(); + int maxArgOrder = IntStream.range(0, terms.size()).filter(i -> i % 2 == 1).map(i -> terms.get(i).getOrder()).max().orElse(0); + int maxDependedOrder = IntStream.range(0, terms.size()).filter(i -> i % 2 == 0).map(i -> terms.get(i).getOrder()).max().orElse(0); + boolean argOrderType = maxDependedOrder <= maxArgOrder; if (argOrderType) { - this.order = terms.get(1).getOrder(); - if (dependingTerm.getOrder() > getOrder()) { - throw new SyntaxException("order invalid"); - } + this.order = maxArgOrder; } else { - this.order = terms.get(0).getOrder() - 1; - if (dependingTerm.getOrder() > terms.get(0).getOrder()) { - throw new SyntaxException("order invalid"); - } + this.order = maxDependedOrder - 1; } this.dependingTerm = dependingTerm; this.termPairs = new TreeMap<>(); @@ -47,21 +44,6 @@ termPairs.put(dependedTerm, argTerm); this.size += dependedTerm.getSize(); this.size += argTerm.getSize(); - if (argOrderType) { - if (argTerm.getOrder() != getOrder()) { - throw new SyntaxException("order not same"); - } - if (dependedTerm.getOrder() > getOrder()) { - throw new SyntaxException("order invalid"); - } - } else { - if (dependedTerm.getOrder() - 1 != getOrder()) { - throw new SyntaxException("order not same"); - } - if (argTerm.getOrder() > getOrder()) { - throw new SyntaxException("order invalid"); - } - } } for (EvaluatableTerm dependedTerm : termPairs.keySet()) { addChild(dependedTerm);