|
|
이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
윤주영
가입: 2006년 5월 6일 올린 글: 5
|
올려짐: 2006년5월27일 14:55 주제: HW6 결과물에 대한 질문입니다. |
|
|
4번숙제에서도 헷갈렸던 부분입니다만,
x:=1;
x:=2
위와같은 프로그램이 주어졌다고 하면, 프로그램의 진행상에서는
cmd mem_hat
x:=1 x->[1,1]
x:=2 x->[1,2]
의 메모리 상태만을 가지게 됩니다.
숙제에서 요구하는 것은 위 처럼 실행과정에서 나타나는 메모리 상태만을 표현할 수 있으면 되는것인지, 아니면
cmd mem_hat
x:=1 x->[1,1]
x:=1;x:=2 x->[1,2]
x:=2 x->[2,2]
위처럼 프로그램에서 얻을수 있는 (실제로는 실행불가능한 x:=2와 같은 command를 포함하는) 모든 sub command에 대한 메모리 상태를 표현해야 하는것인지요?
그리고 하나 더, 이번 숙제에서도 readint는 실행시에 직접 입력하는건가요, 아니면 [-infinite, infinite]로 요약해서 하는건가요? |
|
위로 |
|
|
진민식
가입: 2006년 3월 21일 올린 글: 67
|
올려짐: 2006년5월28일 21:15 주제: |
|
|
숙제의 스펙은
각 command에 대해서 그 command가 실행되기
직전의 요약메모리를 모으는 것 입니다.
따라서
x := 1;
x := 2
와 같은 경우는,
seq(x:=1, x:=2)이므로
empty-mem -> sequence command의 직전 상태
empty-mem -> x := 1 command의 직전 상태
x := 1;
{x->[1,1]} -> x := 2 command의 직전 상태
x := 2;
위와 같은 형태가 될 것 입니다.
그리고 참고로
x := 1;
x := 2;
x := 3;
이라는 프로그램이 있으면,
x:= 3 이라는 command의 직전으로
{x -> [1,2]}
라는 메모리가 와도 안전(sound)하기는 합니다.
하지만,
x := 2라는 command에 의해서 x -> 1이라는 결과가 x -> 2인 상태로
바뀌게 되므로,
{x->[2,2]}라는 메모리로 요약하는 것이 '더욱' 정확한 결과가 될 것입니다.
하지만 경우에 따라서는 기존의 메로리에 있는 x의 값을 무시하고
(위의 경우처럼)
새로운 값으로 바꿀 수 없는 경우도 있으니
충분히 생각하시면서 design하시길 바랍니다.
마지막으로 분석기는 어떤 경우에라도 항상 분석을
끝낼 수 있어야 합니다.
이말은 readint라는 외부입력이 있어도 안전하게 분석을
하면서서 끝을 낼 수 있어야 합니다. |
|
위로 |
|
|
김은상 손님
|
올려짐: 2006년5월29일 22:16 주제: |
|
|
진민식 씀: | 숙제의 스펙은
각 command에 대해서 그 command가 실행되기
직전의 요약메모리를 모으는 것 입니다.
따라서
x := 1;
x := 2
와 같은 경우는,
seq(x:=1, x:=2)이므로
empty-mem -> sequence command의 직전 상태
empty-mem -> x := 1 command의 직전 상태
x := 1;
{x->[1,1]} -> x := 2 command의 직전 상태
x := 2;
위와 같은 형태가 될 것 입니다.
|
라고 하셨는데, seq까지 메모리를 일일이 출력할 필요는 없지 않나요?
지난 숙제에서도 당연히 매 커맨드라고 해서, 코드상의 한 커맨드라고
이해하고 처리했는데요.
syntax에 C;C가 있으니 그것까지 출력해야 한다고 하시면 할말 없지만,
사실 전혀 쓸모없는 출력을 내보내려니 찜찜하네요. |
|
위로 |
|
|
김용태 손님
|
올려짐: 2006년5월30일 3:45 주제: 숙제 스펙을 보니, |
|
|
아래 처럼 나와 있던데.
인용: | before executing each command inside P (a table from each command inside
P to the set of abstract memories that has occurred right before executing the
command). |
그럼, 매번 계속 출력하는게 맞는 것 아닌가 싶네요 |
|
위로 |
|
|
손님
|
올려짐: 2006년5월30일 19:00 주제: Re: 숙제 스펙을 보니, |
|
|
김용태 씀: | 아래 처럼 나와 있던데.
인용: | before executing each command inside P (a table from each command inside
P to the set of abstract memories that has occurred right before executing the
command). |
그럼, 매번 계속 출력하는게 맞는 것 아닌가 싶네요 |
스펙은 그렇긴 한데요...
파서에서 파싱을 마치면, seq( C1;C2 ), C1=seq(C1-1;C1-2), C1-1=seq(C1-1-1,C1-1-2)...
이런식으로 seq만 계속 연속되서 나오는 경우가 많습니다.
그래서 seq가 연속으로 많이 나올 경우, 메모리 상태는 전혀 변하지 않았는데, 계속 출력을 해야하나 싶어서 질문을 드린 거구요. |
|
위로 |
|
|
손님
|
올려짐: 2006년5월30일 19:34 주제: Re: 숙제 스펙을 보니, |
|
|
김용태 씀: | 아래 처럼 나와 있던데.
인용: | before executing each command inside P (a table from each command inside
P to the set of abstract memories that has occurred right before executing the
command). |
그럼, 매번 계속 출력하는게 맞는 것 아닌가 싶네요 |
어떻게 출력하라는 것까지 스팩에 나와있나요?
전체 프로그램을 주었을 떄 PGM -> Abstract Memory 인 함수를 리턴하도록 하는 함수를 작성하면 되지 않나요? Pretty Printer 를 어떻게 하라는 스팩은 없는데, 조교님. 출력을 어떻게 하면 좋을지요?
Seq도 다 찍어주나요? ( Linear 하게 다 찍으면 누가 누구의 Seq 인지 잘 모를 정도이긴 하지만, 찍는건 어렵진 않습니다. ) 아니면, Seq(를 제외한 실질적인 PGM. 즉 메모리 상태를 변경할 수 있는 PGM들에 대해서만 직전에 출력을 할까요? |
|
위로 |
|
|
진민식
가입: 2006년 3월 21일 올린 글: 67
|
올려짐: 2006년5월30일 19:58 주제: |
|
|
구현은 각 서브프로그램이 실행되기 직전의
abstract memory들을 모으는 것으로 하시고(스펙대로),
출력은 모든 command(seq 포함)에 대해서
출력하거나,
분석의 결과가 필요하다고 생각되는 부분만
해 주셔도 무방합니다.단 이 때는 출력할 command 와
출력하지 않을 command 를 잘 구분해 주세요. |
|
위로 |
|
|
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|