shkim
가입: 2019년 7월 30일 올린 글: 86
|
올려짐: 2021년3월24일 14:29 주제: [숙제 3] 공지사항 및 보충 스펙 |
|
|
안녕하세요,
숙제 3이 올라왔음을 알려드립니다.
내용 : http://ropas.snu.ac.kr/~kwang/4190.310/21/hw3.pdf
제출 : http://ropas.snu.ac.kr/~ta/4190.310/21/submit/index.pl
기한 : 4/4 밤 12시
* K-- 언어 문법 및 의미구조
http://ropas.snu.ac.kr/~ta/4190.310/21/show/K--.pdf
* 뼈대코드
- http://ropas.snu.ac.kr/~ta/4190.310/21/show/K__skel.zip (브라우저 새 탭에 주소를 입력해 주시기 바랍니다)
- 뼈대코드에는 K-- 언어로 짜여진 프로그램을 읽어들이는 파서, K-- 언어의 정의 및 실행기의 뼈대가 들어있습니다. k.ml 파일에서 TODO 로 표시해 둔 부분을 완성하여 실행기를 완성하시기 바랍니다.
- 뼈대코드에는 여러분이 숙제를 쉽게 하실 수 있도록 보조 모듈과 보조 함수들에 제공됩니다.
- 뼈대코드 디렉토리에서 make 명령을 실행하시면 숙제 전체가 컴파일되고, 'run' 이라는 실행파일이 생성됩니다. run 파일을 다음과 같이 실행하시면 examples 디렉토리에 제공해 드린 예제를 실행기로 돌려볼 수 있습니다.
코드: | make
./run examples/test1.k- |
* 과제 관련 주의 사항
과제를 하고 제출하기에 앞서 꼭 제출시 주의사항 공지를 확인해 주세요.
* 숙제 스펙 보충사항
(질문은 이 글에 답글로 달지 마시고, 별도의 글로 질문해 주시기 바랍니다)
Exercise 1 "K-- 실행기"
- 제출시에는 뼈대 코드 중 k.ml 파일을 제출합니다. 꼭 주의해 주세요, 엉뚱한 ml 파일을 잘못 제출하시면 조교팀이 해결해 드릴 방법이 없습니다.
- 타입이 다른 두 값이 같은지 비교할 경우 결과는 false입니다(타입 에러가 아닙니다). 두 값의 대소를 비교할 경우 둘 다 정수 값이 아니면 타입 에러입니다.
- read의 실행의미 구현에는 read_int 를, write의 구현에는 "print_endline (string_of_int n)"을 사용하는 것으로 합니다.
즉, hw3.pdf 에 설명된 대로 정수를 출력한 다음에 개행 문자(newline)를 출력해야 합니다.
마침 숙제의 감을 잡으실 수 있도록 뼈대 코드에 read와 write의 실행 의미를 정의해 두었으므로, 이 정의를 그대로 두시면 되겠습니다.
- K.run 의 결과는 출력 대상이 아닙니다. 입출력은 read/write 로만 이루어집니다.
- 실행 의미 규칙이 정의되지 않은 경우 Error 예외를 발생시킵니다. 몇몇 구체적인 상황과, 각각의 경우 Error 예외의 문자열은 다음과 같이 정하겠습니다.
(1) 타입 에러 - 정수 값이 와야 하는 곳에 하는데 참/거짓(bool) 값이 나오거나, 그 반대의 경우
코드: | raise (Error "TypeError ...") |
TypeError 뒤에 추가적인 정보를 더 붙이셔도 됩니다. 예를 들어 아래와 같이 쓸 수 있습니다. 채점시에는 스트링의 앞글자들만 매칭할 것이므로 모두 정답으로 인정됩니다.
코드: | Error "TypeError : not int"
Error "TypeError : boolean is expected" |
(2) Bind되지 않은 변수가 사용되는 경우
코드: | raise (Error "Unbound") |
그 외에 실행의미가 정의되지 않은 경우에 대해서는, Error 예외의 문자열은 자유롭게 사용하시면 됩니다.
- 어느 예외가 먼저 발생해야 하는지 모호한 경우는 테스트하지 않겠습니다. 숙제 문서의 실행 의미 정의만으로는 어떤 예외가 우선시되는지 판단하기 애매하므로, 이런 경우는 테스트하지 않을 것입니다. |
|