게시판 인덱스

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

숙제3에서 메모리가 변경될때

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2009)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
김우열



가입: 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    주제: 인용과 함께 답변

아!! 아래에서 설명해 주신것을 보니 모든것이 해결되었습니다 ㅜㅜ

감사합니다!!
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2009) 시간대: GMT + 9 시간(한국)
페이지 11

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


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