컴파일러
컴파일러(compiler)란 프로그래밍 과정에서 인간이 작성한 소스 코드를 컴퓨터가 이해할 수 있는 기계어 또는 바이트코드로 번역해 주는 프로그램을 말한다. 처리기(processor)라고도 한다. 시스템에서 실행되는 객체 코드를 생성하는 컴파일러를 크로스 컴파일러라고 한다.
역사
컴파일러(comfiler)라는 개념은 그레이스 호퍼(Grace Hopper)가 "컴퓨터의 교육"(The Education of a Computer)이라는 제목의 보고서를 발표함으로서 최초로 정의되었다. 보고서에서 호퍼는 고급 프로그래밍 언어로 작성된 코드를 컴퓨터가 이해할 수 있는 이진(binary) 코드로 만들어 주는 기술을 소개해, 오늘날 컴파일러의 개념과 프로그래밍 코드의 해석방법을 정의했다. 호퍼는 자신이 "A-0"이라는 컴파일러를 직접 개발하기도 했다.
구성
컴파일러는 총 3가지로 구성되어 있다.
- 앞단
앞단 또는 프런트 엔드(front end)는 토큰화를 위한 어휘 분석(Lexing), 파스 트리 구성을 위한 구문 분석(Parsing), 중간 코드를 위한 의미 분석 등을 처리한다.
- 가운데단
가운데단 또는 미들 엔드(middle end)는 중간 코드에 대해 프로그램의 분석과 최적화를 처리한다.
- 뒷단
뒷단 또는 백엔드(back end)는 각각의 CPU 아키텍처에 대해 코드 최적화를 수행하며 최종 코드를 생성한다.