김도형
가입: 2022년 3월 8일 올린 글: 103
|
올려짐: 2023년10월12일 12:49 주제: 프로젝트 및 숙제 2 공지 [10/20 수정] |
|
|
안녕하세요, 수강생 여러분.
(수정:
- D 언어 문서에서 레이블이 어떻게 붙는지에 대해 좀 더 자세한 설명을 추가했습니다.
- 또한, 스켈레톤 코드의 예시 d3.dd에서 goto 7 대신
(if ((- 1) < x)
then goto 7
else x := (- 1))
로 수정해주시면 감사하겠습니다.)
프로젝트 및 숙제 2가 공개되었습니다.
프로젝트: https://ropas.snu.ac.kr/~kwang/4541.664A/23/project.pdf
숙제 2: https://ropas.snu.ac.kr/~kwang/4541.664A/23/hw2.pdf
기본적인 뼈대코드는 아래 링크를 참고해주세요:
http://ropas.snu.ac.kr/~ta/4541.664A/23/show/hw2_skel.zip
D 언어의 정확한 의미구조에 대한 문서입니다:
http://ropas.snu.ac.kr/~ta/4541.664A/23/show/d.pdf
숙제2 제출은 make 하기 전의 전체 폴더를 압축해서 메일(dhkim@ropas.snu.ac.kr)로 보내주세요.
제목을 [프로그램_분석]학번 (e.g. [PA]2999-99999)로 해서 보내주시길 바랍니다.
먼저 D언어에서 의미구조 및 파서에 대해 설명하겠습니다.
repeat C E
- C를 실행한 다음, E가 True이면 다시 repeat C E 를 반복, False이면 끝
if E C1 C2
- E가 True이면 C1, False이면 C2
E < E
- 실행값은 False의 경우 0, True의 경우 1
if E C C, repeat C E, E < E 에서의 Boolean 값
- False로는 0, 나머지 정수값은 True인 정수
reference & dereference 등의 포인터 연산
- location 값은 정수와 별개의 타입으로, 포인터 연산은 고려하지 않으셔도 좋습니다. (type error이기 때문)
숙제 2에서는 d.ml의 dintp, dcintp 함수를 구현하시면 됩니다.
각각의 함수는 실행 이후의 메모리, 그리고 각 프로그램 라벨에서의 메모리를 출력합니다.
프로그램 라벨은 파서인 parser.mly 파일에서 생성되며, 0부터 시작해 가장 바깥쪽의 SEQ부터 순차적으로 preorder traverse하며 1씩 증가합니다.
-pp 옵션으로 D언어 프로그램을 출력할 경우 프로그램이 각각의 라벨과 함께 출력되니, 이를 참고해주시길 바랍니다.
자세한 내용은 코드 내의 README를 참고해주세요.
또한, 분석기를 구현할 때 도움이 될 모듈이 정의된 domFunctor.ml 및 그 예시인 domExample.ml을 함께 첨부해드렸습니다.
감사합니다.
김도형 가 2023년10월20일 10:29에 수정함, 총 1 번 수정됨 |
|