public void convert(K k) { k = new AddSortInjections(module).addInjections(k); new VisitK() { @Override
children.add(addInjections(child, expectedSort)); return KRewrite(addInjections(rew.left(), actualSort), addInjections(rew.right(), actualSort), att); } else if (term instanceof KVariable) { return KVariable(((KVariable) term).name(), att); Sort childSort = sort(child, Sorts.KItem()); if (childSort.equals(Sorts.K())) { children.add(addInjections(child, Sorts.K())); } else { children.add(addInjections(child, Sorts.KItem())); } else if (term instanceof KAs) { KAs kas = (KAs)term; return KAs(addInjections(kas.pattern(), actualSort), kas.alias(), att); } else { throw KEMException.internalError("Invalid category of k found.", term);
public K addInjections(K term) { if (new FoldK<Boolean>() { @Override public Boolean unit() { return false; } @Override public Boolean apply(KRewrite k) { return true; } @Override public Boolean merge(Boolean a, Boolean b) { return a || b; } }.apply(term)) { term = KRewrite(RewriteToTop.toLeft(term), RewriteToTop.toRight(term)); } Sort topSort = sort(term, Sorts.K()); K result = addInjections(term, topSort); return result; }
parsed = new AddSortInjections(compiledMod).addInjections(parsed, sort); converter.convert(parsed); System.out.println(converter.toString());