이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
김은상 손님
|
올려짐: 2006년5월4일 18:44 주제: while문의 경우에 말이죠... |
|
|
while exp do ----- (1)
cmd1 -----(2)
cmd2 -----(3)
cmd3 -----(4)
의 커맨드가 있을 경우, (1)~(4)까지 반복을 하고, 다시 (1)을 체크하면
table의 entry를 새로 만들어서 메모리 상태를 저장해야 할까요?
아니면, 바로 전에 (1)~(4)의 entry에 내용을 덮어쓰기해야 할까요?
즉, while문이 계속 반복될 때, 새로운 커맨드라고 생각하고 table entry를
추가해야 할지, 아니면 이전의 커맨드라고 생각하고 기존의 entry에 값을
덮어써야 할지 궁금하네요. |
|
위로 |
|
|
정찬주
가입: 2006년 4월 30일 올린 글: 4
|
올려짐: 2006년5월4일 19:37 주제: 둘 다 아닌 거 같은데요-.-; |
|
|
각각의 커맨드가 시작하기 전의 위치에서
메모리가 가질 수 있는 모든 상태들의 집합...이니까.
완전히 새로운 테이블을 만들어야겠죠
example)
x := 0;
y := 1;
<< 요 위치를 묻는다면....
while x< 3 x := x + 1
처음 돌때는 x = 0 y = 1
다시 오면 x = 1 y =1
또 오니까 x =2 y =1
그러니까 저 위치에서 가질 수 있는 메모리의 셋은
{ x=0 y=1 , x=1 y=1 , x=2 y=1 }
이 리턴되겠지요.
x=3 y=1이 들어가는지가 갑자기 마구 헷갈리고 있습니다[...] |
|
위로 |
|
|
진민식
가입: 2006년 3월 21일 올린 글: 67
|
올려짐: 2006년5월4일 22:00 주제: |
|
|
인용: | x=3 y=1이 들어가는지가 갑자기 마구 헷갈리고 있습니다[...] |
위의 부분이 명확하게 알 수 없으시다면, C-- 의 semantics 정의를 다시보시면
될 것 같습니다.
while의 경우,
MㅏE => v(v =0) M ㅏ C => M' M'ㅏwhile E C => M''
-------------------------
Mㅏ while E C => M''
MㅏE => 0
-------------------------
Mㅏ while E C => M
입니다.
그리고 우리가 모으는 메모리는 while 을 수행하기 직전의 메모리를 모으는 것 입니다. |
|
위로 |
|
|
|