문제

내가 사용하려고 두 가지 조건자(예를 들어,methodsWiThSameParameters 및 methodsWiThSameReturn)에서 또 다른 하나는(i.echeckOverriding)하지만 나는 다음과 같은 오류가 나타납니다."없는 명령을 실행하는".어떤 clues?도 함수를 사용 하지만 성공 없이,하나 때문에 구문을 하거나 기능에 반환하지 않는 부울 값입니다.

그들은 그들의 일부로 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) 
}

귀하의 답변 주셔서 감사합니다,씨 C.M.Sperberg-맥퀸,하지만 제가 생각했을 충분히 명확하지 않다.

나의 술어,말 checkOverriding,호출되고 있는지에서 사실은 다음과 같다:

fact chackJavaWellFormednessRules{
    checkOverriding[]
}

따라서,저는 계속 이해하지는 오류:"없는 명령을 실행하는".

도움이 되었습니까?

해결책

당신이 정의한 조건자;그들은 순수하게 선언하는 의미와 그들이 될 것입니다 사실에는 일부의 하위 집합의 인스턴스 모델 및 거짓에서 보완한 하위 집합.

당신이 원하는 분석기는 아무것도하지 마십시오,당신이 그것을 줄 필요가 있는 지시;이 교육을 검색하의 인스턴스 조건자 run.그래서 당신이 원하는 무언가를 말

run methodsWithSameParameters for 3

run methodsWithSameParameters for 5
run methodsWithSameReturn for 5

참고할 수 있는 하나 이상의 지시에 합금의 모델분석기는 말할 수 있습는 그것을 실행합니다.


[부칙]

합금 분석에 관해서는 키워드 runcheck (그리고 그들만)'으로 명령'.귀하의 설명에서,그 소리에 매우 많지 않는 경우에 있는 모든 항목에 해당 키워드 모델이다.

만약 당신이해야 할 모든 당신은 어떤 경우 합금의 모델(는지 확인하는 모델은 자기 모순),그 다음 가장 간단한 방법은 무언가를 추가하기 위해 다음과 같 모델:

pred show {}
run show for 3

또,이미 있는 경우 라는 조건자할 수 있게 할 수 있습니다 추가 run 명령에 대한 조건자:

run checkOverriding 

그러나 절을 모델로 시작하는 중 runcheck, 지 않는'명령에서는 모델입니다.

당신은 당신이 정의한 조건자(checkOverriding 다)및 그 지정에 사는 조건자가 항상 만족하고 있습니다.이 금액을 말하는 조건자 checkOverriding 항상 진실하(다만 있을 뿐만 아니라 수행함으로써 checkOverriding 사실 대신 조건자),그러나 그것은 순전히 선언하는 의미,그리고로 계산하지 않습니다"명령".하려는 경우 합금을 찾아의 인스턴스 조건자용해야 합니다 run 명령하려는 경우 합금을 찾아 반례에 대한 주장을 사용해야 합니다 check 명령입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top