| 
			
				|  | 
 
 |  
 
	
		| 이전 주제 보기 :: 다음 주제 보기 |  
		| 글쓴이 | 메시지 |  
		| 최재승 
 
 
 가입: 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. 앞으로 질문은 별개의 새로운 글로 써 주시면 감사하겠습니다. 주제 마다 별개의 글로 운영되는 것이 좋기 때문입니다.
 
 감사합니다.
 
 조교 드림
 |  |  
		| 위로 |  |  
		|  |  
		|  |  
  
	| 
 
 | 새로운 주제를 올릴 수 없습니다 답글을 올릴 수 없습니다
 주제를 수정할 수 없습니다
 올린 글을 삭제할 수 없습니다
 투표를 할 수 없습니다
 
 |  
 Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
 Translated by kss & drssay
 |