게시판 인덱스

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

[숙제 8] 공지사항 및 보충 세부사항 안내드립니다.

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


가입: 2022년 3월 6일
올린 글: 209

올리기올려짐: 2024년6월3일 15:34    주제: [숙제 8] 공지사항 및 보충 세부사항 안내드립니다. 인용과 함께 답변

안녕하세요 수강생 여러분,

숙제 8에 대한 공지사항 및 보충 세부사항을 안내해드리겠습니다.

내용 : http://kwangkeunyi.snu.ac.kr/4190.310/24/hw8.pdf
제출 : http://ropas.snu.ac.kr/~ta/4190.310/24/submit/index.pl
기한 : 6/14 밤 11시 59분 59초


# 과제 관련 주의 사항
과제를 제출하기 전에 꼭 주의사항(https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=7286)을 확인해 주세요.

# 보충 세부사항
(이 글에 답글로 질문하지 말아 주세요. 별도의 게시글로 질문해 주시기 바랍니다!)

## Exercise 1 "저지방 고단백 M"
* 뼈대코드: http://ropas.snu.ac.kr/~ta/4190.310/24/show/nutritious.tar.gz
* M 언어의 스펙 문서 : http://ropas.snu.ac.kr/~kwang/4190.310/22/M.pdf

* 뼈대코드의 `poly_checker.ml` 파일의 `check` 함수를 완성하여 제출합니다. `check` 함수는 입력으로 들어온 프로그램의 타입을 유추하여, `m.ml` 파일에 정의된 `M.typ` 타입으로 리턴해야 합니다.
* 타입 추론에 실패할 경우, `m.ml` 파일에 정의된 `M.TypeError` 예외를 발생시켜 주세요. (예외의 인자로 쓸 문자열은 자유롭게 정하시면 됩니다.)
* 뼈대코드에 몇몇 타입 정의와 함수를 제공합니다. 입맛에 따라 자유롭게 수정하여 활용하시기 바랍니다.
* M 언어의 스펙 문서에 나와 있듯이, 입력으로는 "non-function type expression"만 들어옵니다.
* 프로그램을 실행해 보고 결과를 관찰하여 답을 내놓는다거나 하는 방법은 금지입니다. 예컨대 프로그램을 실행해 보고, 정수 n이 나오면 `Num n"`으로 번역하는 방식은 악의적인 구현입니다.
* 타입 체커 구현은 static semantics를 따라가시면 됩니다. M 문서의 static semantics를 보시면 loc의 내용물 타입이 같아야만 비교가 가능한 것으로 되어 있습니다. 즉 int loc 과 bool loc의 비교는 타입 에러입니다. Dynamic semantics에 따르면 정상적으로 실행되지만 타입 체킹에 실패하므로 타입 체커가 불완전(incomplete)해지기는 하지만, 안전성(soundness)은 해치지 않으므로 괜찮습니다.
* 프로그램의 최종 타입이, `m.ml` 파일에 선언된 `typ` 타입으로 표현할 수 없는 경우는 입력으로 테스트하지 않을 것입니다. `typ` 타입에는 함수 타입을 표현하는 constructor가 없으므로, 다음과 같은 프로그램은 입력으로 넣지 않겠습니다.

코드:
let val f = fn x => x + 1 in
  (1, f)
end


* 뼈대코드 디렉토리에서 `dune build --release` 명령을 실행하시면 숙제 전체가 컴파일됩니다.

`run` 파일(혹은 `./_build/default/bin/main.exe`)을 다음과 같이 실행하시면 됩니다.

코드:
$ dune build --release
$ ./run examples/test1.m



## Exercise 2 "SM5 RosettaX"
* 뼈대코드: http://ropas.snu.ac.kr/~ta/4190.310/24/show/rozettax.tar.gz
* 뼈대코드에는 SM5와 Sonata의 실행기가 제공되어 있습니다.
* 뼈대코드 디렉토리에서 `dune build --release` 명령을 실행하시면 숙제 전체가 컴파일됩니다.

`run` 파일(혹은 `./_build/default/bin/main.exe`)을 다음과 같이 실행하시면 입력으로 받은 SM5 프로그램을 Sonata 프로그램으로 번역하여, Sonata 실행기로 실행합니다.

코드:
$ dune build --release
$ ./run examples/test1.sm5


* 그 외에 다양한 옵션 (번역된 Sonata 프로그램 출력하기, 번역하지 않고 SM5 기계로 실행하기, 디버그 모드로 실행하기 등)을 지원합니다. `README.md` 파일을 참고하시기 바랍니다. 번역하지 않고 SM5로 실행한 결과와 번역한 것의 Sonata 실행한 결과가 같게 나오게 작성하시면 됩니다.

* 뼈대코드 중 translator.ml 파일을 제출합니다. 꼭 주의해 주세요, 엉뚱한 ml 파일을 잘못 제출하시면 조교팀이 해결해 드릴 방법이 없습니다.
* TODO로 표시되어 있는 `Translator.trans` 함수를 구현해서 제출하시면 됩니다.

* 번역 과정에서, SM5 프로그램에서 사용하는 변수 이름과 겹치지 않는 변수 이름이 필요한 경우가 있습니다.
여러분의 편의를 위해 SM5 언어에서 사용하는 변수 이름에는 #, @와 같은 특수문자를 사용되지 않는다고 가정하겠습니다.

* 입력으로 들어온 Sm5 프로그램은 `loc` 상수나 `record` 상수를 `push`하지 않는다고 가정하겠습니다. 이런 명령은 입력으로 들어오지 않으므로 자유롭게 예외 처리해 주시기 바랍니다.
이런 프로그램을 제외하는 이유는, 사용할 주소가 하드코딩되어 있는 특이한 코드이기 때문입니다. C 언어에 비유하자면 다음과 같은 코드에 해당합니다.
프로그램이 돌고 있는 운영체제 및 기계를 확실히 꿰고 있을 때에만 매우 제한적으로 쓰일 수 있는 코드입니다.
코드:
int *p = (int *)0x08048576;
 int x = *p;
 ...


* `loc` 상수나 `record` 상수를 `push`하는 코드를 번역하는 것은, SM5/Sonata의 `malloc()`의 동작과 맞물려 너무 복잡해지기 때문에 번역의 대상에서 제외합니다.


감사합니다.

조교 드림

TA 이재호
e-mail: jhlee@ropas.snu.ac.kr
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Spring 2024) 시간대: GMT + 9 시간(한국)
페이지 11

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


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