| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
김우열
가입: 2009년 10월 4일 올린 글: 13
|
올려짐: 2009년10월4일 21:11 주제: 숙제3에서 메모리가 변경될때 |
|
|
let x := 1 in
x:=2;
write x
이라는 프로그램을 파싱하면 아래와 같이 됩니다.
LETV("x",NUM(1),
SEQ(
ASSIGN("x",NUM(2)),
WRITE(VAR("x"))
)
)
여기서 ASSIGN("x",NUM(2))라는 부분이 불리게 되면 M에서 M'이 되야 합니다.
Q1. 그리고 WRITE()가 나오는 시점에서 M(σ(x))=2가 되어야 하는게 맞겠지요?
Q2. 그런데 그렇게 하려면 ASSIGN문을 처리한 후에도 메모리가 M'이 되어있어야 할텐데,
ASSIGN문의 밖에서도 M'가 유지되어있게 하려면 어떻게 해야될지 모르겠습니다 ㅜ
Mem.store를 쓰게 되면 새로운 M'를 반환하긴 하는데 ASSIGN문 안에서
let M'=(Mem.store M loc val) in
을 사용하게 되면 ASSIGN문의 처리가 끝나는 순간 M'은 없어지지 않나요 ㅜ
(실제로 그러는거 같구요)
Q3. 이건 덤인데, write함수는 화면에 출력하는거고 read함수는 입력받는게 맞죠?? |
|
| 위로 |
|
 |
허기홍
가입: 2007년 9월 27일 올린 글: 231
|
올려짐: 2009년10월4일 21:39 주제: |
|
|
1. 맞습니다.
2. 음.. 아닙니다.
ASSIGN과 WRITE는 SEQ로 연결되어 있잖습니까?
ASSIGN을 처리할 때 semantics 문서에 있는 정의처럼 M'을 제대로 리턴하신다면 그 M'이 SEQ 의 두 번째 요소인 WRITE로 넘어가겠죠. 그 메모리를 그대로 WRITE에서 사용하시면 올바른 값이 나오지요.
우열씨 이외에도 몇 분들이 혼란스러워하는 것 같아서 말씀드립니다.
혹시, 숙제에서 작성해야하는 run의 타입이 value를 리턴한다는 것에 속박되어 있으신건 아니신지요?
run은 최종적으로 value만 리턴하지만
semantics에 정의된 내용을 보면 각 exp는 값과 메모리를 리턴하죠.
run에 구애받지 않고 semantics대로 동작하는 함수를 만드세요. 그리고 run은 그 함수를 사용해서 최종 결과값만 리턴하시면 될것입니다. |
|
| 위로 |
|
 |
김우열
가입: 2009년 10월 4일 올린 글: 13
|
올려짐: 2009년10월4일 22:32 주제: |
|
|
아!! 아래에서 설명해 주신것을 보니 모든것이 해결되었습니다 ㅜㅜ
감사합니다!! |
|
| 위로 |
|
 |
|