이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
김은상 손님
|
올려짐: 2006년5월30일 11:30 주제: 숙제 질문입니다. |
|
|
진민식 씀: |
2. C-- 의 semantics에 의하면 주소에 대해서는 연산이 정의되어 있지 않습니다. 그리고 정수값을 address로도 사용할 수 없습니다.
이 경우는 runtime error가 될 것 입니다.
분석기는 이러한 경우에도 프로그램을 안전하게 분석해야 할 것 입니다.
예를 들어 if문의 한 쪽 branch에는 x := 1; *x := 1라는 command가
있더라도 다른쪽 branch의 실행에 대한 분석은 (다른 쪽 brach의 command가 semantics를 자 따르고 있다면) 정확히 이루어 져야 하고 if 문의 다음 command 까지 계속 분석 할 수 있어야 할 것 입니다. |
라고 하셨는데요. 분기문에서 한쪽이 에러가 난 경우는 다른쪽이 정상적으로 실행될 수 있으니 계속 분석할 수 있어야 하는 건 이해가 되는데요.
분기문이 아닌 곳에서 명백하게 에러가 발생한 경우에는 끝까지 분석을 안하고
그 위치에서 종료를 해도 되는지요?
예를 들면,
x=1;
y=*x; // error.
z=x+y;
w=z+1;
....
이런 코드가 있다면 error가 발생한 곳에서 종료해도 되는지요?
error를 출력하고 계속 분석을 해야 하는지요? |
|
위로 |
|
|
정우성
가입: 2006년 5월 6일 올린 글: 8
|
올려짐: 2006년5월30일 12:09 주제: Re: 숙제 질문입니다. |
|
|
김은상 씀: |
진민식 씀: |
2. C-- 의 semantics에 의하면 주소에 대해서는 연산이 정의되어 있지 않습니다. 그리고 정수값을 address로도 사용할 수 없습니다.
이 경우는 runtime error가 될 것 입니다.
분석기는 이러한 경우에도 프로그램을 안전하게 분석해야 할 것 입니다.
예를 들어 if문의 한 쪽 branch에는 x := 1; *x := 1라는 command가
있더라도 다른쪽 branch의 실행에 대한 분석은 (다른 쪽 brach의 command가 semantics를 자 따르고 있다면) 정확히 이루어 져야 하고 if 문의 다음 command 까지 계속 분석 할 수 있어야 할 것 입니다. |
라고 하셨는데요. 분기문에서 한쪽이 에러가 난 경우는 다른쪽이 정상적으로 실행될 수 있으니 계속 분석할 수 있어야 하는 건 이해가 되는데요.
분기문이 아닌 곳에서 명백하게 에러가 발생한 경우에는 끝까지 분석을 안하고
그 위치에서 종료를 해도 되는지요?
예를 들면,
x=1;
y=*x; // error.
z=x+y;
w=z+1;
....
이런 코드가 있다면 error가 발생한 곳에서 종료해도 되는지요?
error를 출력하고 계속 분석을 해야 하는지요? |
저는 error를 출력하고 계속 분석하는 것으로 이해를 했습니다.
이 경우 y의 범위를 [-oo,oo]로 가정 해주는 것으로 진행할 생각입니다. (안전한 분석을 위해 ) 제 생각이 맞는지는 모르겠습니다.
첨에 예외처리를 일부만 하며 진행해서 그런지... 에러 잡고, 계속 진행시키도록 하는게 쉽지 않네요 T_T |
|
위로 |
|
|
진민식
가입: 2006년 3월 21일 올린 글: 67
|
올려짐: 2006년5월30일 14:45 주제: |
|
|
인용: | 이런 코드가 있다면 error가 발생한 곳에서 종료해도 되는지요?
error를 출력하고 계속 분석을 해야 하는지요? |
runtime error가 발생한 곳에서 분석기가 종료하게 되면,
사용하기 불편한 분석기가 될 것 입니다.
보통 분석기는 회사의 QA팀에서 사용하는데,
source 상의 error가 고쳐질 때 까지 이 후의
코드를 분석할 수 없으면 상당히 불편하겠지요.
error message를 출력하는 것보다는 design에서
위와 같은 상황을 고려하여 계속 분석을 하지만,
안전하게 분석하는 분석기를 design하면 될 것 같습니다 |
|
위로 |
|
|
윤주영
가입: 2006년 5월 6일 올린 글: 5
|
올려짐: 2006년5월30일 18:35 주제: |
|
|
에러를 고려하여 분석한다는건 어떤 의미인가요?
예를들어 에러가 발생하는 명령은 없었던 것으로 간주하고 진행하라는 의미인가요?
만약 if 문의 조건에 잘못된 식이 있다면 이경우는 if문을 아예 무시해야할지, 아니면 top으로 간주하여 두 방향 모두 진행해야할지도 애매하군요.
그리고 추가질문,
if나 while에서는 실행되지 않는 코드가 존재합니다.
어러한 코드를 파악할 수 있다면 해당 코드에 대한 분석은 하지 않는것이 옳을까요, 아니면 empty memory로부터 분석을 수행하는게 옳을까요? |
|
위로 |
|
|
진민식
가입: 2006년 3월 21일 올린 글: 67
|
올려짐: 2006년5월30일 19:46 주제: |
|
|
인용: | 에러를 고려하여 분석한다는건 어떤 의미인가요?
예를들어 에러가 발생하는 명령은 없었던 것으로 간주하고 진행하라는 의미인가요?
만약 if 문의 조건에 잘못된 식이 있다면 이경우는 if문을 아예 무시해야할지, 아니면 top으로 간주하여 두 방향 모두 진행해야할지도 애매하군요. |
이 경우 분석기를 사용하는 입장에서 생각해보시고 좋은 방향으로
정하시면 될 것 같습니다.(극단적으로는 분석을 멈추는 것에서 부터,
위의 경우처럼, top으로 간주하고 두 방향 모두 진행하는 경우까지
여러 방법이 있을 것 입니다.)
인용: | 그리고 추가질문,
if나 while에서는 실행되지 않는 코드가 존재합니다.
어러한 코드를 파악할 수 있다면 해당 코드에 대한 분석은 하지 않는것이 옳을까요, 아니면 empty memory로부터 분석을 수행하는게 옳을까요? |
분석기의 목표는 sound하면서 정확한 분석기를 만드는 것입니다.
if 같은 곳에서 한쪽으로 진행되지 않는 다는 것을 알 수 있으면,
그 path 로는 분석을 하지 않는 것이 sound 하면서 가장
정확한 분석이 될 것 같습니다. |
|
위로 |
|
|
|