use of mb.nabl2.terms.Terms in project nabl by metaborg.
the class PersistentUnifier method size.
private TermSize size(final ITermVar var, final Set<ITermVar> stack, final java.util.Map<ITermVar, TermSize> visited) {
final ITermVar rep = findRep(var);
final TermSize size;
if (!visited.containsKey(rep)) {
stack.add(rep);
visited.put(rep, TermSize.ZERO);
final ITerm term = terms().get(rep);
size = term != null ? size(term, stack, visited) : TermSize.ZERO;
visited.put(rep, size);
stack.remove(rep);
return size;
} else if (stack.contains(rep)) {
size = TermSize.INF;
} else {
size = visited.get(rep);
}
return size;
}
use of mb.nabl2.terms.Terms in project nabl by metaborg.
the class PersistentUnifier method isCyclic.
private boolean isCyclic(final ITermVar var, final Set<ITermVar> stack, final java.util.Map<ITermVar, Boolean> visited) {
final boolean cyclic;
final ITermVar rep = findRep(var);
if (!visited.containsKey(rep)) {
stack.add(rep);
visited.put(rep, false);
final ITerm term = terms().get(rep);
cyclic = term != null ? isCyclic(term.getVars().elementSet(), stack, visited) : false;
visited.put(rep, cyclic);
stack.remove(rep);
} else if (stack.contains(rep)) {
cyclic = true;
} else {
cyclic = visited.get(rep);
}
return cyclic;
}
use of mb.nabl2.terms.Terms in project nabl by metaborg.
the class PersistentUnifier method equalVars.
private boolean equalVars(final ITermVar left, final ITermVar right, final Set<Set2<ITermVar>> stack, final java.util.Map<Set2<ITermVar>, Boolean> visited) {
final ITermVar leftRep = findRep(left);
final ITermVar rightRep = findRep(right);
if (leftRep.equals(rightRep)) {
return true;
}
final Set2<ITermVar> pair = Set2.of(leftRep, rightRep);
final boolean equal;
if (!visited.containsKey(pair)) {
stack.add(pair);
visited.put(pair, false);
final ITerm leftTerm = terms().get(leftRep);
final ITerm rightTerm = terms().get(rightRep);
equal = (leftTerm != null && rightTerm != null) ? equalTerms(leftTerm, rightTerm, stack, visited) : false;
visited.put(pair, equal);
stack.remove(pair);
} else if (stack.contains(pair)) {
equal = false;
} else {
equal = visited.get(pair);
}
return equal;
}
use of mb.nabl2.terms.Terms in project nabl by metaborg.
the class PersistentUnifier method unequalVars.
private boolean unequalVars(final ITermVar left, final ITermVar right, Set<Set2<ITermVar>> stack, final java.util.Map<Set2<ITermVar>, Boolean> visited) {
final ITermVar leftRep = findRep(left);
final ITermVar rightRep = findRep(right);
if (leftRep.equals(rightRep)) {
return false;
}
final Set2<ITermVar> pair = Set2.of(leftRep, rightRep);
final boolean unequal;
if (!visited.containsKey(pair)) {
stack.add(pair);
visited.put(pair, false);
final ITerm leftTerm = terms().get(leftRep);
final ITerm rightTerm = terms().get(rightRep);
unequal = (leftTerm != null && rightTerm != null) ? unequalTerms(leftTerm, rightTerm, stack, visited) : false;
visited.put(pair, unequal);
stack.remove(pair);
} else if (stack.contains(pair)) {
unequal = false;
} else {
unequal = visited.get(pair);
}
return unequal;
}
use of mb.nabl2.terms.Terms in project nabl by metaborg.
the class AnalysisPrimitive method call.
public Optional<? extends IStrategoTerm> call(IScopeGraphUnit unit, IStrategoTerm sterm, List<IStrategoTerm> sterms, ITermFactory factory) throws InterpreterException {
final StrategoTerms strategoTerms = new StrategoTerms(factory);
final List<ITerm> terms = sterms.stream().skip(1).map(strategoTerms::fromStratego).map(ConstraintTerms::specialize).collect(Collectors.toList());
final ITerm term = ConstraintTerms.specialize(strategoTerms.fromStratego(sterm));
Optional<? extends ITerm> result = call(unit, term, terms);
return result.map(ConstraintTerms::explicate).map(strategoTerms::toStratego);
}
Aggregations