diff --git a/src/models/meta/MetaDependencyTermVariable.java b/src/models/meta/MetaDependencyTermVariable.java index 02b184e..3a248f3 100644 --- a/src/models/meta/MetaDependencyTermVariable.java +++ b/src/models/meta/MetaDependencyTermVariable.java @@ -1,11 +1,22 @@ package models.meta; +import lombok.Getter; import models.algebra.Symbol; +import models.algebra.Variable; +@Getter public class MetaDependencyTermVariable extends MetaRDLTerm { - public MetaDependencyTermVariable(int order) { + protected Variable variableName; + + public MetaDependencyTermVariable(Variable variableName, int order) { super(new Symbol(":", 3), order, MetaRDLTerm.TermType.META_DEPENDENCY_TERM_VARIABLE); + this.variableName = variableName; + } + + @Override + public boolean isVariable() { + return true; } } diff --git a/src/models/meta/MetaDependencyVariable.java b/src/models/meta/MetaDependencyVariable.java index aa48210..0d37cc0 100644 --- a/src/models/meta/MetaDependencyVariable.java +++ b/src/models/meta/MetaDependencyVariable.java @@ -1,11 +1,23 @@ package models.meta; +import lombok.Getter; import models.algebra.Symbol; +import models.algebra.Variable; +@Getter public class MetaDependencyVariable extends MetaRDLTerm { - public MetaDependencyVariable(int order) { + protected Variable variableName; + + public MetaDependencyVariable(Variable variableName, int order) { super(new Symbol(":", 2), order, MetaRDLTerm.TermType.META_DEPENDENCY_VARIABLE); + this.variableName = variableName; } + @Override + public boolean isVariable() { + return true; + } + + } diff --git a/src/models/meta/MetaRDLTerm.java b/src/models/meta/MetaRDLTerm.java index d7351a0..5ddf77f 100644 --- a/src/models/meta/MetaRDLTerm.java +++ b/src/models/meta/MetaRDLTerm.java @@ -1,5 +1,6 @@ package models.meta; +import exceptions.IllegalTypeException; import lombok.Getter; import models.Dependency; import models.EvaluatableTerm; @@ -41,6 +42,13 @@ this.termType = TermType.META_DEPENDENCY; } + public MetaRDLTerm(MetaRDLTerm dependingTerm, MetaResourceVariable dependedVariable) { + super(new Symbol(":", 2), dependedVariable.getOrder()); + addChild(dependingTerm); + addChild(dependedVariable); + this.termType = TermType.META_DEPENDENCY; + } + //list type dependency public MetaRDLTerm(MetaRDLTerm dependency) { super(new Symbol(":", 1), dependency.getOrder() - 1); @@ -49,32 +57,77 @@ } //dependency term - public MetaRDLTerm(Dependency dependency, MetaRDLTerm argumentVariable) { + public MetaRDLTerm(Dependency dependency, MetaRDLTerm argumentTerm) { super( new Symbol(":", 3), - dependency.getDependedVariable().getOrder() == argumentVariable.getOrder() + dependency.getDependedVariable().getOrder() == argumentTerm.getOrder() ? dependency.getDependedVariable().getOrder() : dependency.getDependedVariable().getOrder() - 1 ); + if(! dependency.isDependeingTermEvaluatable()) { + throw new IllegalTypeException(); + } addChild(dependency.getDependingTerm()); addChild(dependency.getDependedVariable()); - addChild(argumentVariable); + addChild(argumentTerm); this.termType = TermType.META_DEPENDENCY_TERM; } - public MetaRDLTerm(MetaRDLTerm dependency, EvaluatableTerm argumentVariable) { + public MetaRDLTerm(MetaRDLTerm dependency, EvaluatableTerm argumentTerm) { super( new Symbol(":", 3), - ((RDLTerm) dependency.getChild(1)).getOrder() == argumentVariable.getOrder() + ((RDLTerm) dependency.getChild(1)).getOrder() == argumentTerm.getOrder() ? ((RDLTerm) dependency.getChild(1)).getOrder() : ((RDLTerm) dependency.getChild(1)).getOrder() - 1 ); + var firstTerm = (RDLTerm) dependency.getChild(0); + if(firstTerm instanceof MetaRDLTerm) { + var firtTerm2 = (MetaRDLTerm) firstTerm; + if(firtTerm2.getTermType() == TermType.META_DEPENDENCY || firtTerm2.getTermType() == TermType.META_DEPENDENCY_TERM) { + throw new IllegalTypeException(); + } + } else { + if(! (firstTerm instanceof EvaluatableTerm)) { + throw new IllegalTypeException(); + } + } + addChild(dependency.getChild(0)); addChild(dependency.getChild(1)); - addChild(argumentVariable); + addChild(argumentTerm); this.termType = TermType.META_DEPENDENCY_TERM; } + public MetaRDLTerm(MetaRDLTerm dependency, MetaRDLTerm argumentTerm) { + super( + new Symbol(":", 3), + ((RDLTerm) dependency.getChild(1)).getOrder() == argumentTerm.getOrder() + ? ((RDLTerm) dependency.getChild(1)).getOrder() + : ((RDLTerm) dependency.getChild(1)).getOrder() - 1 + ); + var firstTerm = (RDLTerm) dependency.getChild(0); + if(firstTerm instanceof MetaRDLTerm) { + var firtTerm2 = (MetaRDLTerm) firstTerm; + if(firtTerm2.getTermType() == TermType.META_DEPENDENCY || firtTerm2.getTermType() == TermType.META_DEPENDENCY_TERM) { + throw new IllegalTypeException(); + } + } else { + if(! (firstTerm instanceof EvaluatableTerm)) { + throw new IllegalTypeException(); + } + } + + addChild(dependency.getChild(0)); + addChild(dependency.getChild(1)); + addChild(argumentTerm); + this.termType = TermType.META_DEPENDENCY_TERM; + } + + public boolean isVariable() { + return false; + } + + @Override public String toString() { return null; diff --git a/src/models/meta/MetaResourceVariable.java b/src/models/meta/MetaResourceVariable.java index e849e85..96731be 100644 --- a/src/models/meta/MetaResourceVariable.java +++ b/src/models/meta/MetaResourceVariable.java @@ -1,11 +1,23 @@ package models.meta; +import lombok.Getter; import models.algebra.Symbol; +import models.algebra.Variable; +@Getter public class MetaResourceVariable extends MetaRDLTerm { - protected MetaResourceVariable(int order) { + protected Variable variableName; + + public MetaResourceVariable(Variable variableName, int order) { super(new Symbol("", 0), order, MetaRDLTerm.TermType.META_RESOURCE_VARIABLE); + this.variableName = variableName; } + + @Override + public boolean isVariable() { + return true; + } + }