@Override public DefaultMutableTreeNode apply(KSequence k) { boolean childrenAllSmall = true; DefaultMutableTreeNode node = new DefaultMutableTreeNode("~>"); for (K child: k.asIterable()) { DefaultMutableTreeNode c = apply(child); if (childrenAllSmall) { childrenAllSmall = c.isLeaf(); } node.add(c); } if (childrenAllSmall) { String text = ToKast.apply(k); if (text.length() < 80) { return new DefaultMutableTreeNode(text); } } return node; }
for (K item : seq.asIterable()) { items.add(toJson(item)); knode.add("arity", seq.size()); knode.add("items", items.build());
K concretize(K term) { if (term instanceof KApply) { KApply app = (KApply) term; KApply newTerm = KApply(app.klabel(), KList(app.klist().stream() .map(this::concretize).collect(Collectors.toList()))); if (cfg.isParentCell(newTerm.klabel())) { return concretizeCell(newTerm); } else { return newTerm; } } else if (term instanceof KRewrite) { KRewrite rew = (KRewrite) term; return KRewrite(concretize(rew.left()), concretize(rew.right())); } else if (term instanceof KSequence) { return KSequence(((KSequence) term).stream() .map(this::concretize).collect(Collectors.toList())); } else { return term; } }
KSequence seq = (KSequence) k; for (K item : seq.asIterable()) { traverse(item); data.writeInt(seq.size());
@Override public void apply(KSequence k) { if (k.items().size() == 1 && inBooleanExp) { apply(k.items().get(0)); return; } if (vars.termCache.containsKey(k) && rhs) { sb.append(vars.termCache.get(k)); return; } sb.append("("); if (!rhs) { for (int i = 0; i < k.items().size() - 1; i++) { if (isList(k.items().get(i), false, false, vars, topAnywherePost)) { throw KEMException.criticalError("Cannot compile KSequence with K variable not at tail.", k.items().get(i)); } } } apply(k.items(), false); sb.append(")"); }
@Override public K apply(KSequence k) { ArrayList<K> newItems = new ArrayList<>(k.items()); boolean change = false; for (int i = 0; i < newItems.size(); ++i) { K in = newItems.get(i); K out = apply(newItems.get(i)); newItems.set(i, out); change = change || (in != out); } if (change) { return KSequence(newItems, k.att()); } else { return k; } }
private void convertLHS(StringBuilder sb, RuleType type, K left, VarInfo vars) { Visitor visitor = convert(sb, false, vars, false, false); if (type == RuleType.ANYWHERE || type == RuleType.FUNCTION) { KApply kapp = (KApply) ((KSequence) left).items().get(0); sb.append("("); visitor.applyTuple(kapp.klist().items()); sb.append(")"); } else { visitor.apply(left); } }
@Override public void apply(KSequence k) { for (int i = 0; i < k.items().size(); i++) { K item = k.items().get(i); boolean isList = item.att().get(Sort.class).equals(Sorts.K()); if (i == k.items().size() - 1) { if (isList) { apply(item); } else { sb.append("kseq{}("); apply(item); sb.append(",dotk{}())"); } } else { if (item.att().get(Sort.class).equals(Sorts.K())) { sb.append("append{}("); } else { sb.append("kseq{}("); } apply(item); sb.append(","); } } if (k.items().size() == 0) { sb.append("dotk{}()"); } for (int i = 0; i < k.items().size() - 1; i++) { sb.append(")"); } }
if (kseq.items().size() != 1 || !(kseq.items().get(0) instanceof KApply)) { throw KEMException.compilerError("Unexpected form for klabel predicate rule, expected predicate(_) => false [owise] or predicate(#klabel(`klabel`)) => true.", r); KApply function = (KApply)kseq.items().get(0); if (function.items().size() != 1 || !(function.items().get(0) instanceof KSequence)) { throw KEMException.compilerError("Unexpected form for klabel predicate rule, expected predicate(_) => false [owise] or predicate(#klabel(`klabel`)) => true.", r); if (kseq.items().size() != 1 || !(kseq.items().get(0) instanceof InjectedKLabel)) { throw KEMException.compilerError("Unexpected form for klabel predicate rule, expected predicate(_) => false [owise] or predicate(#klabel(`klabel`)) => true.", r); InjectedKLabel injection = (InjectedKLabel) kseq.items().get(0); if (injection.klabel() instanceof KVariable) { throw KEMException.compilerError("Unexpected form for klabel predicate rule, expected predicate(_) => false [owise] or predicate(#klabel(`klabel`)) => true.", r);
@Override public void apply(KApply k) { if (k.klabel().name().equals("<k>")) { if (k.klist().items().size() == 1) { if (k.klist().items().get(0) instanceof KSequence) { KSequence seq = (KSequence) k.klist().items().get(0); if (seq.items().size() >= 1) { kCells.add(k); } } } } super.apply(k); } }.apply(body);
if (kCell.isPresent()) { KSequence seq = (KSequence) kCell.get().klist().items().get(0); K topOfKCell = seq.items().get(0); if (topOfKCell instanceof KVariable) { Optional<Sort> sortAtt = topOfKCell.att().getOptional(Sort.class);
@Override public void apply(KApply k) { if (k.klabel().name().equals("<k>")) { if (!hasProblem.booleanValue()) { hasProblem.setTrue(); if (k.klist().items().size() == 1) { if (k.klist().items().get(0) instanceof KSequence) { KSequence seq = (KSequence) k.klist().items().get(0); if (seq.items().size() >= 1) { K head = seq.items().get(0); while (head instanceof KAs) { head = ((KAs) head).pattern(); } if (head instanceof KApply) { KApply app = (KApply) head; if (!(app.klabel() instanceof KVariable)) { if (!rhs || (!functions.contains(app.klabel()) && !anywhereKLabels.contains(app.klabel()))) { nextOps.add(app.klabel()); hasProblem.setFalse(); } } } } } } } } super.apply(k); } }.apply(side);
if (left instanceof KSequence) { KSequence kseq = (KSequence) left; if (kseq.items().size() == 1 && kseq.items().get(0) instanceof KApply) { KApply kapp = (KApply) kseq.items().get(0); if (mainModule.attributesFor().apply(kapp.klabel()).contains(Attribute.FUNCTION_KEY)) { functionRules.put(kapp.klabel(), r);