Search in sources :

Example 6 with Terms

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

the class ScopeGraphLogPrimitive method call.

@Override
public Optional<ITerm> call(IScopeGraphContext<?> context, ITerm term, List<ITerm> terms) throws InterpreterException {
    final ITerm messageTerm = terms.get(0);
    final String message = M.stringValue().match(messageTerm).orElseGet(() -> messageTerm.toString());
    logger.log(level(context), "{}", message);
    return fatal() ? Optional.empty() : Optional.of(term);
}
Also used : ITerm(mb.nabl2.terms.ITerm)

Example 7 with Terms

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

the class StrategoTerms method toStratego.

// to
public IStrategoTerm toStratego(ITerm term) {
    IStrategoTerm strategoTerm = term.match(Terms.cases(// @formatter:off
    appl -> {
        List<IStrategoTerm> args = appl.getArgs().stream().map(arg -> toStratego(arg)).collect(Collectors.toList());
        IStrategoTerm[] argArray = args.toArray(new IStrategoTerm[args.size()]);
        return appl.getOp().equals(Terms.TUPLE_OP) ? termFactory.makeTuple(argArray) : termFactory.makeAppl(termFactory.makeConstructor(appl.getOp(), appl.getArity()), argArray);
    }, list -> toStrategoList(list), string -> termFactory.makeString(string.getValue()), integer -> termFactory.makeInt(integer.getValue()), blob -> new StrategoBlob(blob.getValue()), var -> {
        throw new IllegalArgumentException("Cannot convert specialized terms to Stratego.");
    }));
    strategoTerm = putAttachments(strategoTerm, term.getAttachments());
    return strategoTerm;
}
Also used : B(mb.nabl2.terms.build.TermBuild.B) Arrays(java.util.Arrays) IStrategoInt(org.spoofax.interpreter.terms.IStrategoInt) Function1(org.metaborg.util.functions.Function1) ListTerms(mb.nabl2.terms.ListTerms) Builder(com.google.common.collect.ImmutableClassToInstanceMap.Builder) ITerm(mb.nabl2.terms.ITerm) IStrategoAppl(org.spoofax.interpreter.terms.IStrategoAppl) ITermFactory(org.spoofax.interpreter.terms.ITermFactory) IStrategoTuple(org.spoofax.interpreter.terms.IStrategoTuple) Collectors(java.util.stream.Collectors) IStrategoList(org.spoofax.interpreter.terms.IStrategoList) IStrategoReal(org.spoofax.interpreter.terms.IStrategoReal) List(java.util.List) Terms(mb.nabl2.terms.Terms) Lists(com.google.common.collect.Lists) IListTerm(mb.nabl2.terms.IListTerm) Optional(java.util.Optional) LinkedList(java.util.LinkedList) IStrategoString(org.spoofax.interpreter.terms.IStrategoString) ImmutableClassToInstanceMap(com.google.common.collect.ImmutableClassToInstanceMap) IStrategoTerm(org.spoofax.interpreter.terms.IStrategoTerm) IStrategoTerm(org.spoofax.interpreter.terms.IStrategoTerm) IStrategoList(org.spoofax.interpreter.terms.IStrategoList) List(java.util.List) LinkedList(java.util.LinkedList)

Example 8 with Terms

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

the class ScopeGraphContextPrimitive method call.

public Optional<? extends IStrategoTerm> call(IScopeGraphContext<?> context, IStrategoTerm sterm, List<IStrategoTerm> sterms, ITermFactory factory) throws InterpreterException {
    StrategoTerms strategoTerms = new StrategoTerms(factory);
    ITerm term = ConstraintTerms.specialize(strategoTerms.fromStratego(sterm));
    List<ITerm> terms = sterms.stream().map(strategoTerms::fromStratego).map(ConstraintTerms::specialize).collect(Collectors.toList());
    Optional<? extends ITerm> result = call(context, term, terms);
    return result.map(ConstraintTerms::explicate).map(strategoTerms::toStratego);
}
Also used : StrategoTerms(mb.nabl2.stratego.StrategoTerms) ITerm(mb.nabl2.terms.ITerm)

Example 9 with Terms

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

the class StrategoTerms method toStrategoList.

// NB. This function does not preserve locks, it depends on toStratego for that.
private IStrategoTerm toStrategoList(IListTerm list) {
    final LinkedList<IStrategoTerm> terms = Lists.newLinkedList();
    final LinkedList<ImmutableClassToInstanceMap<Object>> attachments = Lists.newLinkedList();
    while (list != null) {
        attachments.push(list.getAttachments());
        list = list.match(ListTerms.<IListTerm>cases(// @formatter:off
        cons -> {
            terms.push(toStratego(cons.getHead()));
            return cons.getTail();
        }, nil -> {
            return null;
        }, var -> {
            throw new IllegalArgumentException("Cannot convert specialized terms to Stratego.");
        }));
    }
    IStrategoList strategoList = termFactory.makeList();
    putAttachments(strategoList, attachments.pop());
    while (!terms.isEmpty()) {
        strategoList = termFactory.makeListCons(terms.pop(), strategoList);
        putAttachments(strategoList, attachments.pop());
    }
    return strategoList;
}
Also used : IListTerm(mb.nabl2.terms.IListTerm) IStrategoTerm(org.spoofax.interpreter.terms.IStrategoTerm) ImmutableClassToInstanceMap(com.google.common.collect.ImmutableClassToInstanceMap) IStrategoList(org.spoofax.interpreter.terms.IStrategoList)

Example 10 with Terms

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

the class PersistentUnifier method findVarRecursive.

private ITerm findVarRecursive(final ITermVar var, final Set<ITermVar> stack, final java.util.Map<ITermVar, ITerm> visited) {
    final ITermVar rep = findRep(var);
    final ITerm instance;
    if (!visited.containsKey(rep)) {
        stack.add(rep);
        visited.put(rep, rep);
        final ITerm term = terms().get(rep);
        instance = term != null ? findTermRecursive(term, stack, visited) : rep;
        visited.put(rep, instance);
        stack.remove(rep);
        return instance;
    } else if (stack.contains(rep)) {
        throw new IllegalArgumentException("Recursive terms cannot be instantiated.");
    } else {
        instance = visited.get(rep);
    }
    return instance;
}
Also used : ITermVar(mb.nabl2.terms.ITermVar) 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