게시판 인덱스

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

프로젝트 공지 및 뼈대코드 (6/13 마지막 업데이트)

 
글 쓰기   답변 달기     게시판 인덱스 -> 4541.664A Program Analysis (Spring 2016)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
최재승



가입: 2012년 9월 10일
올린 글: 211

올리기올려짐: 2016년6월3일 23:05    주제: 프로젝트 공지 및 뼈대코드 (6/13 마지막 업데이트) 인용과 함께 답변

안녕하세요, 프로그램 분석 조교입니다.

프로젝트 뼈대코드를 공개합니다.

프로젝트 내용 : http://ropas.snu.ac.kr/~kwang/4541.664A/16/project.pdf

프로젝트 기한 : 6/14 (화) 밤 12시

뼈대코드 : http://ropas.snu.ac.kr/~ta/4541.664A/16/project.zip

질문은 본 게시물에 답글로 달지 마시고, 새로운 글로 써 주시면 감사하겠습니다.

-----------------
* 변경 내역
6/4 : 환경 세팅 설명 보강, 테스트케이스 오타 수정

6/5 : TODO 항목 설명 보강, 채점기준에 대한 설명 추가, 테스트케이스 추가

6/7 : 뼈대코드에서 프로그램 그래프 관련 인터페이스를 업데이트했습니다. (수정된 파일 : graphPgm.mli, graphPgm.ml)
노드에 매달린 명령을 가져오는 함수, 노드 아이디를 가져오는 함수가 가려져 있어서 이를 드러냈습니다.

6/9 : 뼈대코드에서 도메인 functor를 업데이트했습니다. (수정된 파일 : domFunctor.ml)
함수 도메인(FunDomain)의 fold/map 함수에서 문제를 발견하여 수정하였습니다.
또, PrimtiveSet의 인터페이스를 수정하여 편의성을 높였습니다.
그리고 List를 사용하여 코딩하는데 익숙하신 분들을 위해, 멱집합 도메인(PowerSetDomain)과 함수 도메인(FunDomain)에 to_list 함수를 추가하였습니다.

6/10 : 테스트케이스의 주석 오타 수정(eo_test5.k), TODO 항목에 주의사항을 추가

6/13 : 테스트케이스의 사소한 수정(eo_test5.k)
https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=5248 글 참조
--------------
* 프로젝트 제출 양식
제출은 이메일 jschoi@ropas.snu.ac.kr로 보내주시면 됩니다. 이메일 제목은 "[PA]학번" 와 같은 형식으로 해주세요. (예: "[PA]2016_12345").
작업하신 프로젝트 디렉토리 전체를 zip으로 압축하여 첨부하시면 되고, 첨부파일의 이름도 이메일 제목과 같게 해주시기 바랍니다.
조교의 채점이 수월해지므로 양식을 꼭 지켜주시면 감사하겠습니다.

* 주의 사항

- make 명령으로 정상적으로 컴파일되는 상태에서 압축한 다음 제출해 주시기 바랍니다.
컴파일에 실패할 경우 큰 폭으로 감점될 수 있으므로 주의해 주시기 바랍니다.

- evenOdd.ml 파일의 result 타입 정의, davinci.ml 파일의 result 타입 정의는 수정하시면 안 됩니다.


* 환경 세팅 및 컴파일
- Ubuntu 환경을 기준으로, 아래의 명령들을 통해 ocaml 개발 환경을 세팅할 수 있습니다.
코드:

$ sudo apt-get install opam
$ sudo apt-get install graphviz
$ sudo apt-get install m4
$ opam init
$ eval `opam config env`
$ opam update
$ opam install ocamlgraph


- make 명령으로 프로젝트를 컴파일하고, 아래과 같이 실행해볼 수 있습니다.
코드:

$ make
$ ./main.native -eo ./example/eo_test1.k
$ ./main.native -davinci ./example/dav_test2.k
$ ./main.native -print ./example/eo_test1.k


* TODO
-여러분은 evenOdd.ml 파일의 eoAnalyzer 함수와 davinci.ml 파일의 daVinciAnalyzer 함수를 구현하시면 됩니다.
이 과정에서 새로운 타입이나 함수를 자유롭게 정의하셔도 되고, 새로운 파일을 추가하셔도 좋습니다. 다만, 컴파일이 정상적으로 되도록 신경써 주시기 바랍니다.

-분석은 프그램의 각 지점마다 요약된 메모리 상태가 매달리는 스타일로 디자인하고 구현하시기 바랍니다. (수업자료 10-1b.pdf 참조)
이를 위해 프로그램을 그래프 형태로 녹여서 제공합니다.

- eoAnalyzer 함수가 내놓는 값은, 프로그램의 마지막 지점에서 변수가 가지는 정수가 짝수일지 홀수일지, 주소라면 어떤 주소일지입니다. (evenOdd.ml 파일의 result 타입 정의 참조)
(주의 : 마지막 지점에 매달려 있는 명령도 실행한 다음의 값들을 의미합니다.)

- daVinciAnalyzer 함수가 내놓는 값은, 주어진 프로그램이 다빈치 코드인지 여부입니다. (davinci.ml 파일의 result 타입 정의 참조)
(주의 : 스펙문서의 설명에 "소프트웨어의 실행중에" 라는 말이 나오는데, 마지막 지점에 매달려 있는 명령도 실행한 직후의 상황도 '실행중'에 포함됩니다.)

* 프로그램 그래프

project.pdf 문서에 주어진 언어를 그래프 형태로 녹여서 제공합니다.
그래프의 각 노드에는 이제 다음과 같은 명령들 중 하나가 매달려 있게 됩니다.

코드:
 
type command =
  | Assign of var * exp     (*   x := E *)
  | PtrAssign of var * exp  (*  *x := E *)
  | Assume of exp     (* Continue execution if exp is true, stop otherwise *)
  | AssumeNot of exp  (* Continue execution if exp is false, stop otherwise *)
  | Skip              (* No operation *)


- ./main.native -print <filename> 을 실행하시면, 입력으로 받은 프로그램을 그래프로
표현한 결과를 graph.png 파일에 그려 줍니다.

- 'graphPgm.mli' 파일을 살펴보시면, 여러분이 유용하게 사용하실 수 있는 인터페이스 함수들이 제공됩니다.
예를 들어, 프로그램 그래프의 모든 노드를 가져오는 함수, 프로그램의 마치막 노드를 가져오는 함수, 주어진 노드의 다음 노드(successor)들을 가져 오는 함수 등이 있습니다.

* 참고 : repeat C E 의 의미
퀴즈 답안을 보니 repeat 명령의 의미를 제각각 다르게 이해하고 계셨는데, 저는 교수님 수업 슬라이드 3장을 기준으로 해석하였습니다.
"C를 실행한 다음, E가 true이면 다시 repeat C E 를 반복, false이면 끝"
프로그램을 그래프로 변환할 때에도 이 semantics를 기준으로 하였으니 참고하세요.


* 도메인 functor

domFunctor.ml에 유용한 여러 functor들이 제공됩니다.
domExample.ml에 이 functor들을 어떻게 활용할 수 있는지 예시들이 있으니 참조하시기 바랍니다.
제공되는 functor의 기능을 수정하거나, 이를 사용하지 않고 필요한 도메인들을 직접 새로 구현하셔도 무방합니다.

*예제
example 디렉토리 아래에 몇몇 예제 프로그램들을 제공하며, 간단한 설명이 주석으로 제공됩니다.
채점도 이 예제들과 비슷한 수준의 테스트케이스를 가지고 진행될 것입니다.

*채점기준
- 우선, 여러분이 구현한 분석기는 안전(sound)해야 합니다. 짝수값이 될 수 있는 변수를 홀수값만 가진다고 해서는 안 되며, 다빈치 코드가 될 수 있는 코드를 다빈치 코드가 될 수 없다고 결론내려서는 안 됩니다.

- 안전성을 해치지 않는 범위 내에서, 분석기는 정확할수록 좋습니다. 짝수만 갖는 변수에 대해 짝수/홀수 모두 될 수 있다고 답하면 부분점수만 받을 것입니다.
얼마나 정확한 분석기를 만들어야 하는지에 대한 기준은, 제공해 드린 테스트케이스들입니다. 이 예제들을 정확하게 분석할 수 있는 정도면 충분합니다.

- 충실히 구현되지 않은 코드의 경우 감점받을 수 있습니다.
예를 들어, 다빈치 코드 분석에서 무조건 Yes라고 찍어서 답하는 코드를 제출하면 맞을 확률이 1/3이나 되는데, 이러한 답안에 온전히 점수를 드리지는 않을 것입니다.
(조교가 코드를 직접 열어보고 0점을 부여한다거나, 틀린 테스트케이스는 감점을 하는 채점방식을 택하도록 할 것입니다)
이는 열심히 구현하다 실수로 틀린 학생들이 억울해지는 상황을 방지하기 위함입니다.

------------

뼈대 코드 및 예제에 이상한 점이 있거나, 그래프와 관련하여 분석기 구현에 꼭 필요한데 빠져있는 기능이 있다거나 하면 알려주시기 바랍니다.

조교 드림


최재승 가 2016년6월14일 9:27에 수정함, 총 21 번 수정됨
위로
사용자 정보 보기 비밀 메시지 보내기
강동현



가입: 2011년 9월 26일
올린 글: 19

올리기올려짐: 2016년6월6일 23:25    주제: opam 설치 관련해서 인용과 함께 답변

1.
Ubuntu 14.04 LTS 사용중인데요
sudo apt-get upgrade / update 등을 다 해도 opam 버전이 1.1.1로 깔리네요.
더 이상 opam 1.1.1 버전에서의 opam init이 지원되지 않는 듯 해요 (failure으로 끝납니다)
그래서
https://opam.ocaml.org/doc/Install.html#Binarydistribution 부분대로 따라 하여 설치했습니다.

2. opam eval `opam config env` -> eval `opam config env` 인 듯 합니다.


강동현 가 2016년6월7일 11:39에 수정함, 총 1 번 수정됨
위로
사용자 정보 보기 비밀 메시지 보내기
최재승



가입: 2012년 9월 10일
올린 글: 211

올리기올려짐: 2016년6월7일 11:32    주제: 인용과 함께 답변

1.
opam 1.1.x 버전에서도 opam init은 작동합니다만, 제가 직접 세팅해 보니, opam init에서 "Too many open files" 에러로 인해 Failure가 발생하네요. (새로 설치한 Ubuntu 14.04.4 기준입니다)
이 경우 https://easyengine.io/tutorials/linux/increase-open-files-limit/ 글을 참조하여 파일 개수 제한을 올려 주시면 정상적으로 진행이 가능합니다.

2.
제보 감사합니다, 반영하여 수정하였습니다.

그 외에도 환경 세팅에서 문제가 있으면 알려주시기 바랍니다.
위로
사용자 정보 보기 비밀 메시지 보내기
유재민



가입: 2013년 10월 2일
올린 글: 11

올리기올려짐: 2016년6월9일 17:56    주제: PrimitiveSet 질문 인용과 함께 답변

안녕하세요.

module SS = PrimitiveSet(Var)
module ASD = Set.Make(Var)

이렇게 정의를 한 다음에 SS.elt와 ASD.elt가 같은 타입인지 코드를 실행시켜보면

Error: This expression has type ASD.elt = string
but an expression was expected of type
SS.elt = DomFunctor.PrimitiveSet(Program.Var).elt

와 같은 에러가 납니다. 제 생각에는 두 타입이 같아야 할 것 같은데요. 이와 같은 구현이 의도된 것인가요?
위로
사용자 정보 보기 비밀 메시지 보내기
최재승



가입: 2012년 9월 10일
올린 글: 211

올리기올려짐: 2016년6월9일 18:26    주제: 인용과 함께 답변

네, 조교팀도 해당 문제를 인지하고 뼈대코드를 수정하였습니다. (모듈 타입에 의해 elt 타입의 정의가 가려져 있어서 발생한 문제입니다.)
업데이트된 뼈대코드를 다시 받아주시기 바랍니다.

PS. 앞으로 질문은 별개의 새로운 글로 써 주시면 감사하겠습니다. 주제 마다 별개의 글로 운영되는 것이 좋기 때문입니다.

감사합니다.

조교 드림
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
글 쓰기   답변 달기     게시판 인덱스 -> 4541.664A Program Analysis (Spring 2016) 시간대: GMT + 9 시간(한국)
페이지 11

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


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