sicp.io
5.5.8 · 트리에서 명령으로

컴파일러는 일의 표현을 바꾼다.

수업용 컴파일러는 표현식 트리를 나중에 별도 기계가 실행할 스택 명령으로 바꿀 수 있습니다.

생각해 볼 질문

식 트리는 어떻게 선형 명령열이 될까요?

  • 문법 데이터에서 상수와 산술 명령 내보내기
  • 스택 코드에서 피연산자 순서 보존하기
  • 컴파일과 기계 실행 분리하기

compile은 왼쪽 피연산자 코드, 이어서 오른쪽 피연산자 코드, 마지막으로 산술 명령 하나를 내보냅니다. 재귀는 중첩된 식을 선형 리스트로 펼칩니다.

execute는 상수를 push합니다. 산술 명령은 오른쪽 값과 왼쪽 값을 pop하고 둘을 결합하여 결과를 push합니다. 남은 코드가 없으면 스택 맨 위의 값이 프로그램 값입니다.

SICP 코드UTF-8 1,088 / 1,048,576바이트
예제
결과
출력
진단
실행 추적0 / 0 개 이벤트
    실행은 브라우저 안에서 이루어지며 프로그램 결과와 실행 추적을 보여줍니다.
    예상 결과

    첫 프로그램은 내보낸 명령 다섯 개와 실행된 값 17을 반환합니다.

    실행 추적에서 볼 점

    재귀적인 compile 호출을 이후의 execute 호출과 분리하세요. 실행하는 동안 각 명령은 스택을 바꾸면서 코드를 소비합니다.

    직접 해보기

    프로그램을 수정하고 결과를 비교해 보세요.

    (+ 1 (* 2 (+ 3 4)))를 컴파일하세요. 실행하기 전에 명령 리스트를 적으세요.

    힌트 보기

    각 수는 const를 내보냅니다. 각 복합 식은 두 피연산자 뒤에 연산자를 내보냅니다.

    이 수업 완료하기

    이 장의 총 23개 수업 중 0개 완료0%