compiler ; 컴파일러

컴파일러는 특정 프로그램 언어로 작성된 문장을 처리하여 기계어 또는 컴퓨터가 사용할 수 있는 코드로 변경시켜주는 특수한 용도의 프로그램이라고 정의할 수 있다. CPascal과 같은 언어로 프로그램을 개발할 경우, 프로그래머는 편집기를 이용하여 한줄 한줄 문장을 작성하게 되는데, 이러한 파일들을 소스코드라고 부른다. 소스코드의 작성이 끝나면 프로그래머는 그 소스코드의 언어에 맞는 컴파일러를 실행시킨다.

컴파일러는 실행 시에 모든 문장을 먼저 구문적으로 하나씩 분해하고, (다른 문장을 참조하는 경우) 문장이 정확하게 참조될 수 있도록 여러 번의 연속적인 상태에서 결과코드를 만든다. 컴파일로 생긴 결과물은 목적코드(object code) 또는 목적 모듈(object module)이라 불리는데 - 여기서 object 라는 용어가 나왔지만 object-oriented programming 과는 아무 관련이 없다 - 목적코드는 프로세서가 한 번에 한 명령씩 처리하거나 또는 실행시킬 수 있는 기계코드(machine code)이다.

최근에 객체지향 언어의 하나인 자바에서는, 어떠한 컴퓨터 플랫폼에서도 실행될 수 있는 컴파일 결과물(이를 바이트코드라고 부른다)을 생산하는 체제를 도입했다. 이 바이트코드는 실행될 하드웨어의 종류에 관계없이 동일한 내용으로 생성되어 서버에 저장되는데, 필요할 때마다 네트웍을 통해 클라이언트로 다운로드된다. 클라이언트는 자바 가상머신 또는 바이트코드 해석기라고 불리는 JIT 컴파일러를 이용하여 바이트코드를 다시 컴파일 함으로써, 자신에 맞는 명령어로 변환한 다음 실행시키게 된다.

전통적으로 보통의 운영체계에서는 컴파일 이후에 또 하나의 추가과정이 요구되는데, 하나 이상의 목적 모듈이 동시에 실행되고 그것들이 서로의 명령어데이터를 상호 참조하게 될 때, 그 명령어나 데이터들 간의 상대적 위치를 정하는 과정이 그것이다. 이 과정을 링크 편집(linkage editing)이라 하며, 그 결과물은 로드 모듈(load module)이라 한다.

컴파일러는 3세대 언어(3GL), 4세대 언어(4GL) 및 5세대 언어(5GL)에 각각 적용되며, 어셈블러는 특정 프로세서의 어셈블러 언어로 작성된 프로그램에 적용된다.


이 정보는 1999년 5월 6일에 수정되었으며, 강봉순님께서 도움을 주셨습니다.
영어판(whatis.com)