프로그램 설계
- 원시 요소들을 조합해서 복합 객체를 만듦
- 복합 객체들을 추상화해서 고수준의 프로그램 구축 요소들을 만듦
- 시스템 구조에 적합한 거시규모 관점들을 채용하여 모듈성을 유지
프로그램이 복잡해질수록 자바스크립트가 아닌 다른 언어로 설계하면 더 효과적으로 풀 수 있는 경우가 많다.
언어로 언어를 만드는 메타언어적 추상화metalinguistic abstraction
- 프로그래밍 언어의 평가기evaluator(혹은 해석기interpreter)는 해당 언어로 된 문장 혹은 표현식을 받아 이를 평가하는 하나의 프로그램이다.
- 즉 해석기는 프로그램이므로, 우리 스스로도 프로그래밍 언어를 설계할 수 있음
자바스크립트 자체에 대한 평가기를 구축해 본다.
4.1 메타순환적 평가기
평가 대상 언어와 같은 언어로 작성된 평가기를 메타순환적metacircular 평가기라 한다
자바스크립트 프로그램을 평가하는 평가기를 자바스크립트로 구현
평가의 환경 모형을 자바스크립트로 정식화
- 함수 적용 평가 시 → 함수 적용 표현식을 구성하는 부분 표현식(부분식)들을 평가하고, 그 다음 함수 부분식의 값을 인수 부분식들의 값들에 적용
- 복합 함수compound function를 일단의 인수들에 적용 시 → 함수의 본문을 새로운 환경에서 평가.