이전 주제 보기 :: 다음 주제 보기 |
글쓴이 |
메시지 |
윤용호
가입: 2008년 9월 23일 올린 글: 257
|
올려짐: 2008년10월30일 0:01 주제: 문제 설명에 문제가 있는 것 같습니다. |
|
|
예를 들어,
push 1::push 2::add:put::empty
는 K-- 프로그램 write 1+2와 같은 일을 하게 된다.
라는 문구가 있는데요.
위의 Sm5 프로그램의 결과는 화면에 3을 찍은 후 unit조차 아닌 완전히 '아무 값도 없는 상태'가 되고,
write 1+2의 의미정의에 따르면 화면에 3을 찍은 후 '값 3'을 가져야 합니다. 따라서 둘이 겉으로 보기에는 같은 일을 한다고 해도 의미가 다른 것 같습니다.
예를 들어 K--의 의미 정의 그대로라면 let x:=(write 1+2) in ... 이런 구문이 가능해야 하는데 문제의 예시에서는 이미 put 하는 시점에서 1+2의 값이 어디론가 사라져버렸으므로 이것이 불가능 하고,
따라서 주어진 Sm5 머신으로 write에 대한 semantic을 완벽하게 구현할 수 없
는 듯 합니다.
Sm5의 put instruction이 스택의 값을 제거하지 않아야 한다는 생각이 드는데...
제가 잘못 생각하고 있는건가요..?
덧 // Loop 어떻게 만들어야될지 머리가 아프네요 코드가 무한대로 만들어지는 사태... 힌트좀 굾굾 ㅠㅠ |
|
위로 |
|
|
이현민
가입: 2008년 9월 4일 올린 글: 18
|
올려짐: 2008년10월30일 1:00 주제: . |
|
|
저는 그래서 출력 후에 다시 값을 스택에 집어넣는 찝찝한 방식을 택했는데,
다른 방법이 있는지는 모르겠네요. |
|
위로 |
|
|
최원태
가입: 2006년 9월 16일 올린 글: 369
|
올려짐: 2008년10월30일 1:24 주제: |
|
|
Sm5로 K--의 semantics를 완벽하게 구현 가능해요.
심지어, K-도 Sm5위에 얹을 수 있습니다.
애초에 기계에 맞춰서 만들어진 언어가 아니면,
어떤 언어라도 컴파일러가 깔금하게 구현되지 않습니다.
구현에 다소의 트릭이 있는 편이 오히려 당연한 일이지요. |
|
위로 |
|
|
윤용호
가입: 2008년 9월 23일 올린 글: 257
|
올려짐: 2008년10월30일 8:41 주제: 저도... |
|
|
저도 출력 후에 다시 값을 스택에 집어넣는 찝찝한 방식을 택하려고 했는데
그것조차 단순하지가 않더군요. 스택 맨 위의 값을 두개로 뻥튀기하는 instruction이 없으니
다시 집어넣자면 메모리에 저장을 해두거나 write의 대상을 다시 수행해야 하는데
write(x:=x+1) 과 같은 프로그램을 그런식으로 두번 수행하도록 해버리면
x값이 의도보다 1 더 증가하는 현상이 발생하고... |
|
위로 |
|
|
|