| 이전 주제 보기 :: 다음 주제 보기 |
| 글쓴이 |
메시지 |
이기석
가입: 2005년 10월 3일 올린 글: 33
|
올려짐: 2005년10월19일 16:35 주제: parser구현에 문제가 있는 듯 합니다 |
|
|
아래 글에서
| 코드: |
let
x := 4
in
x := malloc(5);
write 3;
*x := 5;
write x
end
|
위 코드에 대해 여러 의견이 오갔는데 이를 실행시켜보고 결과를 확인하던 중
이상을 발견했습니다.
| 코드: |
torms3@upnl:~/ProgrammingLanguage/hw3/ex1$ ./run examples/test.k-
3
Fatal error: exception 1.K.Error("Unit type is used as Location type")
|
실행 결과가 위와 같은데 아무리 봐도
에서 문제가 있다면
*x 의 값이 Bot 이기 때문에 "not initialized" 에러가 나야 할 것 같았습니다.
그래서 다음과 같이 확인해 봤습니다.
첫 번째
| 코드: |
let
x := 4
in
x := malloc(5);
write 3;
*(x := 5);
write x
end
|
| 코드: |
torms3@upnl:~/ProgrammingLanguage/hw3/ex1$ ./run examples/test.k-
3
Fatal error: exception 1.K.Error("Unit type is used as Location type")
|
두 번째
| 코드: |
let
x := 4
in
x := malloc(5);
write 3;
( *x ) := 5;
write x
end
|
| 코드: |
torms3@upnl:~/ProgrammingLanguage/hw3/ex1$ ./run examples/test.k-
3
Fatal error: exception 1.K.Error("not initialized")
|
K- 문서 정의에 보면 *의 우선순위가 := 보다 높은 것으로 나와있습니다.
즉 *x := 5 의 경우
(*x) := 5 로 parsing 해야하는데 실제로는
*(x := 5) 로 parsing 하는 것 같네요.
처음 실행 결과를 보고 제가 잘못 구현한 줄 알고
코드의 바다속에서 꽤나 오래 방황했습니다.
참고로 (*x) := 5 라고 하면 (*를 주석의 시작으로 인식해버립니다.
( *x ) := 5 와 같이 한 칸 띄워줘야 하네요-
조금 황당한 경우였습니다.  |
|
| 위로 |
|
 |
이기석
가입: 2005년 10월 3일 올린 글: 33
|
올려짐: 2005년10월19일 17:28 주제: Re: parser구현에 문제가 있는 듯 합니다 |
|
|
| 이기석 씀: | K- 문서 정의에 보면 *의 우선순위가 := 보다 높은 것으로 나와있습니다.
즉 *x := 5 의 경우
(*x) := 5 로 parsing 해야하는데 실제로는
*(x := 5) 로 parsing 하는 것 같네요.
|
혹시나 해서
*malloc(1) := 3
을 실행시켜보니 이번엔
(*malloc(1)) := 3
와 같이 제대로 parsing이 되는 것 같네요-
음; parser가 ASSIGNV와 ASSIGNG를 차별하는건가요;
아님 제가 구현을 잘못한걸까요;
아님 parser가 이상한걸까요;
미궁에 빠져들었습니다.
내일 타과목 시험이 있어서 더 이상 붙잡고 있을 수가 없네요-
다른 분들과 조교님의 명쾌한 답변 부탁드립니다- |
|
| 위로 |
|
 |
김덕환
가입: 2005년 8월 29일 올린 글: 190
|
|
| 위로 |
|
 |
김덕환
가입: 2005년 8월 29일 올린 글: 190
|
올려짐: 2005년10월19일 17:49 주제: Re: parser구현에 문제가 있는 듯 합니다 |
|
|
| 이기석 씀: | 음; parser가 ASSIGNV와 ASSIGNG를 차별하는건가요;
아님 제가 구현을 잘못한걸까요;
아님 parser가 이상한걸까요;
미궁에 빠져들었습니다.
내일 타과목 시험이 있어서 더 이상 붙잡고 있을 수가 없네요-
다른 분들과 조교님의 명쾌한 답변 부탁드립니다- |
기석 님 구현이 어떤 지는 제가 알 수가 없고, 파서도 들여다 보는데 시간이 필요합니다.
그래서, 연산 순위 때문에 피해보시는 분은 없도록 검사할 때 사용할 테스트 프로그램들은 충분히 괄호를 사용하겠습니다. 충분하게 괄호를 친 프로그램에 대해 잘 작동하면 되겠습니다. _________________ TheyAreAsSmartAsYouAre |
|
| 위로 |
|
 |
|