0

別の述語 (つまり、checkOverriding) から 2 つの述語 (たとえば、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[]
}

したがって、「実行するコマンドがありません」というエラーを理解していません。

4

1 に答える 1