1. 컴파일러
ㅇ 고급 프로그래밍 언어로 쓰인 프로그램을,
- 의미상으로는 동등하나, 컴퓨터로 즉시 실행 가능한 형태의 목적 프로그램으로 변환시키는
- 번역 프로그램
ㅇ 즉,
- 고급 프로그래밍 언어로 작성한 원시 코드(Source Code)를,
- 컴퓨터 내부에서 사용하는 언어인 기계어(Machine Language)로 번역하고,
- 이를 실행가능(Excecutable)하게 만들어주는 프로그램
2. 전체 컴파일 과정
ㅇ 컴파일 실행 단계 구분 (넓은 의미의 컴파일 : 때론, 전체 과정을 build 이라고도 함)
- 선행처리 (Preprocessing)
. 컴파일 전에 원시 프로그램을 처리하는 컴파일러의 한부분
- 컴파일 (Compile)
. 좁은 의미의 컴파일
- 결합 (Assemble) ☞ 어셈블러 참조
. 소스 코드의 기계어 변환
. 어셈블러의 출력은 오브젝트 파일(object file)이라고 함
- 링킹(Linking) & 로딩(Loading) : 실행 파일의 생성 ☞ 링커,로더 참조
. 주 기억장치의 할당(확보)
. 연결(Linking)
. 재배치(Relocation)
. 프로그램 연결 적재(Loading)
ㅇ 컴파일 논리적 단계 구분 (좁은 의미의 컴파일)
- 어휘 분석 : 토큰 분리 등
- 구문 분석 : 구조화된 구문 트리 생성 등
- 의미 분석 : 형(Type) 검사 등
- 중간 코드 생성
. 중간 코드 例) Pascal의 P 코드, Java의 바이트 코드 등
- 코드 최적화
- 목적 코드 생성
. 목적 코드(Object Code) : 기계어로 번역된 파일