게시판 인덱스

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

숙제 3-1에서 generic assign질문입니다 - 테스트셋 첨부

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





올리기올려짐: 2005년10월18일 16:46    주제: 숙제 3-1에서 generic assign질문입니다 - 테스트셋 첨부 인용과 함께 답변

코드:

let
   x := 4
in
   x := malloc(5);
   write 3;
   *x := 5;
   write x
end



다음과 같은 코드입니다.
x를 Num형 변수로 잡아서 4를 assign한다음에
in 안에서 x에다가 malloc으로 생성된 location을 집어넣게 됩니다.
사실 에러는 여기서 나는게 마땅하겠지요......
(스펙을 보았을 때)
하지만 아무리 해도 거기서 에러가 날 수 있게 만들지를 못하겠습니다.
여러분은 어떤지 궁금해서,
그리고 어떻게 해결해야 할지 궁금해서 질문합니다
제가 예상한 결과는

실행하자 마자
코드:

포인터가 아닌 주소를 참조했습니다

와 같은 에러가 나는 것인데요 어떠세요?
위로
강신행



가입: 2005년 10월 18일
올린 글: 5

올리기올려짐: 2005년10월18일 16:48    주제: 일단 제 결과는 이렇습니다. 인용과 함께 답변

코드:

martini:~/pl3> ./run examples/test3.k-
3
Fatal error: exception 1.K.Error("Unit type is used as Location type")
martini:~/pl3>

위로
사용자 정보 보기 비밀 메시지 보내기
이기석



가입: 2005년 10월 3일
올린 글: 33

올리기올려짐: 2005년10월18일 19:19    주제: 인용과 함께 답변

스펙에 보면 generic assign 에서

왼쪽에 VAR 이 오지 못한다고 돼있으니깐

당연히 타입체크해서 익셉션 발생시켜줘야 되는것 아닌가요?;
위로
사용자 정보 보기 비밀 메시지 보내기 MSN 메신저
박대준



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

올리기올려짐: 2005년10월18일 20:01    주제: 인용과 함께 답변

주어진 semantics 에 따르면,

코드:
x := malloc(5);


는 맞는 표현입니다. 단지 우리가 생각하는 의미가 아닌 것 뿐이죠.
저 코드의 의미는 malloc(5) 해서 생긴 주소값을 단순히 int value 로 생각하고 x 에 넣는 것 뿐입니다.

따라서, 다음 코드는 의미가 없죠.

코드:
*x := 5;


왜냐면, x 는 int value 를 저장하고 있기 때문에, * 를 붙일 수 없는 겁니다.


솔직히, 처음 코드는 generic assign 이 아닙니다.

굳이.. generic assign 을 하고 싶으면, 다음과 같이 사용하셔야 합니다.

코드:
(x + 0) := malloc(5);


그러면 우리가 생각한 대로 에러가 날 겁니다.




K- 는 C 와 포인터 사용이 비슷하긴 하지만 좀 달라요.
그 때문에, 수업시간에 혼란스러운 점이 있어서 한참 토론하기도 했죠.
어떠한 의미 정의가 자연스러운지는 모르겠지만, 아무튼 좀 혼동되죠.



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

이기석 씀:
스펙에 보면 generic assign 에서

왼쪽에 VAR 이 오지 못한다고 돼있으니깐

당연히 타입체크해서 익셉션 발생시켜줘야 되는것 아닌가요?;


ASSIGNV exp 의 semantics 를 보면,
x 는 id 가 맞고,
malloc(5) 는 exp 이 맞고, malloc(5) 가 Loc 이라는 Value 를 리턴하기 때문에,
전혀 semantics 상으로 문제없는 코드라고 생각합니다.

그리고 type check 은 이번 숙제에는 포함되지 않는 것 같은데, 아닌가요?
위로
사용자 정보 보기 비밀 메시지 보내기
이기석



가입: 2005년 10월 3일
올린 글: 33

올리기올려짐: 2005년10월19일 2:22    주제: 인용과 함께 답변

박대준 씀:

이기석 씀:
스펙에 보면 generic assign 에서

왼쪽에 VAR 이 오지 못한다고 돼있으니깐

당연히 타입체크해서 익셉션 발생시켜줘야 되는것 아닌가요?;


ASSIGNV exp 의 semantics 를 보면,
x 는 id 가 맞고,
malloc(5) 는 exp 이 맞고, malloc(5) 가 Loc 이라는 Value 를 리턴하기 때문에,
전혀 semantics 상으로 문제없는 코드라고 생각합니다.

그리고 type check 은 이번 숙제에는 포함되지 않는 것 같은데, 아닌가요?


원래 글이 generic assign에 관한 질문이어서 착각을 했습니다.

코드:
 x:= malloc(5);

이부분을 ASSIGNG로 착각했습니다-;

문제가 된 부분은 ASSIGNV 가 맞네요-

그리고 제가 말한 type checking은 PL에서의 type checking을 말하는게 아니라

nml 상에서 패턴 매칭을 통한 타입 체크를 말한 것이었습니다. ^^

ASSIGNV에서 패턴 매칭되기 때문에 실제로 검사해줄 필요는 없지만요ㅎㅎ
위로
사용자 정보 보기 비밀 메시지 보내기 MSN 메신저
이광근



가입: 2005년 8월 29일
올린 글: 68

올리기올려짐: 2005년10월19일 9:50    주제: 오해 인용과 함께 답변

쓰레드가 오해가 있는듯 하군요.

"x := malloc(5)"
은 의미구조(semantics)정의에 아무 문제가 없다.
x라는 주소에 malloc(5)가 만드는 주소를 넣고,

"*x := 3"
은 malloc된 주소(*x의 값 = x에 있는 값 = malloc(5)된 주소)
에 3을 넣고

그리곤 "write x"가 의미가 없구나. 정의에 보면, 정수값만 출력가능한데
식 "x"가 x에 있는 값 (malloc된 주소값)을 리턴하므로.

-K
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
현경렬



가입: 2005년 9월 28일
올린 글: 19
위치: 스쿨

올리기올려짐: 2005년10월19일 11:51    주제: Re: 오해 인용과 함께 답변

이광근 씀:
쓰레드가 오해가 있는듯 하군요.

"x := malloc(5)"
은 의미구조(semantics)정의에 아무 문제가 없다.
x라는 주소에 malloc(5)가 만드는 주소를 넣고,

"*x := 3"
은 malloc된 주소(*x의 값 = x에 있는 값 = malloc(5)된 주소)
에 3을 넣고

그리곤 "write x"가 의미가 없구나. 정의에 보면, 정수값만 출력가능한데
식 "x"가 x에 있는 값 (malloc된 주소값)을 리턴하므로.

-K


K- 정의 문서를 보면, E1 := E2 에서 E1을 계산한 값은 Location 이어야 하지 않나요?
그러니까
코드:

x := malloc(3);
*x := 3

의 경우에는 (*x의 값 = x에 있는 값 = Bot)에 3을 넣으려고 하니까,
(Bot은 Location이 아니므로)
에러가 발생하는 게 맞을 것 같아요. (뜨끔)
_________________
Programming Rumble
위로
사용자 정보 보기 비밀 메시지 보내기 글 올린이의 웹사이트 방문
이광근



가입: 2005년 8월 29일
올린 글: 68

올리기올려짐: 2005년10월19일 14:26    주제: Re: 오해 인용과 함께 답변

현경렬 씀:
이광근 씀:
쓰레드가 오해가 있는듯 하군요.

"x := malloc(5)"
은 의미구조(semantics)정의에 아무 문제가 없다.
x라는 주소에 malloc(5)가 만드는 주소를 넣고,

"*x := 3"
은 malloc된 주소(*x의 값 = x에 있는 값 = malloc(5)된 주소)
에 3을 넣고

그리곤 "write x"가 의미가 없구나. 정의에 보면, 정수값만 출력가능한데
식 "x"가 x에 있는 값 (malloc된 주소값)을 리턴하므로.

-K


K- 정의 문서를 보면, E1 := E2 에서 E1을 계산한 값은 Location 이어야 하지 않나요?
그러니까
코드:

x := malloc(3);
*x := 3

의 경우에는 (*x의 값 = x에 있는 값 = Bot)에 3을 넣으려고 하니까,
(Bot은 Location이 아니므로)
에러가 발생하는 게 맞을 것 같아요. (뜨끔)


경렬이가 맞네요.
식 "*x"의 값은 변수 식 "x"의 값-- 즉 malloc된 주소-- 에 있는 값(*) 이므로 Bot 이네요. Wink
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2005) 시간대: GMT + 9 시간(한국)
페이지 11

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


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