eval()无法正常工作

时间:2013-12-05 14:38:06

标签: alloy

我在尝试评估a4solution中的谓词时遇到以下错误:

  

第9行第2列的/ some / path中的致命错误:字段“字段   (A / Attribute&lt ;: type)“在期间未绑定到合法值   翻译。

以下是错误来源的代码:

for(ExprVar a : solution.getAllAtoms()){    
    // additional checks are here to assure that a is of an "appropriate type"
     solution.eval(predicate.call(a));
}

我自己徒劳地尝试解决这个问题,我从这个来源http://code.google.com/p/alloy4eclipse/issues/detail?id=86读到,从文件中读取解决方案的方式可能会导致这个问题。 但消息来源没有提供进一步的细节。

我创建了我的解决方案对象,如下所示:

        XMLNode xml = new XMLNode(new StringReader(source.getFileContent()));
        this.solution = A4SolutionReader.read(new ArrayList<Sig>(), xml); 

感谢您的支持

1 个答案:

答案 0 :(得分:3)

问题是要评估的表达式(predicate.call(a))是从一个CompModule对象(即从那里获取predicate函数)中得到的,而解决方案对象是针对该对象的表达式被评估,不是从同一个CompModule获得,而是从文件中读取。

通常,在从xml文件中读取解决方案时,为了安全起见,建议从该xml文件重新读取所有,例如

XMLNode xmlNode = new XMLNode(new File("my_solution.xml"));
String alloySourceFilename = xmlNode.iterator().next().getAttribute("filename");
Module module = CompUtil.parseEverything_fromFile(rep, null, alloySourceFilename);
A4Solution ans = A4SolutionReader.read(module.getAllReachableSigs(), xmlNode);

在某些情况下,只需将sig从原始CompModule传递给重构的解决方案即可:

XMLNode xmlNode = new XMLNode(new File("my_solution.xml"));
A4Solution ans = A4SolutionReader.read(originalModule.getAllReachableSigs(), xmlNode);