use of mb.nabl2.terms.ITerm in project nabl by metaborg.
the class StrategoTerms method fromStratego.
// from
public ITerm fromStratego(IStrategoTerm sterm) {
ImmutableClassToInstanceMap<Object> attachments = getAttachments(sterm);
// @formatter:off
ITerm term = match(sterm, StrategoTerms.cases(appl -> B.newAppl(appl.getConstructor().getName(), Arrays.asList(appl.getAllSubterms()).stream().map(this::fromStratego).collect(Collectors.toList())), tuple -> B.newTuple(Arrays.asList(tuple.getAllSubterms()).stream().map(this::fromStratego).collect(Collectors.toList())), this::fromStrategoList, integer -> B.newInt(integer.intValue()), real -> {
throw new IllegalArgumentException("Real values are not supported.");
}, string -> B.newString(string.stringValue()), blob -> B.newBlob(blob.value()))).withAttachments(attachments);
// @formatter:on
return term;
}
use of mb.nabl2.terms.ITerm in project nabl by metaborg.
the class TermMultiset method update.
public boolean update(Collection<ITermVar> vars, IUnifier unifier) {
final Set<ITerm> updatedTerms = vars.stream().flatMap(var -> varTerms.removeAll(var).stream()).collect(Collectors.toSet());
for (ITerm term : updatedTerms) {
final int n = terms.remove(term, terms.count(term));
varTerms.values().remove(term);
add(term, n, unifier);
}
return !updatedTerms.isEmpty();
}
use of mb.nabl2.terms.ITerm in project nabl by metaborg.
the class TermMultiset method add.
public void add(ITerm term, int n, IUnifier unifier) {
final ITerm rep = unifier.findRecursive(term);
for (ITermVar var : rep.getVars().elementSet()) {
varTerms.put(var, rep);
}
terms.add(rep, n);
}
use of mb.nabl2.terms.ITerm in project nabl by metaborg.
the class TermMultisetTest method testAdd2Seprately.
@Test
public void testAdd2Seprately() {
final ITerm t1 = B.newInt(1);
terms.add(t1, unifier);
terms.add(t1, unifier);
assertEquals(0, terms.varSet().size());
assertEquals(1, terms.elementSet().size());
assertEquals(2, terms.count(t1, unifier));
}
use of mb.nabl2.terms.ITerm in project nabl by metaborg.
the class TermIndexTest method testEqualAfterSerialization1.
@Test
public void testEqualAfterSerialization1() throws Exception {
ITerm t1 = ImmutableTermIndex.of("Hello, world!", 42);
ITerm t2 = deserialize(serialize(t1));
assertEquals(t1.hashCode(), t2.hashCode());
assertTrue(t1.equals(t2));
}
Aggregations