All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tmp.EvaluatorExample Maven / Gradle / Ivy

package tmp;

import java.io.File;

import edu.mit.csail.sdg.alloy4.A4Reporter;
import edu.mit.csail.sdg.alloy4.XMLNode;
import edu.mit.csail.sdg.alloy4compiler.ast.Command;
import edu.mit.csail.sdg.alloy4compiler.ast.Expr;
import edu.mit.csail.sdg.alloy4compiler.ast.Module;
import edu.mit.csail.sdg.alloy4compiler.parser.CompUtil;
import edu.mit.csail.sdg.alloy4compiler.translator.A4Options;
import edu.mit.csail.sdg.alloy4compiler.translator.A4Solution;
import edu.mit.csail.sdg.alloy4compiler.translator.A4SolutionReader;
import edu.mit.csail.sdg.alloy4compiler.translator.TranslateAlloyToKodkod;

public class EvaluatorExample {

    private static String model = "sig Point {} \n" + "\n" + "run { #Point > 1 } for 3 but 3 Int";
    private static String outputfilename = "/tmp/myissue.xml";

    public static void main(String[] args) throws Exception {
        A4Reporter rep = new A4Reporter();
        File tmpAls = CompUtil.flushModelToFile(model, null);
        {
            Module world = CompUtil.parseEverything_fromString(rep, model);
            A4Options opt = new A4Options();
            opt.originalFilename = tmpAls.getAbsolutePath();
            opt.solver = A4Options.SatSolver.SAT4J;
            Command cmd = world.getAllCommands().get(0);
            A4Solution sol = TranslateAlloyToKodkod.execute_commandFromBook(rep, world.getAllReachableSigs(), cmd, opt);
            assert sol.satisfiable();
            sol.writeXML(outputfilename);

            // eval with existing A4Solution    
            Expr e = CompUtil.parseOneExpression_fromString(world, "univ");
            System.out.println(sol.eval(e));
            e = CompUtil.parseOneExpression_fromString(world, "Point");
            System.out.println(sol.eval(e));
        }
        // reload everything from files
        {
            XMLNode xmlNode = new XMLNode(new File(outputfilename));
            String alloySourceFilename = xmlNode.iterator().next().getAttribute("filename");
            Module ansWorld = CompUtil.parseEverything_fromFile(rep, null, alloySourceFilename);
            A4Solution ans = A4SolutionReader.read(ansWorld.getAllReachableSigs(), xmlNode);
            
            Expr e = CompUtil.parseOneExpression_fromString(ansWorld, "univ");
            System.out.println(ans.eval(e));
            e = CompUtil.parseOneExpression_fromString(ansWorld, "Point");
            System.out.println(ans.eval(e));
        }
    }


//    private static String model =
//    		"sig Point {} \n" +
//    		"\n" +
//    		"run { #Point > 1 } for 3 but 3 Int";
//    
//    public static void main(String[] args) throws Exception {
//        A4Reporter rep = new A4Reporter();
//        File tmpAls = File.createTempFile("alloyEvaluator", ".als");
//        tmpAls.deleteOnExit();
//        flushModelToFile(tmpAls);
//        Module world = CompUtil.parseEverything_fromFile(rep, null, tmpAls.getAbsolutePath());
//        A4Options opt = new A4Options();
//        opt.originalFilename = tmpAls.getAbsolutePath();
//        opt.solver = A4Options.SatSolver.SAT4J;
//        Command cmd = world.getAllCommands().get(0);
//        A4Solution sol = TranslateAlloyToKodkod.execute_commandFromBook(rep, world.getAllReachableSigs(), cmd, opt);
//        assert sol.satisfiable();
//        
//        // eval: univ
//        Expr e = CompUtil.parseOneExpression_fromString(world, "univ");        
//        System.out.println(sol.eval(e));
//        
//        // eval: Point
//        e = CompUtil.parseOneExpression_fromString(world, "Point");        
//        System.out.println(sol.eval(e));
//    }
//
//    private static void flushModelToFile(File tmpAls) throws IOException {
//        BufferedOutputStream bos = null;
//        try {
//            bos = new BufferedOutputStream(new FileOutputStream(tmpAls));
//            bos.write(model.getBytes());
//            bos.flush();
//        } finally {
//            if (bos != null) bos.close();
//        }
//    }
    
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy