게시판 인덱스

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

4-1 10번테스트셋과 관련하여..

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



가입: 2008년 10월 7일
올린 글: 13

올리기올려짐: 2008년10월22일 3:12    주제: 4-1 10번테스트셋과 관련하여.. 인용과 함께 답변

인용:
지금의 malloc 의 정의대로라면

아무거나 저장할 수 있는 n개의 배열을 잡는것처럼 동작합니다.(정확하게는 value형식의 n 배열이겠지만...)

그래서 테스트 10번을

let x := malloc(10)
in *x := 1;
*(x+1) := *x + 2; write *(x+1);
*(x+2) := {a := 1, b:= {}, c:= {}, d:= 4};
write *(x+2).d

이렇게 해봤더니 *(x+2)에 레코드를 넣는것 까지는 잘 되는데

*(x+2).d 가

STAR(
FIELD(
ADD(
VAR("x" ),
NUM(2)
),
"d"
)
)
로 파싱이 되네요


FIELD(
STAR(
ADD(
VAR( "x" ),
NUM( 2 )
)
),
"d"
)

가 되어야 하는데 저렇게 파싱이 되서 Location이 Record로 사용되는 오류가 발생합니다.

그래서 (*(x+2)).d 로 해서 실행하면 Fatal error: exception Lexer.Lexer.Eof 가 발생합니다. [..]

((*(x+2)).d )를 해도 마찬가지;

포인터에 레코드 넣고 쓸 수 있는 방법은 없을까요
시멘틱스 상으로도 사용할 수 있을것이라고 보이는데..

y:=x+2; write (*y).d

라고 해도 lexer.eof 가 발생하네요 *y.d라고 하면 위와같은 문제가 또 발생하구요--;;


y := *(x+2);
write y.d

이렇게 했을때라야 비로소 동작하는데 파서문제 때문에 변수를 일일히 하나하나 만드는 수고를 해야 하는건지 -_-;;
ㅠㅠ


이 부분에 대해 파서 가 아직 수정이 안된거 같은데..
어떻게 해야하는지요.. ^^
위로
사용자 정보 보기 비밀 메시지 보내기
최원태



가입: 2006년 9월 16일
올린 글: 369

올리기올려짐: 2008년10월22일 13:36    주제: 인용과 함께 답변

현재 올라가있는 뼈대는 그 문제를 해결한 버전입니다.

패치되기 전 버전 뼈대를 쓰고 계신가봅니다.
낡은 버전을 수동패치하는 법을 해달 글에 답글로 달아두었으니,
참고하세요.

https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=1303
위로
사용자 정보 보기 비밀 메시지 보내기 이메일 보내기 글 올린이의 웹사이트 방문
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2008) 시간대: GMT + 9 시간(한국)
페이지 11

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


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