 |
|
| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
최정원
가입: 2025년 3월 22일 올린 글: 24
|
올려짐: 2026년5월15일 10:17 주제: [숙제 6] 메모리 사용 및 테스트 관련 질문 |
|
|
안녕하세요, 과제 6을 풀면서 질문이 생겨 여쭤봅니다.
1. gc.ml 파일을 테스트할 때 저희가 구현한 translator 도 함께 사용이 되나요? Translator 구현 방식에 따라 memory와 environment에 data가 얼마나 많이 어떤 방식으로 존재하는지가 학생마다 많이 다를 것 같습니다. gc_test.ml 파일을 보니 번역 없이 바로 sm5 cmd만 이용해서 테스트하는 것 같은데, gc.ml을 채점할 때도 저희가 구현한 translator와는 무관하게 채점된다고 생각해도 될까요?
2. 또한, 구현 방법에 따라 exception/error도 Sm5와 K- 사이에서 다르게 나올 것 같은데, invalid args나 unbound value가 나는 경우도 테스트할 것인가요, 모두 올바른 입력만 들어온다고 가정해도 될까요? 필요에 따라 translator.ml 파일 위에 새 exception을 선언해도 되는지 알고 싶습니다.
3. translator.ml 파일은 아래 명령어로 실행했을 때 결과가 제대로 나오면 채점할 때 문제가 없다고 생각해도 될까요? 프로그램 실행 전후, 중간 기계 상태는 전혀 안 보시고 프로그램이 출력하는 결과만 보시는지 확인하고 싶습니다. | 인용: | | dune exec --release -- sm5 examples/test1.k- |
4. SUB, DIV, LESS 커맨드의 경우 K- 에서는 모두 두 번째 인자를 먼저 eval하고 첫 번째 인자를 eval한 후 계산은 입력 순서대로 하는 것 같습니다. 예를 들어 LESS (x1, y2) 가 들어오면 y2를 eval하고 x1을 eval 한 후 x1 < y2 여부를 봅니다.
그러나 translator에서 (trans e2) @ (trans e1) @ [ SUB/DIV/LESS ]를 하는 경우 결국 stack에서 가져올 때는 순서가 (trans e1) @ (trans e2) @ [ SUB/DIV/LESS ]를 가정하는 것 같아 답이 잘못 나옵니다.
예를 들어 DIV (1, 2)를 할 경우 stack에는 [1; 2]처럼 들어갑니다. 따라서 결과도 V(Z(2 / 1)) = 2가 됩니다. 그러나 실제 답은 1/2여야 합니다.
| 인용: | | V (Z z2) :: V (Z z1) :: s, m, e, SUB :: c, k ->
(V (Z (z1 - z2)) :: s, m, e, c, k)
| V (Z z) :: V (L (base, offset)) :: s, m, e, SUB :: c, k ->
if offset - z >= 0 then (V (L (base, offset - z)) :: s, m, e, c, k)
else raise (Error "Negative loc offset spanwed")
| V (Z z2) :: V (Z z1) :: s, m, e, DIV :: c, k ->
(V (Z (z1 / z2)) :: s, m, e, c, k)
| V (Z z2) :: V (Z z1) :: s, m, e, LESS :: c, k ->
(V (B (z1 < z2)) :: s, m, e, c, k) |
이 경우 현재 sm5.ml 의 step 정의에서 인자의 순서가 문제인지, 위와 같은 오류를 현 상태에서 피할 수 있는 방법이 있는지 알고 싶습니다. 두 번째 인자를 먼저 번역하고 첫 번째 인자를 번역하는 경우 어쩔 수 없이 위 처럼 문제가 생기는 것 같습니다.
질문에 항상 답해주셔서 감사합니다. |
|
| 위로 |
|
 |
안중원 Site Admin
가입: 2023년 3월 13일 올린 글: 76
|
올려짐: 2026년5월15일 13:34 주제: |
|
|
안녕하세요, 프로그래밍 언어 조교 안중원입니다.
1. 각 숙제는 서로 독립적으로 채점되도록 할 예정입니다. 즉, gc와 translate는 서로 영향이 없게 독립적으로 채점됩니다.
2. 올바르게 실행되는 K- 프로그램에 대해서만 올바르게 번역하시면 됩니다.
3. 네, 입출력 등의 부수효과가 K-와 SM5에서 동일하면 됩니다.
4. 말씀하셨듯 그렇게 번역하도록 구현한다면 문제가 발생합니다. 번역에서는 출발 언어의 실행의미가 도착 언어의 실행의미와 "깔끔하게" 대응되지 않는 경우도 있습니다. 그러한 간극을 채우기 위한 고민 또한 숙제의 취지에 포함됩니다. 군더더기가 조금 더 들어가더라도 K-에서의 의미가 번역 후에도 정확히 보존되도록 구현하시면 됩니다.
감사합니다. _________________ TA 안중원
e-mail: jwahn@ropas.snu.ac.kr |
|
| 위로 |
|
 |
최정원
가입: 2025년 3월 22일 올린 글: 24
|
올려짐: 2026년5월16일 1:58 주제: |
|
|
답변 감사합니다!
추가로 여쭤보고 싶은 게 있습니다.
1. 기존에 제공해주신 K.ADD의 번역을 바꿔도 될까요?
2. translator.ml 파일의 상단, 즉, trans 함수 밖에서 exception, ref, 보조함수 혹은 새로운 type를 선언해서 사용해도 될까요?
3. String, List, Standard library는 모두 사용해도 된다고 가정하면 될까요? |
|
| 위로 |
|
 |
안중원 Site Admin
가입: 2023년 3월 13일 올린 글: 76
|
올려짐: 2026년5월16일 23:30 주제: |
|
|
안녕하세요 프로그래밍언어 조교 안중원입니다
1,2. 함수의 기존 내용 및 보조 함수는 마음껏 수정하셔도 됩니다.
3. String, List는 사용하실 수 있습니다. 모든 표준 라이브러리를 사용하실 수 있는것은 아닙니다.
감사합니다. _________________ TA 안중원
e-mail: jwahn@ropas.snu.ac.kr |
|
| 위로 |
|
 |
최정원
가입: 2025년 3월 22일 올린 글: 24
|
올려짐: 2026년5월17일 12:52 주제: |
|
|
안녕하세요,
저는 std library의 compare와 string_of_int 함수를 사용했는데 괜찮을까요?
추가적으로, gc.ml의 malloc_with_gc 함수가 ocaml에서는 loc * memory 가 아니라 (int * int) * memory를 돌려준다고 떠도 괜찮은지 알고 싶습니다. gc_test.ml은 잘 통과합니다.
감사합니다! |
|
| 위로 |
|
 |
안중원 Site Admin
가입: 2023년 3월 13일 올린 글: 76
|
올려짐: 2026년5월18일 9:20 주제: |
|
|
안녕하세요,
1. compare 및 string_of_int 함수는 사용 가능합니다.
2. type loc = int * int와 같이 단순한 타입 별명(type alias)에 대해서는 타입 검사의 동작에 따라 loc과 int * int 중 어느쪽 타입이든 나타날 수 있습니다. 제공해드린 뼈대코드에서 빌드가 잘 된다면 괜찮습니다.
감사합니다. _________________ TA 안중원
e-mail: jwahn@ropas.snu.ac.kr |
|
| 위로 |
|
 |
|
|
새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다 주제를 수정할 수 없습니다 올린 글을 삭제할 수 없습니다 투표를 할 수 없습니다
|
Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group Translated by kss & drssay
|