public SplitThreadsCell(Module m) { collectionFor = ConvertDataStructureToLookup.collectionFor(m); this.m = m; this.info = new LabelInfoFromModule(m); this.configInfo = new ConfigurationInfoFromModule(m); }
public String convertSpecificationModule(Module definition, Module spec) { ConfigurationInfoFromModule configInfo = new ConfigurationInfoFromModule(definition); Sort topCell = configInfo.getRootCell(); sb.append("[]\n"); sb.append("module "); convert(spec.name()); sb.append("\n\n// imports\n"); sb.append("import "); convert(definition.name()); sb.append(" []\n"); sb.append("\n\n// claims\n"); for (Sentence sentence : iterable(spec.sentencesExcept(definition))) { assert sentence instanceof Rule || sentence instanceof ModuleComment : "Unexpected non-rule claim " + sentence.toString(); if (sentence instanceof Rule) { convertRule((Rule) sentence, false, topCell, new HashMap<>(), HashMultimap.create(), true); } } sb.append("endmodule "); convert(new HashMap<>(), spec.att()); sb.append("\n"); return sb.toString(); }
public static Module transformModule(Module mod) { ConfigurationInfoFromModule configInfo = new ConfigurationInfoFromModule(mod); LabelInfo labelInfo = new LabelInfoFromModule(mod); return ModuleTransformer.fromSentenceTransformer( new AddImplicitComputationCell(configInfo, labelInfo), "concretizing configuration").apply(mod); }
private void checkConfigVars(Set<KToken> inputConfigVars, CompiledDefinition compiledDef) { Set<KToken> defConfigVars = mutable(new ConfigurationInfoFromModule(compiledDef.kompiledDefinition.mainModule()).configVars()); for (KToken defConfigVar : defConfigVars) { if (!inputConfigVars.contains(defConfigVar)) { throw KEMException.compilerError("Configuration variable missing: " + defConfigVar.s()); } } for (KToken inputConfigVar : inputConfigVars) { if (!defConfigVars.contains(inputConfigVar)) { if (!inputConfigVar.s().equals("$STDIN") && !inputConfigVar.s().equals("$IO")) { kem.registerCompilerWarning("User specified configuration variable " + inputConfigVar.s() + " which does not exist."); } } } }
private void check(Production p) { if (p.att().contains(Attribute.CELL_KEY)) { for (ProductionItem i : mutable(p.items())) { if (i instanceof NonTerminal) { Sort sort = ((NonTerminal) i).sort(); if (sort.name().endsWith("Cell")) { if (cells.contains(sort)) { Production cell = new ConfigurationInfoFromModule(module).cellProductionsFor().get(sort).get().head(); errors.add(KEMException.compilerError("Cell " + cell.klabel().get() + " found twice in configuration.", p)); } cells.add(sort); } } } } } }
private static Module markRegularRules(Definition d, Module mod) { ConfigurationInfoFromModule configInfo = new ConfigurationInfoFromModule(d.mainModule()); return ModuleTransformer.fromSentenceTransformer(s -> markRegularRules(d, configInfo, s, "specification"), "mark regular rules").apply(mod); }
public static Module transformModule(Module mod) { ConfigurationInfoFromModule configInfo = new ConfigurationInfoFromModule(mod); LabelInfo labelInfo = new LabelInfoFromModule(mod); SortInfo sortInfo = SortInfo.fromModule(mod); return ModuleTransformer.fromSentenceTransformer( new ConcretizeCells(configInfo, labelInfo, sortInfo, mod)::concretize, "concretizing configuration").apply(mod); }
/** * Put a marker on the "regular" (i.e. non function/macro/etc.) rules that we can use later. */ private static Definition markRegularRules(Definition d) { ConfigurationInfoFromModule configInfo = new ConfigurationInfoFromModule(d.mainModule()); return DefinitionTransformer.fromSentenceTransformer((mod, s) -> markRegularRules(d, configInfo, s, Att.topRule()), "mark regular rules").apply(d); }
/** * Executes the Kompile tool. This tool accesses a * * @param definitionFile * @param mainModuleName * @param mainProgramsModuleName * @param programStartSymbol * @return */ public CompiledDefinition run(File definitionFile, String mainModuleName, String mainProgramsModuleName, Function<Definition, Definition> pipeline, Set<String> excludedModuleTags) { Definition parsedDef = parseDefinition(definitionFile, mainModuleName, mainProgramsModuleName, excludedModuleTags); sw.printIntermediate("Parse definition [" + definitionParsing.parsedBubbles.get() + "/" + (definitionParsing.parsedBubbles.get() + definitionParsing.cachedBubbles.get()) + " rules]"); checkDefinition(parsedDef); Definition kompiledDefinition = pipeline.apply(parsedDef); files.saveToKompiled("compiled.txt", kompiledDefinition.toString()); sw.printIntermediate("Apply compile pipeline"); ConfigurationInfoFromModule configInfo = new ConfigurationInfoFromModule(kompiledDefinition.mainModule()); return new CompiledDefinition(kompileOptions, parsedDef, kompiledDefinition, files, kem, configInfo.getDefaultCell(configInfo.topCell()).klabel()); }
public static Definition transformDefinition(Definition input) { ConfigurationInfoFromModule configInfo = new ConfigurationInfoFromModule(input.mainModule()); LabelInfo labelInfo = new LabelInfoFromModule(input.mainModule()); return DefinitionTransformer.fromSentenceTransformer( new AddImplicitComputationCell(configInfo, labelInfo), "concretizing configuration").apply(input); }
private Sentence concretizeSentence(Sentence s, Definition input) { ConfigurationInfoFromModule configInfo = new ConfigurationInfoFromModule(input.mainModule()); LabelInfo labelInfo = new LabelInfoFromModule(input.mainModule()); SortInfo sortInfo = SortInfo.fromModule(input.mainModule()); return new ConcretizeCells(configInfo, labelInfo, sortInfo, input.mainModule()).concretize(s); } }
public static Definition transformDefinition(Definition input) { ConfigurationInfoFromModule configInfo = new ConfigurationInfoFromModule(input.mainModule()); LabelInfo labelInfo = new LabelInfoFromModule(input.mainModule()); SortInfo sortInfo = SortInfo.fromModule(input.mainModule()); return DefinitionTransformer.fromSentenceTransformer( new ConcretizeCells(configInfo, labelInfo, sortInfo, input.mainModule())::concretize, "concretizing configuration" ).apply(input); }
public String convert(boolean heatCoolEq) { ConfigurationInfoFromModule configInfo = new ConfigurationInfoFromModule(module); Sort topCell = configInfo.getRootCell(); String prelude = files.loadFromKBase("include/kore/prelude.kore");
Set<Sentence> parseProds; if (addRuleCells) { ConfigurationInfo cfgInfo = new ConfigurationInfoFromModule(mod); parseProds = Stream.concat(prods.stream(), stream(mod.sentences())).flatMap(s -> { if (s instanceof Production && s.att().contains("cellCollection")) {
@Override public Function<Module, Module> specificationSteps(Definition def) { Module mod = def.mainModule(); ConfigurationInfoFromModule configInfo = new ConfigurationInfoFromModule(mod); LabelInfo labelInfo = new LabelInfoFromModule(mod); SortInfo sortInfo = SortInfo.fromModule(mod); ModuleTransformer resolveAnonVars = ModuleTransformer.fromSentenceTransformer( new ResolveAnonVar()::resolve, "resolving \"_\" vars"); ModuleTransformer resolveSemanticCasts = ModuleTransformer.fromSentenceTransformer( new ResolveSemanticCasts(true)::resolve, "resolving semantic casts"); ModuleTransformer subsortKItem = ModuleTransformer.from(Kompile::subsortKItem, "subsort all sorts to KItem"); ModuleTransformer addImplicitComputationCell = ModuleTransformer.fromSentenceTransformer( new AddImplicitComputationCell(configInfo, labelInfo), "concretizing configuration"); Function1<Module, Module> resolveFreshConstants = d -> ModuleTransformer.from(new ResolveFreshConstants(def, true)::resolve, "resolving !Var variables").apply(d); ModuleTransformer concretizeCells = ModuleTransformer.fromSentenceTransformer( new ConcretizeCells(configInfo, labelInfo, sortInfo, mod)::concretize, "concretizing configuration"); return m -> resolveAnonVars .andThen(resolveSemanticCasts) .andThen(addImplicitComputationCell) .andThen(resolveFreshConstants) .andThen(concretizeCells) .andThen(subsortKItem) .apply(m); }
RuleGrammarGenerator gen = new RuleGrammarGenerator(def); ParseInModule mod = RuleGrammarGenerator.getCombinedGrammar(gen.getConfigGrammar(m), true); ConfigurationInfoFromModule configInfo = new ConfigurationInfoFromModule(m); Sort topCellSort = configInfo.topCell(); KLabel topCellLabel = configInfo.getCellLabel(topCellSort);