I am currently using the Alloy api in my project, and I need to display A4Solutions.I can do that easily with the vizualiser Alloy provides (vizGUI) , but it is a bit too limited for my purpose. So I am willing to generate my own graphs ( using any other graph api ) from an A4Solution objects.
I was able to get the Atoms without any problems (that was pretty straight forward ) but I can't really see how to retrieve the relations between those atoms.
I looked online for some example about how to parse an A4Solution, but found nothing unfortunately.
Relations, or fields, you can retrieve from sigs, and then you can evaluate them to obtains concrete atoms, something like this:
A4Solution sol = ...;
SafeList<Sig> sigs = sol.getAllReachableSigs();
for (Sig sig : sigs) {
SafeList<Field> fields = sig.getFields();
for (Field field : fields) {
A4TupleSet ts = (A4TupleSet)(sol.eval(field));
for(A4Tuple t: ts)
for(int i=0; i<t.arity(); i++)
t.atom(i);
}
}
来源:https://stackoverflow.com/questions/15950997/going-through-an-a4solution