public static java.util.List<UserList> getLists(Set<Sentence> sentences) { Map<Boolean, List<Sentence>> separatedProds = sentences.stream().collect(Collectors.groupingBy(p -> p instanceof Production && p.att().contains(Att.userList()))); Map<Sort, java.util.List<Sentence>> listsMap = separatedProds.getOrDefault(true, new LinkedList<>()) .stream().collect(Collectors.groupingBy(s -> ((Production) s).sort())); ul.attrs = p.att().remove("klabel"); ul.nonEmpty = ul.attrs.get(Att.userList()).equals("+"); ul.childSort = ((NonTerminal) p.items().head()).sort(); ul.pList = p;
public static java.util.List<UserList> getLists(Set<Sentence> sentences) { Map<Boolean, List<Sentence>> separatedProds = sentences.stream().collect(Collectors.groupingBy(p -> p instanceof Production && p.att().contains(Att.userList()))); Map<Sort, java.util.List<Sentence>> listsMap = separatedProds.getOrDefault(true, new LinkedList<>()) .stream().collect(Collectors.groupingBy(s -> ((Production) s).sort())); ul.attrs = p.att().remove("klabel"); ul.nonEmpty = ul.attrs.get(Att.userList()).get().equals("+"); ul.childSort = ((NonTerminal) p.items().head()).sort(); ul.pList = p;
public void applyUserList(Set<org.kframework.definition.Sentence> res, org.kframework.kore.Sort sort, Production p, UserList userList) { // Transform list declarations of the form Es ::= List{E, ","} into something representable in kore org.kframework.kore.Sort elementSort = userList.getSort(); org.kframework.attributes.Att attrs = convertAttributes(p).add(Att.userList(), userList.getListType()); String kilProductionId = "" + System.identityHashCode(p); Att attrsWithKilProductionId = attrs.add(PRODUCTION_ID, kilProductionId); org.kframework.definition.Production prod1, prod3; // Es ::= E "," Es prod1 = Production(KLabel(p.getKLabel(kore)), sort, Seq(NonTerminal(elementSort), Terminal(userList.getSeparator()), NonTerminal(sort)), attrsWithKilProductionId.add("right")); // Es ::= ".Es" prod3 = Production(KLabel(p.getTerminatorKLabel(kore)), sort, Seq(Terminal("." + sort.toString())), attrsWithKilProductionId.remove("format").remove("strict").add("klabel", p.getTerminatorKLabel(false))); res.add(prod1); res.add(prod3); }
res.addAll(prods3.stream().filter(p -> !(p instanceof Production && (p.att().contains(Att.generatedByListSubsorting()) || p.att().contains(Att.userList())))).collect(Collectors.toSet())); parseProds = res;