1.2.1 코드
이 책의 목표는 인터프리터를 직접 만드는 것이다. 당연히 진짜 코드가 실려 있다. 실제로 인터프리터 구현에 필요한 모든 코드가 한 줄도 빠짐없이 포함되어 있다. 점점 커지는 구현체의 어디에 들어가는지 각 스니펫(snippet, 코드 조각) 하단에 따로 표시했다.
많은 언어 도서와 구현체에서는 이른바 컴파일러의 컴파일러(compiler-compiler)라고 불리는 렉스(Lex)8와 야크(Yacc)9 같은 도구를 사용한다. 더 하이레벨(high-level, 고수준)의 서술(description)을 입력받아 구현체에 필요한 소스 코드를 자동 생성하는 도구다. 이런 도구는 쓰는 사람들마다 호불호가 극명하게 갈리고 (어떤 이들은 종교적 신념까지 거론하면서) 찬반 의견이 분분하다.
야크(Yacc)는 문법 파일을 받아 컴파일러용 소스 파일을 생성하는 도구다. 컴파일러를 출력하는 '컴파일러'라는 점에서 컴파일러의 컴파일러라는 용어가 나왔다.
야크가 최초의 컴파일러의 컴파일러는 아니다. 그래서 '또 다른 컴파일러의 컴파일러(Yacc, Yet Another Compiler-Compiler)'라고 명명된 것이다. 이후 등장한 바이슨(Bison)10도 비슷한 도구인데, '야크(Yak)'와 발음이 비슷해 말장난처럼 붙여진 이름이다.11
이 모든 사소한 자기 참조(self-reference)와 말장난이 왠지 있어 보이고 재미있다고 생각된다면 여러분에게 딱 맞는 책을 구입한 셈이다. 그렇지 않다면 괴짜스런 언어 감각이 후천적으로 형성될 수도 있으니 기다리라!