@Override public void apply(KApply k) { if (cfg.isParentCell(k.klabel())) { if (inRewrite) { processSide(k, inRhs, k.klist().stream() .flatMap(this::streamCells) .collect(Collectors.toList())); } else { processSide(k, false, k.klist().stream() .flatMap(this::streamCells).map(this::left).flatMap(this::streamCells) .collect(Collectors.toList())); processSide(k, true, k.klist().stream() .flatMap(this::streamCells).map(this::right).flatMap(this::streamCells) .collect(Collectors.toList())); } } super.apply(k); }
default List<K> items() { return klist().items(); }
Optional<K> theStrategy = ((KApply) subject.term()).klist().stream() .filter(t -> t instanceof KApply && ((KApply) t).klabel().name().contains(Strategy.strategyCellName())) .findFirst(); return Optional.empty(); K topOfStrategyCell = ((KApply) theStrategy.get()).klist().items().get(0); topOfStrategyCell = ((KApply) topOfStrategyCell).klist().items().get(0); List<K> items = new LinkedList<>(((KApply) theStrategy.get()).klist().items()); items.add(0, stuck); K sContent = constructor.KApply1(constructor.KLabel(KLabels.KSEQ), constructor.KList(items), emptyAtt); K s = constructor.KApply1(((KApply) theStrategy.get()).klabel(), constructor.KList(Collections.singletonList(sContent)), emptyAtt); Term entireConf = constructor.KApply1(((KApply) subject.term()).klabel(), constructor.KList(((KApply) subject.term()).klist().stream().map(k -> k instanceof KApply && ((KApply) k).klabel().name().contains(Strategy.strategyCellName()) ? s : k).collect(Collectors.toList())), emptyAtt); return Optional.of(new ConstrainedTerm(entireConf, subject.termContext()));
for (K item : app.klist().asIterable()) { args.add(toJson(item)); knode.add("arity", app.klist().size()); knode.add("args", args.build());
private void checkVarLabelPatterns(Term subject, BitSet ruleMask, scala.collection.immutable.List<Pair<Integer, Integer>> path, RuleAutomatonDisjunction automatonDisjunction, BitSet returnSet) { List<Pair<KItem, BitSet>> varLabelPatterns = automatonDisjunction.getKItemPatternByArity(((KItem) subject).klist().size()); if (!(varLabelPatterns == null)) { for (Pair<KItem, BitSet> p : varLabelPatterns) { matchInside(subject, ruleMask, path, returnSet, p); } } }
private Integer getRuleIndex(KApply kk) { return definition.reverseRuleTable.get(Integer.valueOf(((KToken) kk.klist().items().get(0)).s())); }
KItem item = ((KItem) p.getLeft()); if (item.kLabel() instanceof Variable) { Integer arity = new Integer(item.klist().size()); if (!varKItemDisjunctionsMap.containsKey(arity)) { varKItemDisjunctionsMap.put(arity, new ArrayList<>());
private boolean isCellFragmentTest(KApply app) { if (app.klist().size() != 1) return false; K argument = app.klist().items().get(0); if (!(argument instanceof KVariable)) return false; VarInfo info = variables.get((KVariable)argument); if (info == null) return false; KLabel expectedPredicate = KLabel("is"+cfg.getCellSort(info.parentCell).toString()+"Fragment"); return app.klabel().equals(expectedPredicate); }
private Set<KApply> getOrContents(KApply k) { return KLabels.ML_OR.equals(k.klabel()) ? k.klist().items().stream().map(KApply.class::cast).collect(Collectors.toSet()) : Collections.singleton(k); }
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; } }
public static boolean isOpenLeft(KApply cell) { return isOpen(cell.klist().items().get(0)); } public static boolean isOpenRight(KApply cell) {
@Override public K apply(KApply k) { if (isLookupKLabel(k.klabel())) { assert k.klist().size() == 2; K r = apply(k.klist().items().get(1)); lhs = true; K l = apply(k.klist().items().get(0)); lhs = false; if (l != k.klist().items().get(0) || r != k.klist().items().get(1)) { return KApply(k.klabel(), l, r); } else { return k; } } return super.apply(k); }
public static boolean isOpenRight(KApply cell) { return isOpen(cell.klist().items().get(2)); }
private void choose(KApply k, String choiceString, String afterElse) { if (k.klist().items().size() != 2) { throw KEMException.internalError("Unexpected arity of choice: " + k.klist().size(), k); vars.termCache.put(k.klist().items().get(0), "e" + choiceCounter); StringBuilder sb = new StringBuilder(); sb.append(" -> (match "); convert(sb, true, vars, false, false).apply(k.klist().items().get(1)); sb.append(" with \n"); sb.append(choiceString); convert(sb, false, vars, false, false).apply(k.klist().items().get(0)); sb.append(" as e").append(choiceCounter++); String pattern = sb.toString();
public static List<K> getChildren(KApply cell) { return flattenCells(cell.klist().items().get(1)); }
private String wellformedAndGetSortNameOfCast(KList klist) { try { if (klist.size() == 3) { KApply k1 = (KApply) klist.items().get(0); KApply k3 = (KApply) klist.items().get(2); if (KLabels.NO_DOTS.equals(k1.klabel()) && k1.klist().size() == 0 && KLabels.DOTS.equals(k3.klabel()) && k3.klist().size() == 0) { KRewrite k2 = (KRewrite) klist.items().get(1); KApply k2l = (KApply) k2.left(); KApply k2r = (KApply) k2.right(); if (k2l.klabel().name().equals("ListItem") && k2l.klist().size() == 1 && k2r.klabel().name().equals(".List") && k2r.klist().size() == 0) { KApply k2li = (KApply) k2l.klist().items().get(0); if (k2li.klabel().name().startsWith("#SemanticCastTo") && k2li.klist().size() == 1 && k2li.klist().items().get(0) instanceof KVariable) { return ResolveSemanticCasts.getSortNameOfCast(k2li); // k2li.klabel().name().substring("#SemanticCastTo".length()); } } } } } catch (ClassCastException ignored) { } return ""; } }.apply(rule.body());
@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);