Alloy中的算术运算

时间:2014-05-24 11:44:55

标签: alloy

我想在合金中使用算术运算函数,如果将它们定义为下面的乐趣是一个好主意吗?

sig expre{
    add: expre -> expre,
    sub: expre -> expre,
    mult: expre -> expre,
    div: expre -> expre,
    mod: expre -> expre,
    a: AttributeNames,
    val: Int
}

fun Exp(e: expre): Int{
     plus[e.val, e.val] + 
     minus[e.val, e.val] +
     mul[e.val, e.val] +
     div[e.val, e.val] +
     rem[e.val, e.val] +
     Exp[e]
}

1 个答案:

答案 0 :(得分:0)

不确定您要做什么,但看起来您可能正在寻找模拟算术表达式的语法以及评估函数。如果是这样,你就是在正确的轨道上,而不是将表达式类型定义为单个签名的字段,你可能想要将它们定义为子签名:

abstract sig Expr { val: Int }
abstract sig UnaryExpr extends Expr { target: Expr }
abstract sig BinaryExpr extends Expr { left, right: Expr }
sig PlusExpr extends BinaryExpr { } {val = plus[left.@val, right.@val] }  
sig Literal extends Expr { }