I need to generate random .xml instances from an .als in my program. I managed to do that by running alloy in background (invisible JFrame) and calling the doOpen, doExecuteLatest and doShowLatest functions. But having to wait alloy to start every time I run my code is a pain. I think it would be more efficient if I simply used the alloy code section that does this procedure (I imagine that would be kodkod). Does anyone know how to do that? I found alloy's code to be pretty confusing...
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
You can use the Alloy API. Generating an instance and writing it as an XML file can be easily done following those steps:
Read the alloy model from its source file.
model = CompUtil.parseEverything_fromFile(null, null, "yourmodel.als");
Get the command to execute. for example :
Command cmd=model.getAllCommands().get(0);
Execute the model using the command obtained in step 2
A4Solution solution= TranslateAlloyToKodkod.execute_command(null, model.getAllReachableSigs(), cmd, new A4Options());
Write the solution generated in step 3
solution.writeXML("path/to/your.xml");
Examples can be found in the edu.mit.csail.sdg.alloy4whole package of the Alloy jar file