게시판 인덱스

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

K-언어의 정의가 이상합니다.

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



가입: 2006년 9월 18일
올린 글: 43

올리기올려짐: 2006년10월13일 22:38    주제: K-언어의 정의가 이상합니다. 인용과 함께 답변

포인터 관련 테스트를 하던 중 오류를 발견하고 해결을 위해 씨름하다 보니, 정의에 이상한 점이 보이더군요.

코드:

let
 x := malloc(5)
in
 (*x) := 1
end


와 같이 할 경우, x := malloc(5)를 하면서 ASSIGNV가 호출되고, malloc을 수행한 결과는 (Location, memory)이므로 x의 주소에 Location이 들어갑니다.

그리고 (*x) := 1을 수행할 때, *x를 수행하면 x에 들어있는 값, 즉 Location을 먼저 얻어내서 메모리상에 이 Location에 들어있는 값을 인출하게 되는데, malloc을 하면서 메모리가 초기화되지 않은 상태이므로 Bot를 반환합니다. 그러면 ASSIGNG가 이를 받아서 Location이 아니므로 예외를 띄우게 되네요.

이를 해결하는 방법이 없는건 아니지만, *x의 반환값을 *x가 Lvalue로 쓰이는지, Rvalue로 쓰이는지에 따라 이원화하게 되어서 정의에는 어긋난 구현을 하게 되는데요, 그래도 상관없을까 하는 생각이 듭니다. Rvalue로 쓰일 경우에 문제가 생기는 부분도 있는 것 같구요.

그리고 파싱에도 문제가 있는지, *x := 5라고 쓰면 *(x := 5)로 인식해서 예외가 발생하네요.
_________________
...
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기
서상민



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

올리기올려짐: 2006년10월13일 23:03    주제: K-언어의 정의가 이상합니다. 인용과 함께 답변

K-의 정의, 우선순위 및 파싱하는 것을 잘 보면 메모리 allocation을 하고 나서는
코드:
let
 x := malloc(5)
in
 (*x) := 1
end

이 코드는 다음과 같이 수정되어야 원하는 동작을 보실 수 있을 겁니다.
저도 많이 고민했습니다. Wink
코드:
let
 x := malloc(5)
in
 (x) := 1;
 (x+1) := 2;
 write *x;
 write *(x+1)
end

왜 이렇게 해야 되냐면 왼쪽이 먼저 실행되기 위해서는 ()로 우선순위를 높여주어야 되고, 그래야 하나의 expression이 되므로 ASSIGNG가 됩니다.
그리고 (x)의 값은 allocate한 location이 되므로 그 location에 값을 assign할 수 있는 것입니다.
도움 되셨기를... ^^
위로
사용자 정보 보기 비밀 메시지 보내기
이준희



가입: 2006년 9월 18일
올린 글: 43

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

저역시 그런 스타일로 고쳐서 효과를 봤었습니다.

결국 *x를 Lvalue로는 쓰지 않는게 최선일까요 역시^^;;

근데 그런 경우도, E1 := E2에서 E1에 올수 없는 exp의 제한이 늘어나는 것이라 문제가 될것 같아서 말이죠...
_________________
...
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기
이광근
손님





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

훌륭합니다. 준희/상민씨의 질문답변 정확히 맞습니다. 역시!

고백: 의도하지 않은 퀴즈가 숨어있었던 K-의 정의였습니다.
- 강의에서는 *E 의 의미를 두가지(L-value, R-value)로 설명했지요.
:= 의 어느쪽에 나타나는 지에 따라 달라지는.
- 숙제의 K- 정의에는 한가지로만 한정시켰습니다.
- Quiz:
C프로그램 " x = malloc(1); *x = 1"의 효과를 가지는 K-의 프로그램을
작성하면?

-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