게시판 인덱스

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

2번 문제 질문입니다

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2006)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
서상민



가입: 2006년 9월 11일
올린 글: 25

올리기올려짐: 2006년10월29일 23:47    주제: 2번 문제 질문입니다 인용과 함께 답변

K-에 있는 exp 중 unit을 뱉는 것들은 그 unit을 받아서 처리할 수 있다고 봐야 하나요?
만약 그렇다면 사용자가 unit 값을 선언할 수 있어야 하는데, 뼈대에서 주어진 lexer는 예전(HW3)에는 처리할 수 있었던 unit을 키워드로 인식하지 못합니다.
예를 들어,
코드:
let
  x := unit
in
  if (write 3) = x then write 4 end
end

이 K- 프로그램은 예전에는 돌아갔지만, 이번 뼈대에서는 돌아가지 않습니다.
unit을 variable로 인식하기 때문이죠.
구현을 하다 뭔가 이상하게 생각되서 그런데요, K-에 있는 exp 중 unit을 뱉는 것들은 SM5에서는 unit을 뱉지 않는다고 보는게 맞지 않을까요?
위에서 예로 든 것처럼,
코드:
(write 3) = x

이렇게 비교하는 것은 K- 정의의 syntax에는 맞지만, 의미는 없는 프로그램이지 않나요?
write 같은 것이 unit을 리턴한다면 쓸데없이 스택에 쌓이고, 그것이 문제가 될 수 있을 거 같습니다. (저만 그런가요? Crying or Very sad )
SM5에서는 unit을 리턴하는 expression들은 unit을 리턴하지 않게 하는게 맞을 것 같은데, 그게 맞는 것인지 궁금합니다.
무엇보다
코드:
if (write 3) = (write 2) then write 4 end

이 프로그램이 잘 돌아가는 K-- 프로그램에 해당하는지 궁금합니다.
(사실 잘 돌아가긴 합니다. Confused )
위로
사용자 정보 보기 비밀 메시지 보내기
장민석



가입: 2006년 9월 5일
올린 글: 165

올리기올려짐: 2006년10월30일 1:52    주제: 인용과 함께 답변

헉...이런 복병이;;

코드:
if (write 3) = (write 2) then write 4 end


이런 것도 K--에서 잘 돌아가는 프로그램이라면 상당히 귀찮아지는데요 -_-
위로
사용자 정보 보기 비밀 메시지 보내기
박대준



가입: 2005년 10월 7일
올린 글: 245

올리기올려짐: 2006년10월30일 17:17    주제: 인용과 함께 답변

서상민 씀:
코드:
let
  x := unit
in
  if (write 3) = x then write 4 end
end

이 K- 프로그램은 예전에는 돌아갔지만, 이번 뼈대에서는 돌아가지 않습니다.
unit을 variable로 인식하기 때문이죠.
정말 죄송합니다. 제가 lexer를 수정한다는 것이, unit을 키워드에서 빠뜨렸군요. 뼈대의 lexer.nl 을 수정했으니, 다시 받아서 사용하시기 바랍니다.

서상민 씀:
코드:

(write 3) = x

이렇게 비교하는 것은 K- 정의의 syntax에는 맞지만, 의미는 없는 프로그램이지 않나요?
만약 x의 값이 unit이라면, 위 비교문은 의미있는 프로그램입니다. true 라는 값을 갖는 프로그램이지요.

서상민 씀:
코드:

if (write 3) = (write 2) then write 4 end

이 프로그램이 잘 돌아가는 K-- 프로그램에 해당하는지 궁금합니다.
(사실 잘 돌아가긴 합니다. )
네, 잘 돌아가는 프로그램입니다.
K- 의미 정의 문서에 보시면, 위 프로그램의 의미가 명확히 정의되어 있습니다.

의미가 있느냐 없느냐와
계산된 값이 쓸모가 있느냐 없느냐와는 다른 문제입니다.
unit을 리턴하는 식의 값이 쓸모가 없을 경우도 있겠지만,
쓸모가 있을 경우도 있습니다.
하지만 쓸모가 없다고 해서, 의미가 없는 것은 아닙니다.

서상민 씀:
write 같은 것이 unit을 리턴한다면 쓸데없이 스택에 쌓이고, 그것이 문제가 될 수 있을 거 같습니다. (저만 그런가요? )
SM5에서는 unit을 리턴하는 expression들은 unit을 리턴하지 않게 하는게 맞을 것 같은데, 그게 맞는 것인지 궁금합니다.
unit을 리턴해서 쓸데없이 스택에 값이 쌓이는 것처럼 보일지 모르지만, 꼭 필요한 경우가 있기때문에(위의 예처럼), unit도 차곡차곡 스택에 쌓아주어야 합니다.

어떤 경우때문에, 위와 같은 질문을 하시는지 이해가 갑니다.
분명, 이상한 경우에 unit이 튀어나와 문제가 발생했을 것으로 보입니다.
하지만, 그렇다고 unit을 스택에 쌓지 않으면, 직접 위에 예를 드신 것처럼 잘 돌아가는 프로그램을 잘 돌아가지 않는 것으로 간주해버리고 싶은 생각이 들 것입니다.
분명, 구현 중에 unit을 스택에서 잘 빼주지 않는 부분이 있을 것입니다.
누구나 겪는 문제이니, 아름다운 방법(의미 정의 문서와 동일하게)으로 해결하시기 바랍니다.

--
원래 이런 질문이 초기에 나왔어야 하는 건데,
다들 잘 해결하셔서 없었던 건지...
숙제 마감 시한이 얼마남지 않았는데, 염려가 되는군요.
참고로, 이번 숙제의 난이도가 꽤 높기 때문에, 채점 테스트 셋도 약간 까다로울 수 있습니다.
딜레이와 숙제의 완성도를 잘 고려하셔서 진행하시기 바랍니다.
위로
사용자 정보 보기 비밀 메시지 보내기
이준



가입: 2006년 9월 7일
올린 글: 30

올리기올려짐: 2006년10월31일 3:05    주제: 인용과 함께 답변

이제야 깨달았습니다 +_+
저의 sm5는 unit과는 친하지 않군요..ㅡ,.ㅡ;
아무도 unit을 stack에 쌓아주지 않는...
k-와는 다른 의미의 프로그램이 되어있네요..ㅡ,.ㅡ;

여기서 질문하나드릴께요....
제 sm5는 모든 assign문등등등이 unit을 배출하지 않습니다.
딜레이와 완성도를 고려하라하셨는데....

모든 필요한 구문에 unit을 배출하게 하고 딜레이 하는거하고..
이미 낸 - unit하고는 안친한 - 2.n을 내버려 두는게 나을까요..ㅡ,.ㅡ;

무책임한 질문일까요? +_+;; 죄송합니다만 저에겐 그런 중차대한
사항을 판단할 기준이 서있질 않아서요..^^;;;;

하나만 더 물어볼께요;;
2.n을 딜레이를 하기로 하고 수정을 했다고 하면요..

3.n에 집어넣을 trans역시도 수정을 해야하는데요...
이러면 엄하게 3.n도 쌍으로 딜레이를 먹게되는군요..ㅡ.ㅜ

저는 빨강 delay가 싫어요..;; 살려주세요 ㅜ.ㅜ
위로
사용자 정보 보기 비밀 메시지 보내기
박대준



가입: 2005년 10월 7일
올린 글: 245

올리기올려짐: 2006년10월31일 12:00    주제: 인용과 함께 답변

딜레이 감점은 2번이 3점, 3번이 4점입니다.

2번은 채점시 K-와의 일관성을 중심으로 채점할 예정이기 때문에, 완성도가 높은 것이 유리할 듯 합니다.
3번은 채점의 목표가 얼마나 재귀호출의 비용을 줄였는지 확인하는 것에 있기 때문에, K-와의 일관성에 그리 신경쓰지 않을 것입니다.

참고하셔서, 진행하시면 좋겠네요.
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2006) 시간대: GMT + 9 시간(한국)
페이지 11

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


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