diff --git a/src/main/java/exceptions/SyntaxException.java b/src/main/java/exceptions/SyntaxException.java new file mode 100644 index 0000000..c93db96 --- /dev/null +++ b/src/main/java/exceptions/SyntaxException.java @@ -0,0 +1,13 @@ +package exceptions; + +public class SyntaxException extends RuntimeException{ + + public SyntaxException() { + super("syntax error"); + } + + public SyntaxException(String msg) { + super(msg); + } + +} diff --git a/src/main/java/models/terms/Dependency.java b/src/main/java/models/terms/Dependency.java index 8edefba..6783130 100644 --- a/src/main/java/models/terms/Dependency.java +++ b/src/main/java/models/terms/Dependency.java @@ -1,10 +1,11 @@ package models.terms; -import java.util.ArrayList; import java.util.Arrays; -import java.util.List; +import java.util.HashSet; +import java.util.Set; import java.util.stream.Collectors; +import exceptions.SyntaxException; import lombok.Getter; import models.algebra.Symbol; @@ -12,65 +13,23 @@ public class Dependency extends RDLTerm{ private RDLTerm dependingTerm; - private List dependedTerms; - private Dependency dependency; - private boolean isListType; + private Set dependedTerms; -// public Dependency(RDLTerm dependingTerm, Resource dependedVariable) { -// super(new Symbol(":", 2), dependedVariable.getOrder(), dependingTerm.getSize() + dependedVariable.getSize()); -// this.dependingTerm = dependingTerm; -// this.dependedVariable = dependedVariable; -// this.dependency = null; -// this.addChild(dependingTerm); -// this.addChild(dependedVariable); -// this.isListType = false; -// } - - public Dependency(RDLTerm dependingTerm, List dependedTerms) { - super(new Symbol(":", dependedTerms.size() + 1), dependedTerms.get(0).getOrder(), dependingTerm.getSize() + dependedTerms.stream().mapToInt(v -> v.size).sum()); + public Dependency(RDLTerm dependingTerm, Set dependedTerms) { + super(new Symbol(":", dependedTerms.size() + 1), dependedTerms.iterator().next().getOrder(), dependingTerm.getSize() + dependedTerms.stream().mapToInt(v -> v.size).sum()); this.dependingTerm = dependingTerm; this.dependedTerms = dependedTerms; - this.dependency = null; this.addChild(dependingTerm); - for (EvaluatableTerm dependedResource: dependedTerms) { - this.addChild(dependedResource); + for (EvaluatableTerm dependedTerm: dependedTerms) { + this.addChild(dependedTerm); + if (dependedTerm.getOrder() != getOrder()) { + throw new SyntaxException(dependedTerm + " order is not " + getOrder()); + } } - this.isListType = false; } - public Dependency(RDLTerm dependingTerm, Resource ...dependedResources) { - this(dependingTerm, Arrays.asList(dependedResources)); - } - - public Dependency(Dependency dependency) { - super(new Symbol(":", 1), dependency.getOrder() - 1, dependency.getSize()); - this.dependency = dependency; - this.dependingTerm = null; - this.dependedTerms = null; - this.addChild(dependency); - this.isListType = true; - } - -// public Dependency(RDLTerm dependingTerm, Resource dependedVariable, int order) { -// super(new Symbol(":", order == dependedVariable.order ? 2 : 1), order, dependingTerm.getSize() + dependedVariable.getSize()); -// if(order == dependedVariable.order) { -// this.dependingTerm = dependingTerm; -// this.dependedResources = dependedVariable; -// this.addChild(dependingTerm); -// this.addChild(dependedVariable); -// this.dependency = null; -// this.isListType = false; -// } else { -// this.dependency = new Dependency(dependingTerm, dependedVariable, order+1); -// this.dependingTerm = null; -// this.dependedResources = null; -// this.addChild(dependency); -// this.isListType = true; -// } -// } - - public Dependency getDependency() { - return this.dependency; + public Dependency(RDLTerm dependingTerm, EvaluatableTerm ...dependedTerms) { + this(dependingTerm, new HashSet<>(Arrays.asList(dependedTerms))); } @Override @@ -85,30 +44,18 @@ @Override public String toString() { StringBuilder sb = new StringBuilder(); - if(dependency == null) { - sb.append(dependingTerm.toTermString()); - sb.append(" : "); - sb.append(dependedTerms.toString()); - } else { - sb.append('['); - sb.append(dependency.toString()); - sb.append(']'); - } + sb.append(dependingTerm.toTermString()); + sb.append(" : "); + sb.append(dependedTerms.toString()); return sb.toString(); } @Override public String toStringWithOrder() { StringBuilder sb = new StringBuilder(); - if(dependency == null) { - sb.append(dependingTerm.toStringWithOrder()); - sb.append(" : "); - sb.append(dependedTerms.stream().map(RDLTerm::toStringWithOrder).collect(Collectors.joining(", "))); - } else { - sb.append('['); - sb.append(dependency.toStringWithOrder()); - sb.append(']'); - } + sb.append(dependingTerm.toStringWithOrder()); + sb.append(" : "); + sb.append(dependedTerms.stream().map(RDLTerm::toStringWithOrder).collect(Collectors.joining(", "))); return sb.toString() + "(" + order + ")"; } @@ -123,12 +70,6 @@ return false; } Dependency anotherDep = (Dependency) another; - if(anotherDep.isListType() != isListType()) { - return false; - } - if(isListType()) { - return anotherDep.getDependency().equals(dependency); - } return anotherDep.getDependingTerm().equals(dependingTerm) && anotherDep.getDependedTerms().equals(dependedTerms); } @@ -140,7 +81,7 @@ @Override public Object clone() { - return new Dependency((RDLTerm) dependingTerm.clone(), new ArrayList<>(dependedTerms)); + return new Dependency((RDLTerm) dependingTerm.clone(), new HashSet<>(dependedTerms)); } } diff --git a/src/main/java/models/terms/SetEvaluatableTerm.java b/src/main/java/models/terms/SetEvaluatableTerm.java deleted file mode 100644 index 05fc8e2..0000000 --- a/src/main/java/models/terms/SetEvaluatableTerm.java +++ /dev/null @@ -1,86 +0,0 @@ -package models.terms; - -import lombok.Getter; -import models.algebra.Symbol; - -@Getter -public class SetEvaluatableTerm extends EvaluatableTerm{ - - private EvaluatableTerm term; - - public SetEvaluatableTerm(EvaluatableTerm term) { - super(new Symbol("", 1), term.getOrder() - 1, term.getSize()); - this.term = term; - this.addChild(term); - } - - public SetEvaluatableTerm(EvaluatableTerm term, int order) { - super(new Symbol("", 1), order, term.getSize()); - if(term.getOrder() > order + 1) { - var childTerm = new SetEvaluatableTerm(term, order+1); - this.term = childTerm; - this.addChild(childTerm); - } else { - this.term = term; - this.addChild(term); - } - } - - public void setTerm(EvaluatableTerm newTerm) { - setChild(0, newTerm); - this.term = newTerm; - } - - @Override - public EvaluatableTerm linearRightNormalize() { - return (SetEvaluatableTerm) clone(); - } - - @Override - public void selfLinearRightNormalize() { - } - - @Override - public boolean isLinearRightNormalized() { - return term.isLinearRightNormalized(); - } - - - @Override - public boolean equals(Object another) { - if(! (another instanceof SetEvaluatableTerm)) { - return false; - } - var term = (SetEvaluatableTerm) another; - return term.getTerm().equals(getTerm()); - } - - @Override - public int hashCode() { - return ("SET" + toString()).hashCode(); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append('{'); - sb.append(term.toString()); - sb.append('}'); - return sb.toString(); - } - - @Override - public String toStringWithOrder() { - StringBuilder sb = new StringBuilder(); - sb.append('{'); - sb.append(term.toStringWithOrder()); - sb.append('}'); - return sb.toString() + "(" + order + ")"; - } - - @Override - public Object clone() { - return new SetEvaluatableTerm((EvaluatableTerm) term.clone(), order); - } - -}