private boolean isBuiltinModuloConstructor(KLabel label) { return label.equals(KLabels.DotMap) || label.equals(KLabels.Map) || label.equals(KLabels.MapItem) || label.equals(KLabels.DotList) || label.equals(KLabels.List) || label.equals(KLabels.ListItem) || label.equals(KLabels.DotSet) || label.equals(KLabels.Set) || label.equals(KLabels.SetItem); }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; KApply kApply = (KApply) o; return klabel.equals(kApply.klabel); }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; InjectedKLabel that = (InjectedKLabel) o; return klabel.equals(that.klabel); }
private List<Rule> getRulesForStepFunction(List<Rule> rulesWithoutLookup, KLabel l) { List<Rule> res = new ArrayList<>(); for (Rule r : rulesWithoutLookup) { Optional<KLabel> nextOp = getNextOperation(RewriteToTop.toLeft(r.body()), false); if (!nextOp.isPresent() || nextOp.get().equals(l)) { res.add(r); } } return res; }
public static Term stripListItem(Term term) { if (term instanceof KItem) { KItem kitem = (KItem) term; if (KLabels.ListItem.equals(kitem.klabel())) { return ((KList) kitem.kList()).getContents().get(0); } } return term; }
@Override public Sort getCellSort(KLabel kLabel) { if (kLabel != null) { return cellLabels.entrySet().stream().filter(e -> kLabel.equals(e.getValue())).map(Map.Entry::getKey).findAny().orElseGet(null); } else { return null; } }
static boolean isLookup(Term term) { return term instanceof KItem && ((KItem) term).kLabel() instanceof KLabelConstant && (LIST_GET.equals(((KItem) term).kLabel()) || MAP_LOOKUP.equals(((KItem) term).kLabel()) || SET_MEMBERSHIP.equals(((KItem) term).kLabel())) && ((KItem) term).kList() instanceof KList && ((KList) ((KItem) term).kList()).isConcreteCollection() && ((KList) ((KItem) term).kList()).concreteSize() == 2; }
private static void flattenCells(List<K> children, K item) { if (item instanceof KApply && KLabels.CELLS.equals(((KApply) item).klabel())) { for (K deeper : ((KApply) item).klist().items()) { flattenCells(children, deeper); } } else { children.add(item); } } public static List<K> flattenCells(K cells) {
public boolean isCell(KLabel klabel) { Sort s = labels.getCodomain(klabel); return cfg.isCell(s) && cfg.getCellLabel(s).equals(klabel); } public boolean isLeafCell(KLabel klabel) {
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); }
@Override public Term transform(KItem kItem) { if (!KLabels.KREWRITE.equals(kItem.kLabel())) { return (Term) super.transform(kItem); } return (Term) ((Term) kItem.klist().items().get(0)).accept(this); } });
private boolean isElement(Term term) { //assert global.getDefinition().subsorts().isSubsortedEq(sort, term.sort()); //TODO: restore the assertion after fixing variables _:K generated fom ... return !(isListVariable(term) || term instanceof BuiltinList && ((BuiltinList) term).sort.equals(sort) || term instanceof RuleAutomatonDisjunction && ((RuleAutomatonDisjunction) term).disjunctions().stream().anyMatch(p -> !isElement(p.getLeft())) || term instanceof KItem && KLabels.KREWRITE.equals(((KItem) term).kLabel()) && !isElement(((KList) ((KItem) term).kList()).get(0))); }
static boolean isChoice(Term term) { return term instanceof KItem && ((KItem) term).kLabel() instanceof KLabelConstant && (MAP_CHOICE.equals(((KItem) term).kLabel()) || SET_CHOICE.equals(((KItem) term).kLabel())) && ((KItem) term).kList() instanceof KList && ((KList) ((KItem) term).kList()).isConcreteCollection() && ((KList) ((KItem) term).kList()).concreteSize() == 1; }
@Override public Term transform(KItem kItem) { if (!KLabels.KREWRITE.equals(kItem.kLabel())) { return (Term) super.transform(kItem); } Term rhs = ((InnerRHSRewrite) kItem.klist().items().get(1)).theRHS[i]; if (rhs == null) { return (Term) ((Term) kItem.klist().items().get(0)).accept(this); } hasRewrite[0] = true; return rhs; } });
public static Sentence convertListItemToNonFunction(Module mod, Sentence sentence) { if (!(sentence instanceof Production)) { return sentence; } Production prod = (Production)sentence; if (prod.klabel().isDefined() && KLabels.ListItem.equals(prod.klabel().get())) { return Production(prod.sort(), prod.items(), prod.att().remove("function")); } return prod; }
static boolean isMapUpdate(Term term) { return term instanceof KItem && ((KItem) term).kLabel() instanceof KLabelConstant && MAP_UPDATE.equals(((KItem) term).kLabel()) && ((KItem) term).kList() instanceof KList && ((KList) ((KItem) term).kList()).isConcreteCollection() && ((KList) ((KItem) term).kList()).concreteSize() == 2; }
public static boolean isFunctionRule(TermCons tc) { if (tc.production().sort().name().equals("RuleContent")) { ProductionReference child = (ProductionReference) tc.get(0); if (child.production().klabel().isDefined() && child.production().klabel().get().equals(KLabels.KREWRITE)) { child = (ProductionReference)((TermCons)child).get(0); } return child.production().att().contains(Attribute.FUNCTION_KEY); } return false; }
@Override public K apply(KApply k) { if (KLabels.KREWRITE.equals(k.klabel())) { return KRewrite(apply(k.klist().items().get(0)), apply(k.klist().items().get(1)), k.att()); } else { k = (KApply) super.apply(k); return KApply(apply(k.klabel()), k.klist(), k.att()); } }
private Term normalizeKSeqList(KList kList) { if (kList.size() > 1 && (kList.get(0) instanceof KItem) && KLabels.KSEQ.equals(((KItem) (kList.get(0))).klabel())) { KItem kSeq = (KItem) (kList.get(0)); if (kSeq.kList() instanceof KList) { KList kSeqList = (KList) kSeq.klist(); Term rightNormalizedChild = addRightAssoc(kSeqList.get(1), kList.get(1)); return KList.concatenate(kSeqList.get(0), rightNormalizedChild); } } return kList; }