我正在尝试使用另一个谓词(即 checkOverriding)的两个谓词(例如,methodsWiThSameParameters 和 methodsWiThSameReturn),但我收到以下错误:“没有要执行的命令”。有什么线索吗?我也尝试使用函数但没有成功,无论是由于语法还是函数不返回布尔值。
正如我在之前的一些问题中所评论的,它们是 Alloy 中指定的 java 元模型的一部分。
pred checkOverriding[]{
//check accessibility of methods involved in overriding
no c1, c2: Class {
c1=c2.^extend
some m1, m2:Method |
m1 in c1.methods && m2 in c2.methods && m1.id = m2.id
&& methodsWiThSameParameters[m1, m2] && methodsWiThSameReturn[m1, m2] &&
( (m1.acc = protected && (m2.acc = private_ || #(m2.acc) = 0 )) ||
(m1.acc = public && (m2.acc != public || #(m2.acc) = 0 )) ||
(#(m1.acc) = 0 && m2.acc != private_ )
)
}
}
pred methodsWiThSameParameters [first,second:Method]{
m1.param=m2.param || (#(m1.param)=0 && #(m2.param)=0)
}
pred methodsWiThSameReturn [first, second:Method]{
m1.return=m2.return || (#(m1.return)=0 && #(m2.return)=0)
}
感谢您的回复,CM Sperberg-McQueen 先生,但我认为我的问题不够清楚。
我的谓词,比如 checkOverriding,是从这样的事实中调用的:
fact chackJavaWellFormednessRules{
checkOverriding[]
}
因此,我继续不理解错误:“没有要执行的命令”。