이재호 Site Admin
가입: 2022년 3월 6일 올린 글: 209
|
올려짐: 2025년5월8일 14:40 주제: [숙제 5] 공지사항 안내드립니다 (수정: 5/21 16:05) |
|
|
안녕하세요 수강생 여러분,
숙제 5에 대한 공지사항을 안내해드리겠습니다.
내용: https://ropas.snu.ac.kr/~kwang/4541.664A/25/hw5.pdf
기한: 5/20(화) 24:00
문서 기한: 5/22(목) 24:00
뼈대코드: https://ropas.snu.ac.kr/~ta/4541.664A/25/show/watercheck.tar.gz
배점: 구현 점수는 130점, 문서 점수는 20점으로 총 150점입니다.
뼈대코드에 대해 간단히 안내드리겠습니다.
* 전이과정 방식의 분석기를 작성하셔야 합니다. (5/16 17:30 추가) 이에 따라 -dintp 옵션은 무시하시면 됩니다.
* 뼈대 코드는 dune 빌드 시스템을 사용해서 작성되었습니다. `dune build --release`를 실행하면 컴파일이 되고, `_build/default/bin` 아래 `main.exe` 실행 파일이 생성됩니다. (UNIX에서도 마찬가지로 `main.exe`이니 착오 없으시길 바랍니다.)
이렇게 만들어진 `main.exe`를 실행하여 `examples` 디렉터리에 있는 예제를 프로그램 줄 번호와 함께 출력할 수 있습니다.
코드: | dune build --release
./_build/default/bin/main.exe -pp examples/1.d
|
또한 -tintp 옵션으로 전이과정 의미구조(transitional semantics)로 작성한 실행기를 실행할 수 있습니다:
코드: | ./_build/default/bin/main.exe -tintp examples/1.d
|
`--release`를 붙여서 빌드를 하는 이유는, 아직 사용이 안 된 변수들이 있기 때문입니다. 과제를 완료하시고 모든 변수를 빠짐없이 사용하면 `--release` 플래그 없이도 컴파일이 문제없이 진행될 것입니다.
* 과제를 하실 때, 다른 쉘에서
코드: | dune build --release --watch
|
를 실행하면, 코드를 변경하실 때마다 자동으로 빌드가 진행됩니다. 이에 따라 편집기에서 실시간으로 타입 정보 등의 정보를 제공받을 수 있으니 유용하게 사용하세요.
* Dune을 사용해 바로 실행을 할 수도 있습니다:
코드: | dune exec --release watercheck -- -pp examples/1.d
|
* OCAMLRUNPARAM=b 환경변수를 통해 예외 발생시 실행흔적을 확인할 수 있습니다.
* 또한 구현에 도움이 될 수 있는 `itv.ml`, `dom.ml`, `dom_ex.ml` 예시도 포함되어 있습니다. 직접 사용하지 않으셔도 됩니다.
* 분석의 정확도를 위해 여러 요약 공간을 섞어쓰시거나, 성능을 위해 worklist 알고리즘 등을 사용하시면 좋습니다.
* lib/syntax.ml에서 코드 줄번호를 나타내는 타입 lbl이 (int, int) Either.t 타입인 것은, repeat에서 몸통을 다시 실행할 때 사용할 번호를 타입 수준에서 구분하기 위함입니다. 일반적인 줄번호는 Left n, repeat에서 다시 몸통에 진입하기 전에 사용하는 (유령) 줄번호는 Right n입니다. 또한 프로그램 전체의 마지막 탈출 번호도 일반적이지 않은 Right 0입니다.
* bin/main.ml, lib/*.ml 의 모든 부분을 자유롭게 수정하셔도 됩니다. 새로운 파일을 만드셔도 됩니다. 새로운 실행 옵션을 만드셔도 됩니다. 다만, 채점이 가능하도록 반드시 실행 방식을 (바꾸셨다면) 메일에 명시해주세요.
* 오캐믈에서 파일 이름을 xyz_abc.ml로 지으시면 같은 패키지의 다른 파일에서는 Xyz_abc라는 이름의 모듈로 사용하실 수 있습니다. 또한 bin/ 밑의 패키지에서는 lib/ 아래에 정의된 모듈을 사용할 때 lib/dune에 정의된 것과 같이 Watercheck라는 이름의 모듈로 불러올 수 있습니다.
제출은 jhlee@ropas.snu.ac.kr 로 제목은 "[프로그램 분석] 20NN-NNNNN 숙제 5"와 같이 이메일로 보내주세요.
이때 반드시 `dune clean`을 하여 용량이 큰 `_build`디렉터리를 포함하지 않은채로 보내주시기 바랍니다.
감사합니다.
조교 드림
TA 이재호
e-mail: jhlee@ropas.snu.ac.kr |
|