게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

benchmark 예제에서... 질문입니다.

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4541.664A Program Analysis (Spring 2006)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
정우성



가입: 2006년 5월 6일
올린 글: 8

올리기올려짐: 2006년5월28일 12:32    주제: benchmark 예제에서... 질문입니다. 인용과 함께 답변

//5 에서
/* pointer operations */
// 5
z := 1;
x := &x;
t := *z + 1;

if *z < 0 then
*z := 3
else
*z := 2
end;

인데요. z:=1 을 넣은 후에... t:=*z+1 을 하면 t에는 어떤값이 들어가게 되는 것인가요? z:=1; 로 값을 준 뒤에 *z 하면 Error 발생시키는 것이 맞는지요?
주소는 Loc = Var 로 되어 있어서요.


//6 에서도 a에 대해 그렇구요
// 6
k := 0;
a := k;
while k < 100 do
*a := *a + 1;
k := k + 1
end;
...

//7 에서는...
// 7
t := readint;
if t < 10 then
x := &a
else
x := 0
end;
*x := *x + 1;
x := x + 1;

*x 에 대한 연산 후에 x:=x+1; 을 하고 있는데, 그럼 주소의 경우도 연산이 가능해야하는 것인지요?

그리고, if 문 등에 따라서 pointer가 가리키는 주소가 여러가지 경우가 생길 수 있는데요. 예를 들어 x=&a 또는 x=&b 또는 x=&c ... 이러한 다양한 경우의 주소 지정에 대해 *x가 다양한 범위를 가질 수 있을 것 같은데요. 그래서, 결국 y=*x 이런식으로 쓰인다면, x의 가능한 모든 주소들에 대해서도 처리를 해서 y의 범위를 구해야 하는 것이겠죠 --;?
위로
사용자 정보 보기 비밀 메시지 보내기
진민식



가입: 2006년 3월 21일
올린 글: 67

올리기올려짐: 2006년5월28일 21:23    주제: 인용과 함께 답변

1.
인용:
그리고, if 문 등에 따라서 pointer가 가리키는 주소가 여러가지 경우가 생길 수 있는데요. 예를 들어 x=&a 또는 x=&b 또는 x=&c ... 이러한 다양한 경우의 주소 지정에 대해 *x가 다양한 범위를 가질 수 있을 것 같은데요. 그래서, 결국 y=*x 이런식으로 쓰인다면, x의 가능한 모든 주소들에 대해서도 처리를 해서 y의 범위를 구해야 하는 것이겠죠 --;?


네 안전한 분석기를 만들기 위해서는 위와 같이 해야 할 것 입니다.

2. C-- 의 semantics에 의하면 주소에 대해서는 연산이 정의되어 있지 않습니다. 그리고 정수값을 address로도 사용할 수 없습니다.
이 경우는 runtime error가 될 것 입니다.

분석기는 이러한 경우에도 프로그램을 안전하게 분석해야 할 것 입니다.
예를 들어 if문의 한 쪽 branch에는 x := 1; *x := 1라는 command가
있더라도 다른쪽 branch의 실행에 대한 분석은 (다른 쪽 brach의 command가 semantics를 자 따르고 있다면) 정확히 이루어 져야 하고 if 문의 다음 command 까지 계속 분석 할 수 있어야 할 것 입니다.
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기
김진혁



가입: 2006년 5월 5일
올린 글: 11

올리기올려짐: 2006년5월28일 23:03    주제: 그럼? 인용과 함께 답변

[quote="진민식"]1.
[quote]그리고, if 문 등에 따라서 pointer가 가리키는 주소가 여러가지 경우가 생길 수 있는데요. 예를 들어 x=&a 또는 x=&b 또는 x=&c ... 이러한 다양한 경우의 주소 지정에 대해 *x가 다양한 범위를 가질 수 있을 것 같은데요. 그래서, 결국 y=*x 이런식으로 쓰인다면, x의 가능한 모든 주소들에 대해서도 처리를 해서 y의 범위를 구해야 하는 것이겠죠 --;?[/quote]

네 안전한 분석기를 만들기 위해서는 위와 같이 해야 할 것 입니다.
[/quote]
그럼 *x:=1 이런식으로 하면 x가 가리키는 변수인 a, b, c가 모두 [1,1]이 되는건가요? 그럼 뭔가 이상해질듯도 한데... 아닌가 생각하면 생각할수록 복잡해진다는 Orz

덧. 전 왜 인용이 안되죠? ㅡㅠ
위로
사용자 정보 보기 비밀 메시지 보내기
손님






올리기올려짐: 2006년5월28일 23:28    주제: 인용과 함께 답변

인용:
그럼 *x:=1 이런식으로 하면 x가 가리키는 변수인 a, b, c가 모두 [1,1]이 되는건가요? 그럼 뭔가 이상해질듯도 한데... 아닌가 생각하면 생각할수록 복잡해진다는 Orz

수업시간에 했던 C--보다 더 간단한 언어에서의
abstract semantics정의에서 assign문에 대한 것을 보면,
C x := E M = M{x -> VEM}
이라고 정의했었습니다.
이는 입력 메모리에서 x에 해당하는 값을 VEM으로 바꾸는 것입니다.
({x->1} 에서 {x->2}로 바뀌듯이)

하지만 언어에 포인터가 포함되게 되면,
*x가 가리키는 주소가 여러개가 있을 수 있습니다.
이 경우 x가 가리키는 주소가 여러개 일 경우 위의 경우처럼
바꾸게 되면 안전하지(sound)않을 수 있습니다.

이럴 경우는 안전하게, 그리고 최대한 정확하게 요약을 하시면 됩니다.

아래의 예를 보고 생각해보시면 될 듯 합니다.

코드:
x := 1;
y := 2;
if readint > 0 then
    z := &x
else
    z := &y
end
*z := 3


ps. 인용이나 코드 를 넣고 싶으시면 본문을 작성하고
원하는 부분을 마우스로 선택해서 메시지를 작성하는
곳에 있는 queot, code 버튼을 누르시면 됩니다.
위로
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4541.664A Program Analysis (Spring 2006) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay