Search in sources :

Example 1 with Terms

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;
}
Also used : ITermVar(mb.nabl2.terms.ITermVar) ITerm(mb.nabl2.terms.ITerm)

Example 2 with Terms

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;
}
Also used : ITermVar(mb.nabl2.terms.ITermVar) ITerm(mb.nabl2.terms.ITerm)

Example 3 with Terms

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;
}
Also used : ITermVar(mb.nabl2.terms.ITermVar) ITerm(mb.nabl2.terms.ITerm)

Example 4 with Terms

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;
}
Also used : ITermVar(mb.nabl2.terms.ITermVar) ITerm(mb.nabl2.terms.ITerm)

Example 5 with Terms

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);
}
Also used : StrategoTerms(mb.nabl2.stratego.StrategoTerms) ITerm(mb.nabl2.terms.ITerm)

Aggregations

ITerm (mb.nabl2.terms.ITerm)13 ITermVar (mb.nabl2.terms.ITermVar)8 ImmutableClassToInstanceMap (com.google.common.collect.ImmutableClassToInstanceMap)2 Label (mb.nabl2.scopegraph.terms.Label)2 StrategoTerms (mb.nabl2.stratego.StrategoTerms)2 IListTerm (mb.nabl2.terms.IListTerm)2 IStrategoList (org.spoofax.interpreter.terms.IStrategoList)2 IStrategoTerm (org.spoofax.interpreter.terms.IStrategoTerm)2 Builder (com.google.common.collect.ImmutableClassToInstanceMap.Builder)1 Lists (com.google.common.collect.Lists)1 Arrays (java.util.Arrays)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 Map (java.util.Map)1 Optional (java.util.Optional)1 Collectors (java.util.stream.Collectors)1 Occurrence (mb.nabl2.scopegraph.terms.Occurrence)1 Scope (mb.nabl2.scopegraph.terms.Scope)1 ListTerms (mb.nabl2.terms.ListTerms)1 Terms (mb.nabl2.terms.Terms)1