private List<Term> lowerKList(Term listTerm) { List<Term> items = new ArrayList<>(); lowerKListAcc(listTerm, items); return items; }
private void lowerKListAcc(Term term, List<Term> items) { if (term instanceof TermCons) { TermCons cons = (TermCons) term; if (cons.production().klabel().isDefined()) { String labelName = cons.production().klabel().get().name(); if (labelName.equals("#KList")) { assert cons.items().size() == 2; lowerKListAcc(cons.get(0), items); lowerKListAcc(cons.get(1), items); return; } else if (labelName.equals("#EmptyKList")) { return; } } } items.add(term); } }