/** * 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()); }
private static Sentence markRegularRules(Definition d, ConfigurationInfoFromModule configInfo, Sentence s, String att) { if (s instanceof org.kframework.definition.Rule) { org.kframework.definition.Rule r = (org.kframework.definition.Rule) s; if (r.body() instanceof KApply) { KLabel klabel = ((KApply) r.body()).klabel(); if (d.mainModule().sortFor().contains(klabel) //is false for rules in specification modules not part of semantics && d.mainModule().sortFor().apply(klabel).equals(configInfo.topCell())) { return Rule.apply(r.body(), r.requires(), r.ensures(), r.att().add(att)); } } } return s; }
ParseInModule mod = RuleGrammarGenerator.getCombinedGrammar(gen.getConfigGrammar(m), true); ConfigurationInfoFromModule configInfo = new ConfigurationInfoFromModule(m); Sort topCellSort = configInfo.topCell(); KLabel topCellLabel = configInfo.getCellLabel(topCellSort); Production prod = m.productionsFor().apply(topCellLabel).head();