解析包含String中的原子的表达式

时间:2013-12-13 13:17:27

标签: alloy

方法 CompUtil.parseOneExpression_fromString 会出现以下错误: 当解析的字符串包含表达式时,无法找到名称“Atom $ 0” 直接包含原子的标签。

这是可以理解的,因为单独的原子不是直接在模块级别定义,而是在实例查找过程中“生成”。

BUT!可以使用随合金可视化器一起使用的控制台评估程序直接评估包含原子的表达式。

用于在解决方案中评估的API中的方法是什么,包含原子的表达式。

导致前面提到的错误的代码示例:

Expr e=CompUtil.parseOneExpression_fromString(module, "Atom$0.field"); 
solution.eval(e); 

1 个答案:

答案 0 :(得分:3)

您的示例中的parseOneExpression_fromString调用失败,因为您无法真正期望能够在module对象中找到原子名称(它仅代表您的模型,并且对任何解决方案一无所知)那个模型)。获得解决方案后,可以将所有atom和skolem名称添加到模块对象中,然后就可以解析包含原子名称的表达式。

module = CompUtil.parseEverything_fromFile(...);
solution = A4SolutionReader.read(module.getAllReachableSigs(), ...);
for(ExprVar a:solution.getAllAtoms())   { module.addGlobal(a.label, a); }
for(ExprVar a:solution.getAllSkolems()) { module.addGlobal(a.label, a); }