public String getAttr(String attribute) { return productionAttributes.getOptional(attribute).orElse(null); }
public static Pair<Integer, Integer> getExponentAndSignificand(Att t) { String exponent = t.getOptional(Attribute.EXPONENT_KEY).orElse(null); String significand = t.getOptional(Attribute.SIGNIFICAND_KEY).orElse(null); if (exponent == null || significand == null) { return null; } try { return Pair.of(Integer.parseInt(exponent), Integer.parseInt(significand)); } catch (NumberFormatException e) { throw KEMException.criticalError("Expected variable attributes 'exponent' and 'significand' to " + "be integers, found: " + t.getOptional(Attribute.EXPONENT_KEY).orElse(null) + " " + t.getOptional(Attribute.SIGNIFICAND_KEY).orElse(null), e); } }
public static Integer getBitwidth(Att t) { String bitwidth = t.getOptional(Attribute.BITWIDTH_KEY).orElse(null); if (bitwidth == null) { return null; } try { return Integer.parseInt(bitwidth); } catch (NumberFormatException e) { throw KEMException.criticalError("Expected variable attribute 'bitwidth' to " + "be an integer, found: " + t.getOptional("bitwidth").orElse(null), e); } }
private List<Integer> getProjectionAtt(Att productionAttributes) { Optional<String> proj = productionAttributes.getOptional(Attribute.PROJECTION_KEY); if (proj.isPresent()) { String projAtt = proj.get(); if (projAtt.isEmpty()) { return Arrays.asList(0,1,2); } else { return Arrays.stream(proj.get().split(",")).map(s -> Integer.valueOf(s.trim())).collect(Collectors.toList()); } } else { return null; } }
public Optional<Location> location() { return this.att().getOptional(Location.class); }
public Optional<Source> source() { return this.att().getOptional(Source.class); }
public static KEMException compilerError(String message, K node) { return create(ExceptionType.ERROR, KExceptionGroup.COMPILER, message, null, node.att().getOptional(Location.class).orElse(null), node.att().getOptional(Source.class).orElse(null)); }
public static KEMException criticalError(String message, Throwable e, K node) { return create(ExceptionType.ERROR, KExceptionGroup.CRITICAL, message, e, node.att().getOptional(Location.class).orElse(null), node.att().getOptional(Source.class).orElse(null)); }
public static KEMException criticalError(String message, Sentence node) { return create(ExceptionType.ERROR, KExceptionGroup.CRITICAL, message, null, node.att().getOptional(Location.class).orElse(null), node.att().getOptional(Source.class).orElse(null)); }
public static KEMException compilerError(String message, Sentence node) { return create(ExceptionType.ERROR, KExceptionGroup.COMPILER, message, null, node.att().getOptional("Location", Location.class).orElse(null), node.att().getOptional("Source", Source.class).orElse(null)); }
public static KEMException criticalError(String message, K node) { return create(ExceptionType.ERROR, KExceptionGroup.CRITICAL, message, null, node.att().getOptional(Location.class).orElse(null), node.att().getOptional(Source.class).orElse(null)); }
public static KEMException internalError(String message, K node) { return create(ExceptionType.ERROR, KExceptionGroup.INTERNAL, message, null, node.att().getOptional(Location.class).orElse(null), node.att().getOptional(Source.class).orElse(null)); }
/** * Searches for and retrieves (if found) a binder map for this label * See {@link org.kframework.kil.Production#getBinderMap()} * * @return the binder map for this label (or {@code null} if no binder map was defined. */ public Multimap<Integer, Integer> getBinderMap() { if (isBinder()) { Multimap<Integer, Integer> binder = productionAttributes.getOptional("binder", Multimap.class).orElse(null); assert signatures.stream().map(s -> s.parameters().size()).distinct().count() == 1; return binder == null ? ImmutableMultimap.of(0, signatures.iterator().next().parameters().size() - 1) : binder; } else { return null; } }
@Override public void apply(KVariable k) { sb.append("Var"); convert(k.name()); sb.append(":"); convert(k.att().getOptional(Sort.class).orElse(Sorts.K()), false); }
public static String getSortOfVar(KVariable k, VarInfo vars) { if (vars.vars.containsKey(k)) { String varName = vars.vars.get(k).iterator().next(); if (vars.listVars.containsKey(varName)) { return vars.listVars.get(varName).name(); } } if (k.att().contains("cellSort")) { return Sorts.K().toString(); } return k.att().getOptional(Sort.class).orElse(Sorts.K()).toString(); }
private Set<Sort> getSmtPreludeSorts(Module module) { ImmutableSet.Builder<Sort> builder = ImmutableSet.builder(); for (org.kframework.definition.SyntaxSort decl : iterable(module.sortDeclarations())) { Optional<?> isSmtPreludeSort = decl.att().getOptional(Attribute.SMT_PRELUDE_KEY); if (isSmtPreludeSort.isPresent()) { builder.add(Sort.of(decl.sort())); } } return builder.build(); }
@Override public void apply(KToken k) { sb.append("\\dv{"); convert(k.sort(), false); sb.append("}("); if (module.sortAttributesFor().get(k.sort()).getOrElse(() -> Att.empty()).getOptional("hook").orElse("").equals("STRING.String")) { sb.append(k.s()); } else { sb.append(StringUtil.enquoteKString(k.s())); } sb.append(")"); }
public K apply(KVariable var) { if (var.name(). equals("HOLE") && transitions.stream().noneMatch(att::contains)) { return KVariable(var.name(), var.att().add(Sort.class, Outer.parseSort(att.getOptional("result").orElse("KResult")))); } return super.apply(var); } }.apply(body);
private Production funProd(KLabel fun, K k) { List<ProductionItem> pis = new ArrayList<>(); K left = RewriteToTop.toLeft(k); K right = RewriteToTop.toRight(k); pis.add(Terminal(fun.name())); pis.add(Terminal("(")); pis.add(NonTerminal(sort(left))); for (KVariable var : closure(k)) { pis.add(Terminal(",")); pis.add(NonTerminal(var.att().getOptional(Sort.class).orElse(Sorts.K()))); } pis.add(Terminal(")")); return Production(fun, sort(right), immutable(pis), Att().add("function")); }
@Override public K apply(KAs k) { K res = apply(k.pattern()); KVariable var = (KVariable) k.alias(); if (!(res instanceof KSequence) && var.att().getOptional(Sort.class).orElse(Sorts.K()).equals(Sorts.K())) { res = KSequence(res); } return KAs(res, k.alias(), k.att()); } }.apply(term);