구문과 AST
소스 코드를 직접 다루는 것은 매우 불편하고 오류가 발생하기 쉽습니다. 따라서 다른 어떤 작업보다 먼저, 원시 소스 코드를 추상 구문 트리(Abstract Syntax Tree, AST)로 변환합니다. 이 작업에는 렉싱, 파싱, 매크로 확장, 이름 해석, 조건부 컴파일, 기능 게이트 검사, AST 검증 등 상당히 많은 작업이 수반됩니다. 이 장에서는 이러한 단계들을 모두 살펴봅니다.
특히, 이러한 작업들 사이에 항상 명확한 순서가 있는 것은 아닙니다. 예를 들어, 매크로 확장은 매크로와 임포트의 이름을 해석하기 위해 이름 해석에 의존합니다. 또한 파싱에는 매크로 확장이 필요하며, 매크로 확장은 다시 매크로의 출력을 파싱해야 할 수도 있습니다.