컴파일러는 하나의 프로그램으로 이를 구현한 소스 파일이 존재
스캐너 / 파서 / 바인더 / 체커 / 이미터
.
.
.
TS 컴파일러
: tsc 명령어로 실행
: tsconfig.json에 명시된 컴파일 옵션을 기반으로 컴파일 수행
먼저 전체적인 컴파일 과정을 관리하는 프로그램( 인스턴스 )가 생성됨.
컴파일할 TS 소스파일과 소스 파일 내 import된 파일을 불러오는데, 가장 최초로 불러온 파일 기준으로 컴파일 과정 시작됨.
: TS 소스 파일을 어휘적으로 분석하여 토큰을 생성하는 역할
( = 소스 코드를 작은 단위로 나누어 의미 있는 토큰으로 변환하는 작업을 수행 )
: 스캐너가 소스 파일을 토큰으로 나눠주면 파서는 그 토큰 정보를 이용하여 AST를 생성.
AST의 최상위 노드는 TS 소스파일, 최하위 노드는 파일의 끝 지점으로 구성.
: 이렇게 생성된 토큰 목록을 사용하여 구문적 분석을 수행.
-> 이를 통해 코드의 실질적인 구조를 노드 단위 트리 형태로 표현.
( 각각의 노드는 코드상의 위치, 구문 종류, 코드 내용과 같은 정보를 담음. )
: 체커 단계에서 타입 검사를 할 수 있도록 기반을 마련하는 것.
: 타입 검사를 위해 '심볼'symbol이라는 데이터 구조 생성.
-> 심볼 : 이전 단계의 AST에서 선언된 타입의 노드 정보를 저장.
체커 : AST의 노드를 탐색하면서 심볼 정보를 불러와 주어진 소스 파일에 대해 타입 검사를 진행.
-> 체커의 타입 검사는 다음 컴파일 단계인 이미터에서 실행.
이미터 : TS 소스 파일을 변환하는 역할.
-> TS 파일 소스를 JS파일과 d.ts(타입 선언)파일로 생성
emitter.ts 소스 파일 내부의 emitFiles()함수를 사용 -> TS 소스 변환을 진행.