고급 프로그래밍 언어로 작성한 원시 코드 (Source Code)를 컴퓨터 내부에서 사용 가능한 언어인 기계어 (Machine Language)로 '번역'하고, 이를 실행가능(Excecutable)하게 만들어주는 프로그램이다.
컴파일러를 사용하는 언어의 종류로는 C, C++, C#, Java 등이 있다.
※ 넓은 의미로, 전체 과정을 빌드(build)라고도 함.

| 명칭 | 설명 |
|---|---|
| 어휘 분석(Lexical Analysis) | 원시 코드를 기종마다 다른 고유의 문자열(Token)으로 변환. 즉 구성하는 문자들을 단어로 분리하여 어휘 요소로 생성하며 설계가 간단함. |
| 구문 분석(Syntax Analysis) | BNF/EBNF 문법 기반으로 Token을 입력하여 추상 구문 형태로 출력. 즉 어휘 요소들을 문장으로 구성하여 문법적으로 검사하고,이를 트리 형태(Parse Tree)로 만들어 분석. |
| 의미 분석(Semantic Analysis) | 식별자의 선언 여부, 타입 등 문장이 의미적으로 올바른지 검사하고, 변수의 정의와 사용, 함수 호출 등을 분석 |
| 중간 코드 생성(Intermediate Code Generation) | 검증된 소스 코드를 이해하기 쉬운 중간 코드 형태로 변환. macro를 포함한 어셈블리어 형태 |
| 코드 최적화(Code Optimization) | *지역최적화와 *전역최적화로 나뉘며, 중간 코드를 효율적으로 실행할 수 있도록 최적화함. |
| 💥기계어 코드 생성(Code Generation) | 매크로 처리기와 어셈블러의 결합 형태로 처리. 최적화된 중간 코드를 기계어로 번역하여 실행 파일 생성 |
출처 :
http://www.ktword.co.kr/test/view/view.php?m_temp1=1436
https://devparker.tistory.com/110
컴파일의 필요성(http://elearning.kocw.net/contents4/document/lec/2013/Gachon/Lee%20Sangsun2/3.pdf)