1. 컴파일러
ㅇ 고급 프로그래밍 언어로 쓰인 원시 프로그램을,
- 당초 의미와 동등한, 컴퓨터로 실행 가능한 파일로 변환시키는,
- 번역 프로그램
ㅇ 즉,
- 고급 프로그래밍 언어로 작성한, 원시 코드 (Source Code)를,
- 컴퓨터 내부에서 사용 가능한 언어인, 기계어 (Machine Language)로 번역하고,
- 이를 실행가능(Excecutable)하게 만들어주는 프로그램
2. 컴파일 과정의 구분
ㅇ 컴파일 실행 단계 구분 (넓은 의미의 컴파일 : 때론, 전체 과정을 빌드build이라고도 함)
- 선행처리 (Preprocessing)
. 컴파일 전에 원시 프로그램을 처리하는 컴파일러의 한부분
- 컴파일 (Compile)
. 좁은 의미의 컴파일
- 결합 (Assemble) ☞ 어셈블러 참조
. 소스 코드의 컴파일 후 기계어 변환
. 때론, 어셈블러 단계를 거치지 않고, 컴파일러에서 바로 기계어로 변환되기도 함
. 어셈블러의 출력은 오브젝트 파일(object file)이라고 함
* 컴파일러에 의해 생성된 기계어 만으로, 직접 실행될 수도 있지만,
. 통상, 다른 코드들과 함께 엮어지어(링킹,로딩되어) 실행됨
- 링킹(Linking) & 로딩(Loading) : 실행 파일의 생성 ☞ 링커,로더 참조
. 주 기억장치의 할당 (확보)
. 연결 (Linking)
. 재배치 (Relocation)
. 프로그램 연결 적재 (Loading)
ㅇ 컴파일 논리적 단계 구분 (좁은 의미의 컴파일)
- 어휘 분석 : 토큰 분리 등
. 토큰이라는 의미있는 문법 단위 (어휘 단위 : 식별자,특수어,연산자 등)로 분리하는 것
- 구문 분석 : 구조화된 구문 트리 생성 등
. 어휘 단위들을 가져와서, 이들로부터 파스 트리라는 계층적 구조를 생성
- 의미 분석 : 타입 검사 (Type Checking)등
. 구문 분석 시 탐지가 어려운 타입 오류 등을 검사함
- 중간 코드 생성 : 원시 프로그램과 기계어 간의 중간 수준의 코드
. 중간 코드 (Intermediate Code) : 중간 수준의 코드로써, 다른 언어에서 공유 가능
.. 例) Pascal의 P 코드, Java의 바이트 코드 등
- 코드 최적화 : 프로그램 크기를 축소하거나, 실행 속도를 높이는 등
. 기계어 상에서 수행하기 어려워, 중간 코드를 대상으로 이루어짐
- 목적 코드 생성 : 중간 코드 버전을 동등한 기계어로 변환시킴
. 목적 코드 (Object Code) : 기계어로 번역된 파일