게시판 인덱스

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

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

 
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Spring 2026)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
안중원
Site Admin


가입: 2023년 3월 13일
올린 글: 90

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

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

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

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


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

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

## Exercise 1 "저지방 고단백 M"

* M 언어의 스펙 문서 : https://ropas.snu.ac.kr/~kwang/4190.310/26/M.pdf
* 뼈대코드: https://ropas.snu.ac.kr/~ta/4190.310/26/show/nutritious.zip
* 뼈대코드에 simple_checker.ml 이 포함되어있으니 구현에 참고하세요.

* 뼈대코드의 `poly_checker.ml` 파일의 `check` 함수를 완성하여 제출합니다. `check` 함수는 입력으로 들어온 프로그램의 타입을 유추하여, `m.ml` 파일에 정의된 `typ` 타입으로 리턴해야 합니다.
* 타입 추론에 실패할 경우, `m.ml` 파일에 정의된 `TypeError` 예외를 발생시켜 주세요. (예외의 인자로 쓸 문자열은 자유롭게 정하시면 됩니다.)
* 뼈대코드에 몇몇 타입 정의와 함수를 제공합니다. 입맛에 따라 자유롭게 수정하여 활용하시기 바랍니다.
* M 언어의 스펙 문서에 나와 있듯이, 입력으로는 "non-function type expression"만 들어옵니다.
* 프로그램을 실행해 보고 결과를 관찰하여 답을 내놓는다거나 하는 방법은 금지입니다. 예컨대 프로그램을 실행해 보고, 정수 n이 나오면 `TyInt`로 추론하는 방식은 악의적인 구현입니다.
* 타입 체커 구현은 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` 명령을 실행하시면 숙제 전체가 컴파일됩니다.

`dune exec --release -- nutritious` 명령 혹은 `./_build/default/bin/main.exe`을 다음과 같이 실행하시면 됩니다.

코드:
$ dune exec --release -- nutritious examples/test1.m


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

`dune exec --release -- rozettax` 명령 혹은 `./_build/default/bin/main.exe`을 다음과 같이 실행하시면 입력으로 받은 SM5 프로그램을 Sonata 프로그램으로 번역하여, Sonata 실행기로 실행합니다.

코드:
$ dune exec --release -- rozettax examples/test1.sm5


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

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

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

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


* 입력되는 SM5 프로그램에는 순환 구조가 없으며, 출력되는 프로그램에 순환 구조가 들어있는 경우 오답으로 처리됩니다. 프로그램의 AST는 문법 규칙을 따르는 유한한 나무 구조로 정의되며, 순환 구조는 무한한 나무에 해당하기 때문에 올바른 프로그램이 아닙니다.

감사합니다.

조교 드림
_________________
TA 안중원
e-mail: jwahn@ropas.snu.ac.kr
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기     게시판 인덱스 -> 4190.310 Programming Languages (Spring 2026) 시간대: GMT + 9 시간(한국)
페이지 11

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


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