Search in sources :

Example 11 with Terms

use of mb.nabl2.terms.Terms in project nabl by metaborg.

the class PersistentUnifier method isGround.

private boolean isGround(final ITermVar var, final Set<ITermVar> stack, final java.util.Map<ITermVar, Boolean> visited) {
    final boolean ground;
    final ITermVar rep = findRep(var);
    if (!visited.containsKey(rep)) {
        stack.add(rep);
        visited.put(rep, false);
        final ITerm term = terms().get(rep);
        ground = term != null ? isGround(term.getVars().elementSet(), stack, visited) : false;
        visited.put(rep, ground);
        stack.remove(rep);
    } else if (stack.contains(rep)) {
        ground = false;
    } else {
        ground = visited.get(rep);
    }
    return ground;
}
Also used : ITermVar(mb.nabl2.terms.ITermVar) ITerm(mb.nabl2.terms.ITerm)

Example 12 with Terms

use of mb.nabl2.terms.Terms in project nabl by metaborg.

the class PersistentUnifier method toString.

@Override
public String toString() {
    final StringBuilder sb = new StringBuilder();
    sb.append("{");
    boolean first = true;
    for (ITermVar var : terms().keySet()) {
        sb.append(first ? " " : ", ");
        first = false;
        sb.append(var);
        sb.append(" |-> ");
        sb.append(terms().get(var));
    }
    for (ITermVar var : reps().keySet()) {
        sb.append(first ? " " : ", ");
        first = false;
        sb.append(var);
        sb.append(" |-> ");
        sb.append(findRep(var));
    }
    sb.append(first ? "}" : " }");
    return sb.toString();
}
Also used : ITermVar(mb.nabl2.terms.ITermVar)

Example 13 with Terms

use of mb.nabl2.terms.Terms in project nabl by metaborg.

the class PersistentUnifier method getVars.

private void getVars(final ITermVar var, final LinkedList<ITermVar> stack, final Set<ITermVar> visited, Set<ITermVar> vars) {
    final ITermVar rep = findRep(var);
    if (!visited.contains(rep)) {
        visited.add(rep);
        stack.push(rep);
        final ITerm term = terms().get(rep);
        if (term != null) {
            getVars(term.getVars().elementSet(), stack, visited, vars);
        } else {
            vars.add(rep);
        }
        stack.pop();
    } else {
        // linear
        final int index = stack.indexOf(rep);
        if (index >= 0) {
            vars.addAll(stack.subList(0, index + 1));
        }
    }
}
Also used : ITermVar(mb.nabl2.terms.ITermVar) ITerm(mb.nabl2.terms.ITerm)

Example 14 with Terms

use of mb.nabl2.terms.Terms in project nabl by metaborg.

the class SG_get_ref_resolution method call.

@Override
public Optional<? extends ITerm> call(IScopeGraphUnit unit, ITerm term, List<ITerm> terms) throws InterpreterException {
    return unit.solution().flatMap(s -> {
        return Occurrence.matcher().match(term, s.unifier()).<ITerm>flatMap(ref -> {
            return s.nameResolution().resolve(ref).map(paths -> {
                List<ITerm> pathTerms = Lists.newArrayListWithExpectedSize(paths.size());
                for (IResolutionPath<Scope, Label, Occurrence> path : paths) {
                    pathTerms.add(B.newTuple(path.getDeclaration(), Paths.toTerm(path)));
                }
                ITerm result = B.newList(pathTerms);
                return result;
            });
        });
    });
}
Also used : Scope(mb.nabl2.scopegraph.terms.Scope) Label(mb.nabl2.scopegraph.terms.Label) ITerm(mb.nabl2.terms.ITerm) Occurrence(mb.nabl2.scopegraph.terms.Occurrence)

Example 15 with Terms

use of mb.nabl2.terms.Terms in project nabl by metaborg.

the class ScopeGraphEdgePrimitive method call.

@Override
public Optional<ITerm> call(IScopeGraphUnit unit, ITerm term, List<ITerm> terms) throws InterpreterException {
    return unit.solution().flatMap(sol -> {
        final IRelation3<S, Label, ? extends ITerm> edges = getEdges(sol.scopeGraph());
        final IMatcher<S> sourceMatcher = getSourceMatcher();
        return M.<ITerm>cases(// @formatter:off
        M.term(sourceMatcher, (t, source) -> {
            List<ITerm> edgeTerms = Lists.newArrayList();
            for (Map.Entry<Label, ? extends ITerm> edge : edges.get(source)) {
                edgeTerms.add(B.newTuple(edge.getKey(), edge.getValue()));
            }
            return B.newList(edgeTerms);
        }), M.tuple2(sourceMatcher, Label.matcher(), (t, source, label) -> {
            List<ITerm> targetTerms = Lists.newArrayList();
            for (ITerm target : edges.get(source, label)) {
                targetTerms.add(target);
            }
            return B.newList(targetTerms);
        })).match(term, sol.unifier());
    });
}
Also used : Label(mb.nabl2.scopegraph.terms.Label) ITerm(mb.nabl2.terms.ITerm) Map(java.util.Map)

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