@Override public Definition shallowCopy() { return new Definition(this); }
/** * Takes a definition in e-kore textual format and a main module name, and returns the KORE * representation of that module. Current implementation uses JavaCC and goes through KIL. * * @param definitionText textual representation of the modules. * @param mainModule main module name. * @return KORE representation of the main module. */ public static Module parseMainModuleOuterSyntax(String definitionText, Source source, String mainModule) { Definition def = new Definition(); def.setItems(Outer.parse(source, definitionText, null)); def.setMainModule(mainModule); def.setMainSyntaxModule(mainModule); Context context = new Context(); new CollectProductionsVisitor(false, context).visit(def); KILtoKORE kilToKore = new KILtoKORE(context); return kilToKore.apply(def).getModule(mainModule).get(); }
public org.kframework.definition.Definition apply(Definition d) { // Set<org.kframework.definition.Require> requires = d.getItems().stream() // .filter(i -> i instanceof Require).map(i -> apply((Require) i)) // .collect(Collectors.toSet()); Set<Module> kilModules = d.getItems().stream().filter(i -> i instanceof Module) .map(mod -> (Module) mod).collect(Collectors.toSet()); Module mainModule = kilModules.stream() .filter(mod -> mod.getName().equals(d.getMainModule())).findFirst().get(); HashMap<String, org.kframework.definition.Module> koreModules = new HashMap<>(); apply(mainModule, kilModules, koreModules); // Set<org.kframework.definition.Module> modules = kilModules.map(i -> // apply((Module) i)) // .collect(Collectors.toSet()); // TODO: handle LiterateDefinitionComments return Definition( koreModules.get(mainModule.getName()), immutable(new HashSet<>(koreModules.values())), Att()); }
public Set<Module> loadModules( Set<Module> previousModules, String definitionText, Source source, File currentDirectory, List<File> lookupDirectories, Set<File> requiredFiles, boolean kore) { List<org.kframework.kil.Module> kilModules = slurp(definitionText, source, currentDirectory, lookupDirectories, requiredFiles); Definition def = new Definition(); def.setItems((List<DefinitionItem>) (Object) kilModules); Context context = new Context(); new CollectProductionsVisitor(kore, context).visit(def); KILtoKORE kilToKore = new KILtoKORE(context, false, kore); HashMap<String, Module> koreModules = new HashMap<>(); koreModules.putAll(previousModules.stream().collect(Collectors.toMap(Module::name, m -> m))); HashSet<org.kframework.kil.Module> kilModulesSet = new HashSet<>(kilModules); return kilModules.stream().map(m -> kilToKore.apply(m, kilModulesSet, koreModules)).flatMap(m -> Stream.concat(Stream.of(m), Stream.of(koreModules.get(m.name() + "$SYNTAX")))).collect(Collectors.toSet()); }
public void visit(Definition def) { def.getItems().forEach(di -> { if (di instanceof Module) visit((Module)di); }); } }