김재원
가입: 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
이렇게 했을때라야 비로소 동작하는데 파서문제 때문에 변수를 일일히 하나하나 만드는 수고를 해야 하는건지 -_-;;
ㅠㅠ |
이 부분에 대해 파서 가 아직 수정이 안된거 같은데..
어떻게 해야하는지요.. ^^ |
|