박대준
가입: 2005년 10월 7일 올린 글: 245
|
올려짐: 2006년6월3일 1:28 주제: |
|
|
서보경 씀: | c1에서 실행한 결과가 c2에 어떻게 들어가나요?!
(c1에서 실행한 결과는 state니깐 int형인데;;; 그러면
c2에는 cmd 니깐 인자가 exp 아니면 cmd 만 들어가야 하는데;;;
어떻게 그 결과를 넣을 수 있나요? |
c2에 c1의 결과가 실제로 들어간다는 것이 아니라 개념적으로 그렇다는 것입니다.
서보경 씀: | 그러면 SEQUENCE (c1,c2) 라면
어떻게 실행 되는건지 잘 모르겠습니다.;;; |
cmd가 만들어지는 문법을 잘 보시면,
항상 와 같은 부분이 그 속에 들어가있음을 알 수 있습니다.
즉, cmd가 실행되면, 항상 기계상태를 바꾼다는 의미지요.
여기서 기계상태란 우리가 일반적으로 말하는 메모리를 생각하시면 됩니다.
하지만 프로그램의 변수가 1개밖에 없기 때문에, 우리가 일반적으로 생각하는 큰 메모리가 아니라, 공간이 달랑 한개 있는 메모리를 생각하면 될 겁니다.
(레지스터라고 생각하는 것도 나쁘지 않겠군요.)
즉, 우리가 프로그램을 실행시키기 위해서는 위에서 말한 공간 한개가 필요합니다. 거기다가 매번 커맨드를 실행할때마다 그 공간에 적절한 값을 적어놓겠지요.
적어놓는 이유는 다음계산에 필요할때 한번 쳐다보기(lookup) 위함입니다.
따라서 이러한 공간을 옆에다가 놔두고,
프로그램의 커맨드를 하나씩 실행시켜가면서 계속 그 공간의 값을 바꾸는 것이죠.
가 바로 그렇게 하는 것입니다.
c1을 실행하고 나면 공간에다 어떤 값을 적어두게 될 것입니다.
그리고 난 후, 그 공간에 적어둔 값을 쳐다보면서 c2 를 실행하게 되는 것이죠.
물론 c2 를 실행할 때 적어둔 값이 필요없을지도 모릅니다. 하지만 만약을 대비해서 적어두는 겁니다.
이렇게 우리가 뭔가를 적어두고, 바꾸고 하는 현상을
"기계상태가 변해간다" 라고 하고,
그렇게 적어둔 것을 가지고 나중에 쳐다보는 것을
"기계상태가 전파된다", "기계상태가 다음 단계로 들어간다" 라고 하는 겁니다.
간단히 말하면, exeval 은 pgm 과 state 두개의 변수를 받아서
pgm의 부분 커맨드를 실행시켜가는 단계단계마다 state를 갱신하여
다음 단계로 같이 넘겨주는 것입니다. 함수의 인자로 넘겨주는 것이죠.
서보경 씀: | 그리고 CHOICE 는 하나를 선택한다고 해서 실행한다고 했는데;;
그러면 CHOICE 에서 실행한 결과는 둘중 하나만 출력 하는거예요? ;;; |
단순히 실행을 한 다면 둘 중 하나의 결과만 나오겠지만,
이번 숙제는 싹쓸이 실행기 입니다.
말 그대로 가능한 모든 조합을 고려해서 나올 수 있는 모든 결과를 모아서 출력해주는 것입니다.
서보경 씀: | VAR가 의미하는게 무엇인지 잘 모르겠습니다 |
기계상태에 저장된 값을 쳐다볼때(lookup) 사용하는 것입니다.
즉, 문법 맨 마지막줄에 있는 를 nML 의 물건으로 표현한 것입니다.
예를 들어,
이라는 커맨드는 다음과 같이 nML 의 물건으로 표현될 것입니다.
코드: | ASSIGN (ADD (VAR, NUM (1))) |
|
|