게시판 인덱스

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

RECORD, CALLV질문드립니다.

 
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2012)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
구본영



가입: 2010년 9월 7일
올린 글: 7

올리기올려짐: 2012년10월15일 2:58    주제: RECORD, CALLV질문드립니다. 인용과 함께 답변

올려주신 Semantics에 있는 RECT문법을 보면 LETV와 같이 memory를 allloc해줘야 할것 같은데, 맞나요? 아니면 Assign과 같이 store만 해주면 될까요?

CALLV에서 Mn{l1->v1}...{ln->Vn}이 있는데 이것의 의미를 모르겠습니다. 혹시
Mn{l1->v1, l2->v2........ln->Vn}과 같은 의미인가요? exp가 이와같이 여러개가 들어올때 어떻게 처리해야 할지 모르겠습니다. 한번에 각 exp에 대한 semantics를 돌리고 그 반환된 v들과 최종memory를 담아서 풀어야 할지, 잘안되네요 ㅠㅠ

힌트좀 주세요 조교님!!
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기
이승중



가입: 2010년 6월 22일
올린 글: 561

올리기올려짐: 2012년10월15일 14:21    주제: 인용과 함께 답변

1. 예를 들어 { x := 1 } 라는 구문이 에서 생각해보면
1을 저장할 공간이 없죠.. 현재 환경에 x가 있어도 그건 레코드의 x와는 다른 것이니 거기에 저장하면 안될거고요.. 결국 새로운 메모리 공간을 만들어서 1을 저장한 후에 그 위치를 레코드의 x에 넣어줘야 할겁니다.

2. Mn{l1 -> v1}{l2 -> v2} 는 (Mn{l1->v1}){l2 ->v2} 구요
Mn에 일단 l1, v1을 넣고 그 결과로 나온 메모리에 다시 l2, v2를 넣는다고 생각하시면 됩니다. 결과적으로 Mn{l1 -> v1, l2 -> v2} 랑 같습니다.

인터프리터는 문서에 써있는 대로 순서대로 실행하는 것이 좋습니다.
함수를 여러 개로 나눠서요

코드:
(* exp들을 현재 env에서 실행한 결과들의 리스트와 마지막 메모리 상태 가져오기 *)
let rec getValuesAndMem explist mem : value list * Mem.t = ... in

(* 얻은 value들을 함수의 인자(arglist)에 메모리를 할당해서 envf에 넣기 *)
let rec bindValues envf mem arglist valuelist : Env.t * Mem.t = ... in

(* getValuesAndMem과 bindValues로 얻은 Env.t, Mem.t를 사용해서 함수 바디를 실행. *)

이런식으로 여러 단계로 나누고, 각각을 정의하면 덜 헷갈릴수 있겠죠.

각 의미구조마다 어떤 메모리와 어떤 환경이 쓰였는지 주의해서 봐주세요
예를 들어 getValuesAndMem에서 함수로부터 얻은 envf를 사용하여 값을 가져오면 다른 결과가 나오게 됩니다. 문서에는 함수 콜 시점에서의 env로 인자의 모든 식을 계산하고 있죠. 반면 메모리는 식을 실행할 때마다 매번 업데이트 합니다.
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2012) 시간대: GMT + 9 시간(한국)
페이지 11

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


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