게시판 인덱스

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

5-1 질문

 
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2017)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
김현식



가입: 2017년 9월 5일
올린 글: 24

올리기올려짐: 2017년11월13일 13:58    주제: 5-1 질문 인용과 함께 답변

sm5에서 id의 location은 (a,o)라고 표시되는데 o가 id가 갖는 value값 아닌가요??
sm5의 semantics에서 plus (즉, add)에 관한 내용을 보면 <a,z1>이라고 표시되어 있고 덧셈을 해도 <a,z1+z2>로 표기되는거 보면 value값이 맞는거 같은데

sm5.ml 파일을 보면 무조건 location은 (a,0) 이런식으로 되고 offset의 값을 바꾸는 코드는 보이지 않네요 ㅜㅜ

debug 해봐도 x+2하면 x가 <a,0>이 돼서 x의 assign 된 값과 상관없이 2가 나오는데 어떤게 잘못된걸까요?
위로
사용자 정보 보기 비밀 메시지 보내기
송우성



가입: 2017년 9월 7일
올린 글: 4

올리기올려짐: 2017년11월13일 14:29    주제: Base X Offset 인용과 함께 답변

k--에서 번역하는 과정에서는 쓰이지 않는 것 같은데, Sm5 상에서 의도적으로 바꿔서 저장할 수는 있습니다.

애초에 주소 자체가 (int * int) list 로 저장되어 있어서, 값을 저장할 수 없는 것 같아요. 값을 저장한다면 (int * value) list 가 되어야 할 것 같습니다.

자료대로 Base와 Offset을 가리키고 있는 것으로 이해했습니다. 주소 자체를 int 두 개의 튜플로 정의되었고, MALLOC을 실행하면 (n, 0) 값 형태로 기본 주소가 나오고요.

결국 숙제 3과 거의 비슷한 방식으로 정의된 것 같습니다.


2015년도 최재승 조교님께서 올려주신 Sm5 테스트케이스에 이런게 있어요.

코드:

(* GC must not miss a location with different offset *)
let cmds6 =
  (* Location to be collected *)
  let cmds = [PUSH (Val (Z 1)); MALLOC; STORE] in

  (* Allocate, bind and store 126 times *)
  let cmds = append 126 (fun i ->
                          let v = Printf.sprintf "x%d" i in [
                            MALLOC;
                            BIND v;
                            PUSH (Val (Z 1));
                            PUSH (Id v);
                            STORE;
                          ]) cmds
  in

  (* Another location with same base, different offset *)
  let cmds = cmds @
             [PUSH (Val (Z 500));
              PUSH (Id "x0");
              PUSH (Val (Z 10));
              ADD;
              STORE;   (* Env : "x0" ==> (a, 0) / Mem : (a, 10) ==> 500 *)
             ]
  in

  (* Trigger GC *)
  let cmds = cmds @ [
               MALLOC;
               BIND "foo";
               PUSH (Val (Z 1));
               PUSH (Id "foo");
               STORE
             ]
  in

    cmds @ [PUSH (Id "x0"); PUSH (Val (Z 10)); ADD; LOAD; PUT]


주소 (2,0)에 대해 10을 더한 후 STORE하는 예제입니다.

이 예제를 실행하면 주소 (2, 10)에 새로운 값이 저장이 됩니다.


아마 가비지 콜렉터를 구현할 때도 조심해야할 것 같네요.
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2017) 시간대: GMT + 9 시간(한국)
페이지 11

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


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