이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
이연석
가입: 2008년 9월 5일 올린 글: 17
|
올려짐: 2015년11월8일 1:58 주제: SM5에서 놓치기 쉬운 부분 |
|
|
실수하는 분들이 많지 않을까 싶은 부분이 있어서 글 남깁니다.
k--의 정의를 보면, for와 while의 실행 결과값이 다릅니다.
while의 값은 WHILET의 경우 실행 결과가, WHILEF의 경우 .이 됩니다.
그런데 for의 값은 FORT, FORF 둘 다 .입니다.
이렇게 정의하는 게 오히려 translator 구현하기에 깔끔하기는 한데... 대충 지나가기 쉬운 부부인 것 같습니다.
이외에도 k-- expression들의 semantics에 대해 문서를 자세히 살펴보시는 게 좋을 것 같습니다.
그리고 k-- expression의 값과 sm5의 stack 상태 변화와의 관계도 잘 생각해보시는 게 좋을 것 같습니다.
얼마나 자세하게 이야기해도 되는지 몰라서 내용이 조금 추상적이네요.
아무튼 숙제 하시는 데 도움이 되면 좋겠습니다. |
|
위로 |
|
 |
강동호
가입: 2015년 9월 3일 올린 글: 17
|
올려짐: 2015년11월8일 21:51 주제: 조언 감사합니다! |
|
|
안 그래도 지금 계속 이상한 에러가 떠서 뭔지 확인해봤는데 제가 맨 마지막에 semantic에서 값을 로드하거나 하는 하는 부분을 덜 구현했더라구요!
좋은 팁 주셔서 감사합니다! |
|
위로 |
|
 |
김형모
가입: 2014년 9월 3일 올린 글: 37
|
올려짐: 2015년11월9일 22:13 주제: |
|
|
while은 언젠가 false에서 멈추고 재귀적으로 전부 .이 되지 않나요? |
|
위로 |
|
 |
이연석
가입: 2008년 9월 5일 올린 글: 17
|
올려짐: 2015년11월10일 16:20 주제: |
|
|
김형모 씀: | while은 언젠가 false에서 멈추고 재귀적으로 전부 .이 되지 않나요? |
네. 맞습니다.
K.WHILE 바깥에서 보면 전부 .이 나오죠.
다만 어떻게 해서 .이 나왔느냐는 달라질 수 있을 것 같아요.
말씀하신대로 재귀적으로 .이 될 수도, 그냥 .이 될 수도 있겠지요.
(이 과정이 채점에 영향을 끼치지는 않을 것 같네요.)
괜한 예를 들었나 싶기도 하네요.
요지는 expression의 semantics 정의를 잘 보자 같은 거예요. |
|
위로 |
|
 |
조상우15
가입: 2015년 9월 7일 올린 글: 27
|
올려짐: 2015년11월10일 21:55 주제: |
|
|
while의 예는 아니지만 semantics 대로 하는 것이 옳은 예 중의 하나가
write( write (1) )
과 같은 경우 입니다.
그냥 생각하기에 write(1)은 결과가 unit 일것 같지만 실제 k-- semantics에서는 write(e)의 결과는 e -> v 인 v 로 정의 되어 있어서 write(1) 은 1이 되고 덕분에 write(write(1))의 결과는 1 1 이 나옵니다. |
|
위로 |
|
 |
|